annotate DOCS/tech/codecs.conf.txt @ 25661:293aeec83153

Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with an almost-trivial implementation. This allows making the builtin codec structs const, and it also makes clearer that this "selected" status is not used outside the init functions.
author reimar
date Sat, 12 Jan 2008 14:05:46 +0000
parents 5ee9424d58f3
children 133ff1f43050
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
1 Understanding MPlayer's etc/codecs.conf File
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
2
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
3 Introduction
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
4 ------------
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
5 MPlayer features a very flexible codec architecture which allows it to
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
6 use its own open source codecs, as well as open source libraries, Win32
22504
5ee9424d58f3 minor clarification
diego
parents: 14173
diff changeset
7 codec DLLs and other binary codec modules. To the MPlayer user, the
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
8 most visible piece of this architecture is the etc/codecs.conf file. This
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
9 is a text-based configuration file that controls which MPlayer components
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
10 are in charge of handling particular compressed data formats.
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
11
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
12 The codecs.conf file is stored either in a shared directory for all system
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
13 users to access, or in the .mplayer directory in a user's home
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
14 directory. When MPlayer starts, it first looks for a codecs.conf file in a
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
15 user's home directory. Failing that, it searches for the shared file. If
14173
e2a4a2ce54a8 some clarification
diego
parents: 13998
diff changeset
16 no codecs.conf file is found MPlayer falls back on its internal hardcoded
e2a4a2ce54a8 some clarification
diego
parents: 13998
diff changeset
17 configuration. If the file is present but has syntax errors, MPlayer will
e2a4a2ce54a8 some clarification
diego
parents: 13998
diff changeset
18 report the error.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
19
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
20 The codecs.conf file is really quite simple. It is simply a collection of
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
21 codec definition blocks that define how different media types should be
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
22 handled. There are a number of keywords that can occur in a block. Not all
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
23 of them are required and no particular order is enforced.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
24
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
25 Editing codecs.conf
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
26 -------------------
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
27 You can edit codecs.conf using your favorite text editor. Anything that
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
28 comes after a semicolon (;) on a line is regarded as a comment. For
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
29 example:
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
30 ; this is a comment
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
31 format 0x34616d69 ; "ima4" (MOV files)
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
32
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
33 The codec blocks can be in any order; the file parser doesn't
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
34 care. However, they are organized in a particular order for the benefit of
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
35 human readers. For example, all of the open source decoders that MPlayer
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
36 implements natively are grouped in one section.
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
37
6200
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
38 Release Number
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
39 --------------
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
40 Your codecs.conf now requires a release number to avoid codec release
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
41 incompatibilities. The format is simple: (YYYYMMDD)
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
42
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
43 release 20020520
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
44
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
45 Whenever changes are made to the codecs that *require* an updated
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
46 codecs.conf, then MPlayer will no longer accept outdated versions.
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
47 It is not recommended to change this line unless you know exactly
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
48 what you are doing.
e604be87613d codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents: 5586
diff changeset
49
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
50 Video Codecs
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
51 ------------
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
52 Let's jump right in with an example. Here is an example video codec block:
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
53
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
54 videocodec indeo5ds
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
55 info "Intel Indeo 5"
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
56 status working
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
57 fourcc IV50,iv50
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
58 driver dshow
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
59 dll "ir50_32.dll"
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
60 guid 0x30355649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
61 out YV12
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
62 out YUY2
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
63 out BGR32,BGR24,BGR16,BGR15
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
64
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
65 This is a particularly full-featured video codec. The "videocodec" keyword
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
66 identifies the fact that this is the start of a new video
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
67 codec. "indeo5ds" is MPlayer's unique name for the codec. You have to use
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
68 this name with the -vc/-ac option.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
69
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
70 The next line has the keyword "info" which specifies a human-readable
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
71 comment accompanying this codec. This is printed by -vc help / -ac help.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
72
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
73 The "status" keyword carries information about the codec's functional
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
74 status. MPlayer currently recognizes 4 status levels: working, buggy,
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
75 crashing, and untested. When it gets to codec auto-selection, it tries
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
76 untested first (to force users to test it for us and report results :)),
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
77 then working and finally buggy ones. Codecs marked crashing won't be tried,
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
78 unless explicitly (-vc/-ac) selected.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
79
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
80 The next line lists 4-character codes (FOURCCs) that are associated with
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
81 this codec. There can be more than one FOURCC specified on a fourcc line
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
82 as long as they are separated with a comma. There can also be multiple
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
83 fourcc lines in the codec. A second fourcc can also be given, separated
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
84 with a space. MPlayer will replace the original fourcc in the headers with
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
85 this one before opening the codec. It's useful for win32 codecs checking for
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
86 the fourccs.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
87
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
88 The "driver" keyword associates this codec with an internal MPlayer
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
89 decoder module. MPlayer has a module named "dshow" that handles data
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
90 encoded by the codec. See -vfm help / -afm help for the available module list.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
91
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
92 The "dll" keyword specifies which Win32/XAnim/Real binary module needs to be
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
93 loaded in order to handle the specific media type. This keyword is usually
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
94 only used in conjunction with the dshow, vfw, acm, xanim and real drivers since
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
95 they all manage communication with binary-only modules.
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
96
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
97 The "guid" keyword identifies a 16-byte Microsoft GUID that some media
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
98 files use to identify codecs. Used only for win32 dshow and DMO codecs.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
99
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
100 The "out" keyword identifies which output format the decoder is known
14173
e2a4a2ce54a8 some clarification
diego
parents: 13998
diff changeset
101 to provide. Just like the fourcc line, there can be multiple out lines or
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
102 multiple comma-separated output formats on the same line. The output
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
103 formats should be listed in order of preference.
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
104
7350
e8c9bfb533ad updated a bit
arpi
parents: 6200
diff changeset
105 The outfmt values can be followed by one or more flags, like flip, noflip,
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
106 static, query. The flags are defined as follows:
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
107
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
108 "flip":
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
109 If this flag is set for a given format, then o_bih->biHeight will NOT be
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
110 set to -bih->biHeight, i.e. the image will be decoded upside-down.
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
111 Used only by vfw and vfwex codecs.
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
112
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
113 "noflip":
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
114 This flag is ignored (no effect) without "flip" being set!
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
115 If this flag is set, it means the codec doesn't decode upside-down,
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
116 although it's told to do so.
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
117
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
118 "yuvhack":
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
119 This flag is required for the old win32 ms-mpeg4 vfw codecs, including
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
120 MP42 and DIV3 (DivX 3.11). These DLLs actually support YUV formats,
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
121 but the query/begin functions are buggy and don't accept YUV fourccs
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
122 (the decode function accepts it and works well!)
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
123 If this flag is set, then o_bih->biCompression will be set to 0 for
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
124 the initialization for the YUV modes. Used only by vfw/vfwex codecs.
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
125
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
126 "query":
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
127 This flag is used to control VDCTRL_QUERY_FORMAT for vfw/vfewx codecs.
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
128 If this flag is set, the control() will query the codec for the csp
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
129 support, otherwise it will assume a constant csp table. Required for
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
130 some DLLs (like huffyuv, CRAM).
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
131
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
132 "static",
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
133 This flag forces STATIC (instead of TEMP) buffer allocation for the codec.
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
134 Used for some very old DLLs like Indeo 3 and for some XAnim codecs like
7398
03471b3767e8 outflags described
arpi
parents: 7350
diff changeset
135 cinepak. See dr-methods.txt for details on buffer types.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
136
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
137 Audio Codecs
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
138 ------------
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
139 Here is an example of a rather full-featured audio codec block:
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
140
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
141 audiocodec mp3
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
142 info "MPEG layer-2, layer-3"
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
143 status working
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
144 comment "Optimized to MMX/SSE/3Dnow!"
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
145 format 0x50
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
146 format 0x55
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
147 format 0x33706d2e ; ".mp3" CBR/VBR MP3 (MOV files)
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
148 format 0x5500736d ; "ms\0\x55" older mp3 fcc (MOV files)
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
149 driver mp3lib
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
150 dll "mp3lib (mpglib)"
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
151 flags seekable
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
152
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
153 Many of the keywords are the same as a video codec block. However, we see
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
154 a few that we haven't seen before. The "comment" keyword identifies
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
155 another human-readable note for this codec.
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
156
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
157 The "format" keyword performs a similar job as the fourcc line. However,
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
158 since certain media file formats (notably AVI) identify audio formats with
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
159 16-bit numbers rather than 32-bit FOURCCs, it's necessary to use this
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
160 convention to accommodate them. However, as shown in this example, FOURCCs
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
161 can also be specified with the format keyword as long as they're converted
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
162 to their hex representation. It's important to note that this can be
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
163 useful for video codecs as well if a FOURCC contains a space (such as
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
164 Apple's "rle " codec).
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
165
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
166 The "flags" keywords identifies any additional abilities of this
13998
14c476d62fc2 Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents: 7398
diff changeset
167 codec. Currently, seekable is the only supported flag.
3860
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
168
96e5f795366d initial commit for codecs.conf.txt documentation
melanson
parents:
diff changeset
169 EOF