summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorZhao Halley <halley.zhao@intel.com>2011-12-06 08:55:19 +0800
committerThibault Saunier <thibault.saunier@collabora.com>2011-12-06 17:05:52 -0300
commit4960d27d733fdd00736702ae4b6e74876e2e3001 (patch)
tree9c9e8f0cdf3c6250d7db378e9df3c432f829318d /gst-libs
parent5aaf56af2936df3e789e48cfacaf8e398c7e49c6 (diff)
codecparsers: first video_packet_header doesn't start with resync_marker
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/codecparsers/gstmpeg4parser.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gst-libs/gst/codecparsers/gstmpeg4parser.c b/gst-libs/gst/codecparsers/gstmpeg4parser.c
index 5b7c45cfc..302219fc1 100644
--- a/gst-libs/gst/codecparsers/gstmpeg4parser.c
+++ b/gst-libs/gst/codecparsers/gstmpeg4parser.c
@@ -364,7 +364,8 @@ compute_resync_marker_size (const GstMpeg4VideoObjectPlane * vop,
*/
static GstMpeg4ParseResult
gst_mpeg4_next_resync (GstMpeg4Packet * packet,
- const GstMpeg4VideoObjectPlane * vop, const guint8 * data, gsize size)
+ const GstMpeg4VideoObjectPlane * vop, const guint8 * data, gsize size,
+ gboolean first_resync_marker)
{
guint markersize = 0, off1, off2;
guint32 mask = 0xff, pattern = 0xff;
@@ -377,7 +378,11 @@ gst_mpeg4_next_resync (GstMpeg4Packet * packet,
markersize = compute_resync_marker_size (vop, &pattern, &mask);
- off1 = gst_byte_reader_masked_scan_uint32 (&br, mask, pattern, 0, size);
+ if (first_resync_marker) {
+ off1 = 0;
+ } else {
+ off1 = gst_byte_reader_masked_scan_uint32 (&br, mask, pattern, 0, size);
+ }
if (off1 == -1)
return GST_MPEG4_PARSER_NO_PACKET;
@@ -425,6 +430,7 @@ gst_mpeg4_parse (GstMpeg4Packet * packet, gboolean skip_user_data,
gint off1, off2;
GstByteReader br;
GstMpeg4ParseResult resync_res;
+ static guint first_resync_marker = TRUE;
gst_byte_reader_init (&br, data, size);
@@ -438,7 +444,9 @@ gst_mpeg4_parse (GstMpeg4Packet * packet, gboolean skip_user_data,
if (vop) {
resync_res =
- gst_mpeg4_next_resync (packet, vop, data + offset, size - offset);
+ gst_mpeg4_next_resync (packet, vop, data + offset, size - offset,
+ first_resync_marker);
+ first_resync_marker = FALSE;
/* We found a complet slice */
if (resync_res == GST_MPEG4_PARSER_OK)
@@ -449,6 +457,8 @@ gst_mpeg4_parse (GstMpeg4Packet * packet, gboolean skip_user_data,
goto find_end;
} else if (resync_res == GST_MPEG4_PARSER_NO_PACKET)
return resync_res;
+ } else {
+ first_resync_marker = TRUE;
}
off1 = gst_byte_reader_masked_scan_uint32 (&br, 0xffffff00, 0x00000100,