From: <en...@ke...> - 2006-11-30 16:46:31
|
CVS Root: /cvs/gstreamer Module: gst-plugins-good Changes by: ensonic Date: Thu Nov 30 2006 16:46:25 UTC Log message: * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list), (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame), (gst_v4l2src_get_capture), (gst_v4l2src_set_capture), (gst_v4l2src_capture_init), (gst_v4l2src_buffer_finalize): cleanup the error message a bit more Modified files: . : ChangeLog sys/v4l2 : v4l2src_calls.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-good/ChangeLog.diff?r1=1.2640&r2=1.2641 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-good/sys/v4l2/v4l2src_calls.c.diff?r1=1.49&r2=1.50 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-good/ChangeLog,v retrieving revision 1.2640 retrieving revision 1.2641 diff -u -d -r1.2640 -r1.2641 --- ChangeLog 28 Nov 2006 12:30:10 -0000 1.2640 +++ ChangeLog 30 Nov 2006 16:46:13 -0000 1.2641 @@ -1,3 +1,11 @@ +2006-11-30 Stefan Kost <en...@us...> + + * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list), + (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame), + (gst_v4l2src_get_capture), (gst_v4l2src_set_capture), + (gst_v4l2src_capture_init), (gst_v4l2src_buffer_finalize): + cleanup the error message a bit more 2006-11-28 Wim Taymans <wi...@fl...> * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init): Index: v4l2src_calls.c RCS file: /cvs/gstreamer/gst-plugins-good/sys/v4l2/v4l2src_calls.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -d -r1.49 -r1.50 --- v4l2src_calls.c 18 Nov 2006 18:14:34 -0000 1.49 +++ v4l2src_calls.c 30 Nov 2006 16:46:13 -0000 1.50 @@ -92,7 +92,7 @@ failed: { GST_ELEMENT_ERROR (v4l2src, RESOURCE, SETTINGS, - (_("Failed to enumerate possible video formats device '%s' can work with"), v4l2src->v4l2object->videodev), ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)", n, v4l2src->v4l2object->videodev, errno, strerror (errno))); + (_("Failed to enumerate possible video formats device '%s' can work with"), v4l2src->v4l2object->videodev), ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)", n, v4l2src->v4l2object->videodev, errno, g_strerror (errno))); g_free (format); return FALSE; } @@ -126,12 +126,12 @@ if (ioctl (v4l2src->v4l2object->video_fd, VIDIOC_QBUF, &v4l2src->pool->buffers[i].buffer) < 0) - goto failed; + goto qbuf_failed; return TRUE; /* ERRORS */ -failed: +qbuf_failed: GST_ELEMENT_ERROR (v4l2src, RESOURCE, WRITE, (_("Could not exchange data with device '%s'."), @@ -150,8 +150,9 @@ gint gst_v4l2src_grab_frame (GstV4l2Src * v4l2src) { +#define NUM_TRIALS 100 struct v4l2_buffer buffer; - gint32 trials = 100; + gint32 trials = NUM_TRIALS; memset (&buffer, 0x00, sizeof (buffer)); buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; @@ -160,7 +161,7 @@ /* if the sync() got interrupted, we can retry */ switch (errno) { case EAGAIN: - GST_DEBUG_OBJECT (v4l2src, + GST_WARNING_OBJECT (v4l2src, "Non-blocking I/O has been selected using O_NONBLOCK and" " no buffer was in the outgoing queue. device %s", v4l2src->v4l2object->videodev); @@ -170,7 +171,7 @@ case ENOMEM: goto nomem; case EIO: "VIDIOC_DQBUF failed due to an internal error." " Can also indicate temporary problems like signal loss." " Note the driver might dequeue an (empty) buffer despite" @@ -178,7 +179,7 @@ " device %s", v4l2src->v4l2object->videodev); break; case EINTR: "could not sync on a buffer on device %s", @@ -189,10 +190,12 @@ } + /* check nr. of attempts to capture */ if (--trials == -1) { goto too_many_trials; } else { - ioctl (v4l2src->v4l2object->video_fd, VIDIOC_QBUF, &buffer); + if (ioctl (v4l2src->v4l2object->video_fd, VIDIOC_QBUF, &buffer) < 0) + goto qbuf_failed; memset (&buffer, 0x00, sizeof (buffer)); buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buffer.memory = v4l2src->breq.memory; @@ -226,8 +229,17 @@ GST_ELEMENT_ERROR (v4l2src, RESOURCE, FAILED, (_("Failed trying to get video frames from device '%s'."), v4l2src->v4l2object->videodev), - (_("Failed after 100 tries. device %s."), - v4l2src->v4l2object->videodev)); + (_("Failed after %d tries. device %s. system error: %s"), + NUM_TRIALS, v4l2src->v4l2object->videodev, g_strerror (errno))); + return -1; + } + { + GST_ELEMENT_ERROR (v4l2src, RESOURCE, WRITE, + (_("Could not exchange data with device '%s'."), + v4l2src->v4l2object->videodev), + ("Error queueing buffer on device %s. system error: %s", + v4l2src->v4l2object->videodev, g_strerror (errno))); return -1; } @@ -260,7 +272,7 @@ (_("Failed querying in which video format device '%s' is working with"), ("Failed VIDIOC_G_FMT for %s. (%d - %s)", - v4l2src->v4l2object->videodev, errno, strerror (errno))); + v4l2src->v4l2object->videodev, errno, g_strerror (errno))); @@ -346,7 +358,7 @@ ("Failed to set pixelformat to %s @ %dx%d for device %s. (%d - %s)", fmt->description, *width, *height, pixfmt_failed: @@ -356,7 +368,7 @@ fail: @@ -484,7 +496,7 @@ (_("The driver of device '%s' is broken."), ("no supported read capability from %s. (%d - %s)", no_buffers: @@ -494,7 +506,7 @@ ("we received %d from device '%s', we want at least %d. (%d - %s))", v4l2src->breq.count, v4l2src->v4l2object->videodev, - GST_V4L2_MIN_BUFFERS, errno, strerror (errno))); + GST_V4L2_MIN_BUFFERS, errno, g_strerror (errno))); v4l2src->breq.count = buffers; @@ -504,7 +516,7 @@ (_("Could not get properties of data comming from device '%s'"), ("Failed querying buffer properties. (%d - %s)", - errno, strerror (errno))); + errno, g_strerror (errno))); gst_v4l2src_capture_deinit (v4l2src); @@ -513,7 +525,7 @@ GST_ELEMENT_ERROR (v4l2src, RESOURCE, READ, (_("Could not map memory in device '%s'."), - ("mmap failed. (%d - %s)", errno, strerror (errno))); + ("mmap failed. (%d - %s)", errno, g_strerror (errno))); buffer->start = 0; @@ -927,8 +939,9 @@ GST_LOG ("freeing buffer %p (nr. %d)", buf, buf->buffer.index); if (!g_atomic_int_dec_and_test (&buf->refcount)) { - /* we're still in use, add to queue again - note: this might fail because the device is already stopped (race) */ + /* we're still in use, add to queue again + * note: this might fail because the device is already stopped (race) + */ if (ioctl (buf->pool->video_fd, VIDIOC_QBUF, &buf->buffer) < 0) GST_INFO ("readding to queue failed, assuming video device is stopped"); |