diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-01-23 22:05:40 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-01-23 22:10:09 +0100 |
commit | b38dcf5277f28e12b5b9bb1e554de78282ebb2f3 (patch) | |
tree | cb568ef6a490e875cf6b027f6a6d1c23992efb0e | |
parent | 592bc87dc95d88e52fda9eec2d61828c2d6c6ec0 (diff) |
oggdemux: Don't strip all 0-bytes from the end of OGM packets
This fixes broken packets pushed downstream by oggdemux for
MPEG4 streams for example.
-rw-r--r-- | ext/ogg/gstoggdemux.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 7713fd93..0b60b405 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -481,7 +481,6 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet) GstOggChain *chain; gint64 duration; gint offset; - gint trim; GstClockTime out_timestamp, out_duration; guint64 out_offset, out_offset_end; @@ -531,15 +530,8 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet) } offset = 1 + (((data[0] & 0xc0) >> 6) | ((data[0] & 0x02) << 1)); - - trim = 0; - while (bytes && data[bytes - 1] == 0) { - trim++; - bytes--; - } } else { offset = 0; - trim = 0; } /* get timing info for the packet */ @@ -600,13 +592,12 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet) } /* check for invalid buffer sizes */ - if (G_UNLIKELY (offset + trim >= packet->bytes)) + if (G_UNLIKELY (offset >= packet->bytes)) goto empty_packet; ret = gst_pad_alloc_buffer_and_set_caps (GST_PAD_CAST (pad), - GST_BUFFER_OFFSET_NONE, packet->bytes - offset - trim, - GST_PAD_CAPS (pad), &buf); + GST_BUFFER_OFFSET_NONE, packet->bytes - offset, GST_PAD_CAPS (pad), &buf); /* combine flows */ cret = gst_ogg_demux_combine_flows (ogg, pad, ret); @@ -614,7 +605,7 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet) goto no_buffer; /* copy packet in buffer */ - memcpy (buf->data, packet->packet + offset, packet->bytes - offset - trim); + memcpy (buf->data, packet->packet + offset, packet->bytes - offset); GST_BUFFER_TIMESTAMP (buf) = out_timestamp; GST_BUFFER_DURATION (buf) = out_duration; |