summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2010-01-23 22:05:40 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2010-01-23 22:10:09 +0100
commitb38dcf5277f28e12b5b9bb1e554de78282ebb2f3 (patch)
treecb568ef6a490e875cf6b027f6a6d1c23992efb0e
parent592bc87dc95d88e52fda9eec2d61828c2d6c6ec0 (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.c15
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;