h264parser: not all startcodes should have 3-byte 0 prefix
authorMatej Knopp <matej.knopp@gmail.com>
Thu, 12 Dec 2013 16:49:24 +0000 (17:49 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Sat, 14 Dec 2013 11:17:40 +0000 (12:17 +0100)
commit6af387cd5ab2c946025e5499903e75ee87b063a9
treeb36ffcf6890a8fa53c4c97858d990873b929a5b1
parent821c3edca8fd5d5c65d277e3b118b9fb4c424dc9
h264parser: not all startcodes should have 3-byte 0 prefix

The parser assumes that every time there is a 0 before the startcode,
it is part of the startcode. But that's not true.

From the specification

Byte stream NAL unit syntax
zero_byte is a single byte equal to 0x00.
  When any of the following conditions are fulfilled, the zero_byte syntax
  element shall be present.
  – the nal_unit_type within the nal_unit( ) is equal to 7 (sequence parameter
    set) or 8 (picture parameter set)
  – the byte stream NAL unit syntax structure contains the first NAL unit of an
    access unit in decoding order, as specified by subclause 7.4.1.2.3.

The problem with doing this for all startcodes is that a trailing zero can mess
up timestamps. The trailing zero gets prepended to the startcode, which will
carry the PTS and DTS of previous buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=664443
gst-libs/gst/codecparsers/gsth264parser.c