[theora-dev] a new proposal
Timothy B. Terriberry
tterribe at vt.edu
Wed Feb 25 23:50:23 PST 2004
> What if, instead of this hypothetical vorbis stream at 44.1kHz, I am
> recording from a PC sound card, so I have one which floats between, say
> 44000 and 44200. Or I'm recording video, and every once in a while,
> something happens and I drop a frame. Such is life. Since the rate isn't
> constant for the entire stream, granulepos doesn't let you calculate an
> exact time offset. It'll be off by a small percentage.
Vorbis is only capable of storing fixed-sample-rate audio. If your audio
sample rate changes, then you need to resample it at a fixed rate to use
Vorbis. This is a limitation of Vorbis (and any other audio codec I can
think of), not of Ogg. This is like saying, "If I lie to the Ogg layer
about the timing information in a stream, why doesn't it keep synch
properly?"
Dropped frames do not pose a synch problem, even with fixed frame rates,
because the duration of one is exactly one frame. If you mean to imply
that your capture card hands you frames at a variable rate, then to use
Theora you will also need to resample this to a fixed rate. Again, this
is a limitation of the codec, not the container.
Another possible solution is to correct the time the video frames are
presented to match the variations in audio sample rate. Your audio is
still wrong, but at least the video will match it. However, that
requires variable frame rates, which the current version of Theora does
not support. Note that this is a limitation of Theora, not of Ogg.
I will say this again, because I want to emphasize it:
<p><p>NOTHING about Ogg limits streams to a fixed sample rate or frame rate.
<p><p>This limitation is imposed by current codecs, mostly for design
simplicity. Unfortunately, a lot of people seem to think that it applies
to the entire framework. This is one of the reasons that Ogg does not
define a generic audio header, or generic video header: such "generic"
headers impose implicit assumptions on the capabilities of any audio or
video codec that can be stored in the container. For example, AVIs
cannot possible store variable frame rate video because their header
specifies a fixed frame rate in it, for all codecs. Ditto for AVI audio.
One could change the headers for Theora tomorrow to allow the
specification of a display time for each frame in milliseconds, instead
of using a fixed frame rate. That also imposes the implicit assumption
that millisecond accuracy is enough. Knowing the trade-offs involved, we
chose to keep the frame rate fixed. Future codecs, or even future
versions, may make the other choice.
--- >8 ----
List archives: http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'theora-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body. No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.
More information about the Theora-dev
mailing list