From b38dcf5277f28e12b5b9bb1e554de78282ebb2f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 23 Jan 2010 22:05:40 +0100 Subject: [PATCH] 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. --- ext/ogg/gstoggdemux.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 7713fd9344..0b60b4051c 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;