| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 
							
- #------------------------------------------------------------------------------
 
- # vorbis:  file(1) magic for Ogg/Vorbis files
 
- #
 
- # From Felix von Leitner <leitner@fefe.de>
 
- # Extended by Beni Cherniavsky <cben@crosswinds.net>
 
- # Further extended by Greg Wooledge <greg@wooledge.org>
 
- #
 
- # Most (everything but the number of channels and bitrate) is commented
 
- # out with `##' as it's not interesting to the average user.  The most
 
- # probable things advanced users would want to uncomment are probably
 
- # the number of comments and the encoder version.
 
- #
 
- # FIXME: The first match has been made a search, so that it can skip
 
- # over prepended ID3 tags. This will work for MIME type detection, but
 
- # won't work for detecting other properties of the file (they all need
 
- # to be made relative to the search). In any case, if the file has ID3
 
- # tags, the ID3 information will be printed, not the Ogg information,
 
- # so until that's fixed, this doesn't matter.
 
- #
 
- # --- Ogg Framing ---
 
- 0		search/1000	OggS		Ogg data
 
- !:mime		application/ogg
 
- >4		byte		!0		UNKNOWN REVISION %u
 
- ##>4		byte		0		revision 0
 
- >4		byte		0
 
- ##>>14		lelong		x		(Serial %lX)
 
- # non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
 
- >>28		string		\x7fFLAC	\b, FLAC audio
 
- # non-Vorbis content: Theora
 
- >>28		string		\x80theora	\b, Theora video
 
- # non-Vorbis content: Kate
 
- >>28		string		\x80kate\0\0\0\0	\b, Kate
 
- >>>37		ubyte		x		v%u
 
- >>>38		ubyte		x		\b.%u,
 
- >>>40		byte		0		utf8 encoding,
 
- >>>40		byte		!0		unknown character encoding,
 
- >>>60		string		>\0		language %s,
 
- >>>60		string		\0		no language set,
 
- >>>76		string		>\0		category %s
 
- >>>76		string		\0		no category set
 
- # non-Vorbis content: Skeleton
 
- >>28		string		fishead\0	\b, Skeleton
 
- >>>36		short		x		v%u
 
- >>>40		short		x		\b.%u
 
- # non-Vorbis content: Speex
 
- >>28		string		Speex\ \ \ 	\b, Speex audio
 
- # non-Vorbis content: OGM
 
- >>28		string		\x01video\0\0\0	\b, OGM video
 
- >>>37		string/c	div3		(DivX 3)
 
- >>>37		string/c	divx		(DivX 4)
 
- >>>37		string/c	dx50		(DivX 5)
 
- >>>37		string/c	xvid		(XviD)
 
- # --- First vorbis packet - general header ---
 
- >>28		string		\x01vorbis	\b, Vorbis audio,
 
- >>>35		lelong		!0		UNKNOWN VERSION %lu,
 
- ##>>>35		lelong		0		version 0,
 
- >>>35		lelong		0
 
- >>>>39		ubyte		1		mono,
 
- >>>>39		ubyte		2		stereo,
 
- >>>>39		ubyte		>2		%u channels,
 
- >>>>40		lelong		x		%lu Hz
 
- # Minimal, nominal and maximal bitrates specified when encoding
 
- >>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	\b,
 
- # The above tests if at least one of these is specified:
 
- >>>>>52		lelong		!-1
 
- # Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
 
- # instead of -1.
 
- # Vorbis 1.0 uses 0 instead of -1.
 
- >>>>>>52	lelong		!0
 
- >>>>>>>52	lelong		!-1000
 
- >>>>>>>>52	lelong		x		<%lu
 
- >>>>>48		lelong		!-1
 
- >>>>>>48	lelong		x		~%lu
 
- >>>>>44		lelong		!-1
 
- >>>>>>44	lelong		!-1000
 
- >>>>>>>44	lelong		!0
 
- >>>>>>>>44	lelong		x		>%lu
 
- >>>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	bps
 
- # -- Second vorbis header packet - the comments
 
- # A kludge to read the vendor string.  It's a counted string, not a
 
- # zero-terminated one, so file(1) can't read it in a generic way.
 
- # libVorbis is the only one existing currently, so I detect specifically
 
- # it.  The interesting value is the cvs date (8 digits decimal).
 
- # Post-RC1 Ogg files have the second header packet (and thus the version)
 
- # in a different place, so we must use an indirect offset.
 
- >>>(84.b+85)		string		\x03vorbis
 
- >>>>(84.b+96)		string/c	Xiphophorus\ libVorbis\ I	\b, created by: Xiphophorus libVorbis I
 
- >>>>>(84.b+120)		string		>00000000	
 
- # Map to beta version numbers:
 
- >>>>>>(84.b+120)	string		<20000508	(<beta1, prepublic)
 
- >>>>>>(84.b+120)	string		20000508	(1.0 beta 1 or beta 2)
 
- >>>>>>(84.b+120)	string		>20000508
 
- >>>>>>>(84.b+120)	string		<20001031	(beta2-3)
 
- >>>>>>(84.b+120)	string		20001031	(1.0 beta 3)
 
- >>>>>>(84.b+120)	string		>20001031
 
- >>>>>>>(84.b+120)	string		<20010225	(beta3-4)
 
- >>>>>>(84.b+120)	string		20010225	(1.0 beta 4)
 
- >>>>>>(84.b+120)	string		>20010225
 
- >>>>>>>(84.b+120)	string		<20010615	(beta4-RC1)
 
- >>>>>>(84.b+120)	string		20010615	(1.0 RC1)
 
- >>>>>>(84.b+120)	string		20010813	(1.0 RC2)
 
- >>>>>>(84.b+120)	string		20010816	(RC2 - Garf tuned v1)
 
- >>>>>>(84.b+120)	string		20011014	(RC2 - Garf tuned v2)
 
- >>>>>>(84.b+120)	string		20011217	(1.0 RC3)
 
- >>>>>>(84.b+120)	string		20011231	(1.0 RC3)
 
- # Some pre-1.0 CVS snapshots still had "Xiphphorus"...
 
- >>>>>>(84.b+120)	string		>20011231	(pre-1.0 CVS)
 
- # For the 1.0 release, Xiphophorus is replaced by Xiph.Org
 
- >>>>(84.b+96)		string/c	Xiph.Org\ libVorbis\ I	\b, created by: Xiph.Org libVorbis I
 
- >>>>>(84.b+117)		string		>00000000	
 
- >>>>>>(84.b+117)	string		<20020717	(pre-1.0 CVS)
 
- >>>>>>(84.b+117)	string		20020717	(1.0)
 
- >>>>>>(84.b+117)	string		20030909	(1.0.1)
 
- >>>>>>(84.b+117)	string		20040629	(1.1.0 RC1)
 
 
  |