[Theora] Theora, great stuff!
alenl-ml at croteam.com
Mon Aug 22 05:04:35 PDT 2005
From: "Ralph Giles" <giles at xiph.org>
> Absolutely. The vorbis and speex codecs have in fact been very
> successful within proprietary games. Arguably that is their
> most successful domain. Primarily because of technical excellence
> and of course the zero cost--even Microsoft appears to prefer libvorbis
> to their own WMA technology for many titles. And of course if Theora
> becomes a dominant online form demanded by users, many proprietary
> applications will have to support it.
You are right on the spot here. BSD-style license is very important for
games because most games must run on at least one closed-source platform
(consoles usually). That's why GLPL just doesn't cut it for games. However,
I'd like to point out two things that seem to be a bit overlooked when it
comes to usability of Theora in games. And those are: (a) performance and
(b) ease of encoding.
Let me analyze these a bit:
None of the currently available decoders (to my knowledge) are able to run a
640x360 movie at steady 30fps on a <1GHz CPU and this is especially visible
in scenes with a lot of motion. Average CPU usage is usually well under
100%, but some frames (keyframes perhaps?) simply take more than 33ms to
decode, what makes the whole thing unusable. I am saying this from
experience with trying to make this work on Xbox (733MHz Celeron - more or
less). WMV was much faster so, unfortunately, we had to give up on Theora
for that. Note that even some PCs that are quite capable of running latest
games (1.5GHz and similar) are having a hard time with that size of movie in
Theora. While competitive formats (DivX, Bink, WMV) handle that with ease.
I understand that the current decoder(s) are mostly reference code, but that
doesn't help for real production. For Theora to be as accepted for games as
Vorbis is, it would require much more attention at the performance side then
it receives right now. (Not that Vorbis is perfect here. It is still
significantly slower than WMA, but at least it is acceptable on the PC. But
it is also not good enough for XBox yet, though.) I have noticed some
efforts to measure and optimize Theora lately, and I have to mention I see
one problem in approach: improving average time needed to decode an entire
movie is not good enough. It needs to be capable of decoding each movie
frame in time that is strictly lower than that frame's length. So efforts
need to be concentrated on the frames with worst decompression time.
Generally, as BSD is most useful for closed platforms, and closed platforms
usually have lower end CPUs than contemporary PCs, this is a contradiction
in terms. To make a full use of the opportunites that Theora has, besides
BSD license, it would also need to have significantly better performance.
(Vorbis could use some as well, but that's not a topic here.)
(b) Ease of encoding
This is not a critical problem (as speed is), but is still a big pain in the
neck. Majority of game shops are mostly Windows based and there is still no
good way to frameserve a movie from a Windows video mixing app into Theora.
The only possible way I was able to get at was to use the GraphEditor from
DirectX SDK in combination with Illiminable's codecs. The problem is with
the ogg container, which is not directly supported for video editing. All
apps assume that the container for video files will be either AVI or MPEG.
While it is possible to use a nonstandard container, and most apps support
that for decoding, the only app that supports that for _encoding_ is
GraphEditor and it is basically a buggy, hacked-up, proof-of-concept demo
program, not a real useable tool. Using this method requires a lot of manual
setup for each movie that is to be encoded, and there are literally hundreds
in the project we are currently working on. Let me tell you people who
worked on that now take the name "Theora" as a synonym for pain and
I hope that these comments will be taken in a good spirit. I appreciate what
you Theora devs have done, and I just want to share this view "from the
other side of API", and hopefully help make Theora a trully accepted
Thanks for following through this,
More information about the Theora