diff options
author | Robert Krakora <rob.krakora@messagenetsystems.com> | 2013-08-19 15:31:51 -0400 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2013-08-21 13:58:09 +0100 |
commit | 05183675077d502aaf0e7483656f5610bb4d0f43 (patch) | |
tree | 6b98da3d5e82f3cd2112acb5cfa723544126ed81 | |
parent | 7d5b8e37287699c434628c63a35258f0f9619fe3 (diff) |
uvch264src: don't error out on incomplete aux data segment0.10
It appears that the Logitech C920 sometimes drops the next
to last segment of RAW aux data contained within the MJPEG
container. H264 data that is multiplexed with in the same
container does not appear to be affected. This appears to
be a bug in the Logitech C920 firmware and uvch264src should
not error out in this case.
Sometimes it can take 24 hours of continuous streaming for
the problem to occur, but sometimes it takes only a couple
of hours.
https://bugzilla.gnome.org/show_bug.cgi?id=706276
-rwxr-xr-x[-rw-r--r--] | sys/uvch264/gstuvch264_mjpgdemux.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/uvch264/gstuvch264_mjpgdemux.c b/sys/uvch264/gstuvch264_mjpgdemux.c index 4bc689981..75ba5153d 100644..100755 --- a/sys/uvch264/gstuvch264_mjpgdemux.c +++ b/sys/uvch264/gstuvch264_mjpgdemux.c @@ -473,6 +473,7 @@ gst_uvc_h264_mjpg_demux_chain (GstPad * pad, GstBuffer * buf) guint i; guchar *data; guint size; + guint16 segment_size = 0; self = GST_UVC_H264_MJPG_DEMUX (GST_PAD_PARENT (pad)); @@ -488,7 +489,6 @@ gst_uvc_h264_mjpg_demux_chain (GstPad * pad, GstBuffer * buf) for (i = 0; i < size - 1; i++) { /* Check for APP4 (0xe4) marker in the jpeg */ if (data[i] == 0xff && data[i + 1] == 0xe4) { - guint16 segment_size; /* Sanity check sizes and get segment size */ if (i + 4 >= size) { @@ -683,9 +683,10 @@ gst_uvc_h264_mjpg_demux_chain (GstPad * pad, GstBuffer * buf) jpeg_it = NULL; if (aux_buf != NULL) { - GST_ELEMENT_ERROR (self, STREAM, DEMUX, - ("Incomplete auxiliary stream. %d bytes missing", aux_size), (NULL)); - ret = GST_FLOW_ERROR; + GST_DEBUG_OBJECT (self, "Incomplete auxiliary stream: %d bytes missing, " + "%d segment size remaining -- missing segment, C920 bug?", + aux_size, segment_size); + ret = GST_FLOW_OK; goto done; } |