Don't use irrelevant debugging output on get_buffer calls, and fix a race in v4lsrc

Original commit message from CVS:
Don't use irrelevant debugging output on get_buffer calls, and fix a race in v4lsrc
This commit is contained in:
Ronald S. Bultje 2003-01-31 23:44:40 +00:00
parent 60e053f79c
commit e346961876
2 changed files with 13 additions and 5 deletions

View file

@ -498,7 +498,7 @@ guint8 *
gst_v4lmjpegsrc_get_buffer (GstV4lMjpegSrc *v4lmjpegsrc, gst_v4lmjpegsrc_get_buffer (GstV4lMjpegSrc *v4lmjpegsrc,
gint num) gint num)
{ {
DEBUG("gst_v4lmjpegsrc_get_buffer(), num = %d", num); /*DEBUG("gst_v4lmjpegsrc_get_buffer(), num = %d", num);*/
if (!GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lmjpegsrc)) || if (!GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lmjpegsrc)) ||
!GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lmjpegsrc))) !GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lmjpegsrc)))

View file

@ -77,9 +77,12 @@ gst_v4lsrc_queue_frame (GstV4lSrc *v4lsrc,
v4lsrc->mmap.frame = num; v4lsrc->mmap.frame = num;
g_mutex_lock(v4lsrc->mutex_queued_frames);
if (v4lsrc->frame_queued[num] < 0) if (v4lsrc->frame_queued[num] < 0)
{ {
v4lsrc->frame_queued[num] = 0; //v4lsrc->frame_queued[num] = 0;
g_mutex_unlock(v4lsrc->mutex_queued_frames);
return TRUE; return TRUE;
} }
@ -88,12 +91,12 @@ gst_v4lsrc_queue_frame (GstV4lSrc *v4lsrc,
gst_element_error(GST_ELEMENT(v4lsrc), gst_element_error(GST_ELEMENT(v4lsrc),
"Error queueing a buffer (%d): %s", "Error queueing a buffer (%d): %s",
num, g_strerror(errno)); num, g_strerror(errno));
g_mutex_unlock(v4lsrc->mutex_queued_frames);
return FALSE; return FALSE;
} }
v4lsrc->frame_queued[num] = 1; v4lsrc->frame_queued[num] = 1;
g_mutex_lock(v4lsrc->mutex_queued_frames);
v4lsrc->num_queued_frames++; v4lsrc->num_queued_frames++;
g_cond_broadcast(v4lsrc->cond_queued_frames); g_cond_broadcast(v4lsrc->cond_queued_frames);
g_mutex_unlock(v4lsrc->mutex_queued_frames); g_mutex_unlock(v4lsrc->mutex_queued_frames);
@ -128,8 +131,10 @@ gst_v4lsrc_soft_sync_thread (void *arg)
g_mutex_lock(v4lsrc->mutex_queued_frames); g_mutex_lock(v4lsrc->mutex_queued_frames);
if (v4lsrc->num_queued_frames < MIN_BUFFERS_QUEUED) if (v4lsrc->num_queued_frames < MIN_BUFFERS_QUEUED)
{ {
if (v4lsrc->frame_queued[frame] < 0) if (v4lsrc->frame_queued[frame] < 0) {
g_mutex_unlock(v4lsrc->mutex_queued_frames);
break; break;
}
DEBUG("Waiting for new frames to be queued (%d < %d)", DEBUG("Waiting for new frames to be queued (%d < %d)",
v4lsrc->num_queued_frames, MIN_BUFFERS_QUEUED); v4lsrc->num_queued_frames, MIN_BUFFERS_QUEUED);
@ -410,7 +415,7 @@ gst_v4lsrc_grab_frame (GstV4lSrc *v4lsrc, gint *num)
guint8 * guint8 *
gst_v4lsrc_get_buffer (GstV4lSrc *v4lsrc, gint num) gst_v4lsrc_get_buffer (GstV4lSrc *v4lsrc, gint num)
{ {
DEBUG("gst_v4lsrc_get_buffer(), num = %d", num); /*DEBUG("gst_v4lsrc_get_buffer(), num = %d", num);*/
if (!GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lsrc)) || if (!GST_V4L_IS_ACTIVE(GST_V4LELEMENT(v4lsrc)) ||
!GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lsrc))) !GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lsrc)))
@ -460,8 +465,11 @@ gst_v4lsrc_capture_stop (GstV4lSrc *v4lsrc)
GST_V4L_CHECK_ACTIVE(GST_V4LELEMENT(v4lsrc)); GST_V4L_CHECK_ACTIVE(GST_V4LELEMENT(v4lsrc));
/* we actually need to sync on all queued buffers but not on the non-queued ones */ /* we actually need to sync on all queued buffers but not on the non-queued ones */
g_mutex_lock(v4lsrc->mutex_queued_frames);
for (n=0;n<v4lsrc->mbuf.frames;n++) for (n=0;n<v4lsrc->mbuf.frames;n++)
v4lsrc->frame_queued[n] = -1; v4lsrc->frame_queued[n] = -1;
g_cond_broadcast(v4lsrc->cond_queued_frames);
g_mutex_unlock(v4lsrc->mutex_queued_frames);
g_thread_join(v4lsrc->thread_soft_sync); g_thread_join(v4lsrc->thread_soft_sync);