[ogg-dev] Re: [Vorbis] Re: New Media Codec: Audio, Video & Atmosphere Lighting help

Ian Malone ibmalone at gmail.com
Sun Mar 9 08:55:01 PDT 2008


paul griffiths wrote:
> MIDI and DMX(Disco lighting control) is not the same thing, does anyone have
> a simple example ogg stream so i can adapt it to accept dmx data?
> 
> pulling apart theora or vorbis to create a new codec is not a clean way, i
> need some simple code to start off from. surely there is an example on the
> net of how to create a new ogg codec?
> 

Not as such, as far as Ogg is concerned all you're doing is putting
in packets from your codec.  For that you may want to look at
liboggz <http://www.annodex.net/software/liboggz/html/> or libogg
<http://xiph.org/ogg/doc/libogg/> (liboggz is a higher level interface
and probably better if you want to create a new codec).  liboggz also
has example source code demonstrating how to read and write packets.

Essentially you need:
1. An ident header to identify the stream type and provide essential
   information (e.g. version number, Vorbis provides frequency and number
   of channels.
2. A granulepos <> time scheme and metrics to go in skeleton.
   <http://wiki.xiph.org/index.php/Ogg_Skeleton>
(3. End of stream packet, required but doesn't require any thought.)

You may have:
1. Additional setup headers, things like channel mappings go here.
2. Data packets.

For simpler examples of codecs used in Ogg you may want to look at
OggPCM <http://wiki.xiph.org/index.php/OggPCM_Draft2> and
<http://wiki.xiph.org/index.php/CMML>.  You may also want to look at
OggKate <http://wiki.xiph.org/index.php/OggKate>, currently being
developed as a subtitle codec.

My knowledge of DMX is limited to five minutes on the wikipedia
article, but it looks like your problem will be working out channel
mappings (is this a laser or a smoke machine type questions).
Actually, you might be better off with designing a more flexible
control protocol to put in Ogg and have a decoder that generates
DMX instructions from it.  It may be possible to do that in CMML.

-- 
imalone


More information about the ogg-dev mailing list