mpegtsmux: Initialize PES packet before getting the header size.
authorAndoni Morales Alastruey <ylatuya@gmail.com>
Wed, 1 Sep 2010 20:05:43 +0000 (22:05 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 4 Sep 2010 13:01:30 +0000 (15:01 +0200)
commit4668330bdc810256027637cf9aac3178e769d6b9
tree913faf258949e9bf746b914b71818a16d7f4769d
parent8af858cf8f166a4ab81d036bdb75b44f354a821b
mpegtsmux: Initialize PES packet before getting the header size.

The PES header length is calculated before setting the dynamic flags, returning
a wrong value. Small frames that should be sent in a single TS packet are
spawned to a new packet because of that error. For audio streams where a single
frame can cope in one TS packet it introduces a huge overhead.

For a 100B packet, we prepare a TS packet with a payload of(100+9)B. Then, we
write the TS header using this value in tsmux_write_ts_header, and call
tsmux_stream_get_data(). The dynamic flags where not set yet and now
tsmux_stream_pes_header_length() returns 14B instead of 9B. The payload of the
TS packet is 114B, 5B more than what was calculated. 109B are sent in a first
packet and the remaining 5B are sent in another one.

Fixes bug #628548.
gst/mpegtsmux/tsmux/tsmux.c
gst/mpegtsmux/tsmux/tsmuxstream.c
gst/mpegtsmux/tsmux/tsmuxstream.h