[Matroska-devel] Opus in Matroksa Cont.
moritz at bunkus.org
Fri Jul 5 09:06:03 CEST 2013
On Sun, Jun 9, 2013 at 10:08 AM, Steve Lhomme <slhomme at matroska.org> wrote:
> + <element name="CodecDelay" level="3" id="0x56AA" type="uinteger"
multiple="0" default="0" minver="4" webm="1">CodecDelay is the delay in
nanoseconds to add to each Block timestamp. The value should be small so
the muxing of tracks with the same actual timestamp are in the same
I'm currently implementing proper Opus support for Matroska. Unfortunately
CodecDelay's definition has to be changed. Citing from the Ogg Opus
> A 'pre-skip' field in the ID header (see Section 5.1) signals the number
of samples whi
h SHOULD be skipped (decoded but discarded) at the beginning of the stream.
and futher below:
> 'PCM sample position' = 'granule position' - 'pre-skip'
So with _our_ definition that says we have to add that value to the
timestamps and that is unsigned there's actually no way to express that an
audio packet corresponds to a video packet with timestamp 0. It also seems
not so say what Opus needs it to say: that a number of samples have to be
dropped because they're simply invalid.
V1 at 0, V2 at 40, V3 at 80
A1 at 0, A2 at 20, A3 at 40, A4 at 60, A5 at 80 with CodecDelay 40
Packing the corresponding packets together (as they would have to be during
V1 at 0, V2 at 40, A1 at 0, A2 at 20, V3 at 80
Instead for Opus we would need an arrangement that looked like this:
A1 at 0, A2 at 20, V1 at 0, A3 at 40, A4 at 60, V2 at 40, A5 at 80
So either CodecDelay must be a signed integer or the wording must be
changed... but only _adding_ an _unsigned_ value is insufficient for Opus.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Matroska-devel