diff options
author | Edgard Lima <edgard.lima@indt.org.br> | 2007-10-22 19:14:08 +0000 |
---|---|---|
committer | Edgard Lima <edgard.lima@indt.org.br> | 2007-10-22 19:14:08 +0000 |
commit | 7ec35b117eb7b3cc1668820b5e285fe558b628d3 (patch) | |
tree | e138ff818b1f6d701cc406a2b7ee4f170d75bad8 /sys/v4l2/v4l2src_calls.c | |
parent | 56e63b44885808845f99fd3b6424bd9eeee8f2f0 (diff) |
sys/v4l2/v4l2src_calls.c: Fixes "v4l2src ! queue ! xvimagesink". The queue ask for buffer too early. It is temporary ...
Original commit message from CVS:
* sys/v4l2/v4l2src_calls.c: (gst_v4l2src_grab_frame):
Fixes "v4l2src ! queue ! xvimagesink". The queue ask for buffer too
early. It is temporary until we find something better.
Diffstat (limited to 'sys/v4l2/v4l2src_calls.c')
-rw-r--r-- | sys/v4l2/v4l2src_calls.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/sys/v4l2/v4l2src_calls.c b/sys/v4l2/v4l2src_calls.c index 9943933b..ec057965 100644 --- a/sys/v4l2/v4l2src_calls.c +++ b/sys/v4l2/v4l2src_calls.c @@ -942,15 +942,26 @@ gst_v4l2src_grab_frame (GstV4l2Src * v4l2src, GstBuffer ** buf) } } - g_mutex_lock (v4l2src->pool->lock); + do { - index = buffer.index; + g_mutex_lock (v4l2src->pool->lock); + + index = buffer.index; + + /* get our GstBuffer with that index from the pool, if the buffer was + * outstanding we have a serious problem. */ + pool_buffer = GST_BUFFER (v4l2src->pool->buffers[index]); + + if (pool_buffer == NULL) { + g_mutex_unlock (v4l2src->pool->lock); + g_usleep (20000); /* wait 20 miliseconds */ + /* FIXME: we need a exit condition here */ + } else { + break; + } + + } while (TRUE); - /* get our GstBuffer with that index from the pool, if the buffer was - * outstanding we have a serious problem. */ - pool_buffer = GST_BUFFER (v4l2src->pool->buffers[index]); - if (pool_buffer == NULL) - goto no_buffer; GST_LOG_OBJECT (v4l2src, "grabbed buffer %p at index %d", pool_buffer, index); @@ -1036,7 +1047,7 @@ too_many_trials: NUM_TRIALS, v4l2src->v4l2object->videodev, g_strerror (errno))); return GST_FLOW_ERROR; } -no_buffer: +#if 0 { GST_ELEMENT_ERROR (v4l2src, RESOURCE, FAILED, (_("Failed trying to get video frames from device '%s'."), @@ -1045,6 +1056,7 @@ no_buffer: g_mutex_unlock (v4l2src->pool->lock); return GST_FLOW_ERROR; } +#endif /* qbuf_failed: { |