[ogg-dev] OggYUV

Arc arc at Xiph.org
Tue Nov 8 19:58:01 PST 2005

On Wed, Nov 09, 2005 at 10:52:53AM +0800, illiminable wrote:
> "fourcc" 's of rgb types
> http://www.fourcc.org/rgb.php

I'm prowd to say that http://wiki.xiph.org/OggRGB supports all of these 
losslessly as well as PNG for non-indexed bitmaps.  These are video formats, 
correct?  Not just single frames?

> raw yuv formats only
> http://www.fourcc.org/yuv.php

Wow, ok, this is interesting.  I don't know what to even call, ie, "YVU9".

> Enumeration of actual types that are used in directshow (bottom of page)
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedshow/html/_wcesdk_directshow_media_types.asp
> Descriptions of the common yuv types used in windows
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/YUVFormats.asp

These, assuming they're a subset of the above URLs, I'm not really interested 
in.  If DirectShow can't use a format exported by a video codec plugin, that's 
perfectly OK, it can either use another plugin within OggStream to convert it to 
something it /can/ use or it can simply not support that codec..

This is of course assuming Windows will even end up using OggStream.  It'd 
certainly reduce the workload of the DirectShow filter writters, and maintain a 
more consistant compatability across platforms, but my focus is GNU/Linux.

> >Just because the codec supports it, doesn't mean that every application which
> >uses the codec must support all the possibilities.  By making the data
> >definition generic we allow more re-used code (ie, for colorspace converters)
> >and prevent the "raw codec" sprawl you above described with FourCC codecs.
> Well thats the thing about raw codecs, if you use the types that are 
> supported by hardware and/or other codecs, you don't have to do anything 
> except copy the memory.  When you start using things that no hardware 
> generates, or can display directly, that's when you have to write code to 
> convert.

Um, last I knew, video cards don't take YUV data as-is.  It's converted on some 
level, and it's not just an issue of decoding from the codec plugin and throwing 
it to the video hardware.

Furthermore, we aren't going to put artificial limitations on future video 
codecs based on current hardware or the limitations of obsolete software.  If a 
codec finds it useful to encode, say, super high definition interlaced video 
which encodes one chroma for every luma on every other line, such that one 
interlaced scan includes chroma and the next doesn't, then it should be able to 
decode to the same raw YUV spec as everyone else..

.. and if another codec supports that YUV layout, or hardware, etc then it 
should be able to, directly.  If it doesn't, the maker of that codec is likely 
to also write a deinterlacer plugin which also does the chroma resampling to 
4:4:4 (ie, copying the chroma to 2 scans), and everyone can use that.

This is roughly the same if the codec plugin couldn't export it's custom format 
by itself, but was forced to deinterlace and convert to 4:4:4 on decode, except 
that if the application DOES support it, it can use it directly.

I'm definetly leaning toward a nearly universal YUV format, myself.  I'm seeing 
no reason to do otherwise, and many, many advantages in the long run.  It hurts 
nothing if only a handful of configurations are actually used, after all.

> All i'm saying, is there are certain types that are defined, hardware can 
> display them, hardware like cameras generate them.

But that's the difference between Microsoft and Xiph.  They write things and 
expect to write something new in 12-18 months to replace it, we write things 
with the intention that they be used more than 10 years in the future.

They write things with fixed values and artificial limitations, simply because 
it seems easier or it's easier for them to debug, where we write things 
open-ended and flexible such that we can continue to improve them over time.

They would do something as assinine as designing a special codec for every 
individual different format for raw data, with very little flexibility in each 
one, where we write one codec to cover all of them and much, much more.

If we wrote things like Microsoft does, we would be on Vorbis IX by now, not 
just beginning to talk about Vorbis II, and people would either have difficulty 
finding Vorbis I/II/III codec plugins or they'd be supplied in the Vorbis IX 
codec plugin which would be several times the size it really needed to be.


Thinking about this has certainly clarified my position on the different things 
we've talked about, and yea, I'm backtracking to the universal format, because 
it's what feels right for Xiph to do.  It doesn't matter if 95%+ of the 
different combinations never end up getting used, they are there if they're 
needed, and code for converter plugins can be more efficiently reused.


The recognition of individual possibility,
 to allow each to be what she and he can be,
  rests inherently upon the availability of knowledge;
 The perpetuation of ignorance is the beginning of slavery.

from "Die Gedanken Sind Frei": Free Software and the Struggle for Free Thought
 by Eben Moglen, General council of the Free Software Foundation

More information about the ogg-dev mailing list