diff options
author | Zhao Halley <halley.zhao@intel.com> | 2011-12-06 08:55:19 +0800 |
---|---|---|
committer | Thibault Saunier <thibault.saunier@collabora.com> | 2011-12-06 17:05:52 -0300 |
commit | 4960d27d733fdd00736702ae4b6e74876e2e3001 (patch) | |
tree | 9c9e8f0cdf3c6250d7db378e9df3c432f829318d /gst-libs | |
parent | 5aaf56af2936df3e789e48cfacaf8e398c7e49c6 (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.c | 16 |
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, |