Mercurial > mplayer.hg
annotate DOCS/tech/codecs.conf.txt @ 35193:e5f3eeacf75f
Fix off-by-one error in check.
author | reimar |
---|---|
date | Tue, 30 Oct 2012 16:42:25 +0000 |
parents | 0cf4c6f3d56b |
children |
rev | line source |
---|---|
3860 | 1 Understanding MPlayer's etc/codecs.conf File |
2 | |
3 Introduction | |
4 ------------ | |
5 MPlayer features a very flexible codec architecture which allows it to | |
6 use its own open source codecs, as well as open source libraries, Win32 | |
22504 | 7 codec DLLs and other binary codec modules. To the MPlayer user, the |
3860 | 8 most visible piece of this architecture is the etc/codecs.conf file. This |
9 is a text-based configuration file that controls which MPlayer components | |
10 are in charge of handling particular compressed data formats. | |
11 | |
12 The codecs.conf file is stored either in a shared directory for all system | |
13 users to access, or in the .mplayer directory in a user's home | |
14 directory. When MPlayer starts, it first looks for a codecs.conf file in a | |
15 user's home directory. Failing that, it searches for the shared file. If | |
14173 | 16 no codecs.conf file is found MPlayer falls back on its internal hardcoded |
17 configuration. If the file is present but has syntax errors, MPlayer will | |
18 report the error. | |
3860 | 19 |
20 The codecs.conf file is really quite simple. It is simply a collection of | |
21 codec definition blocks that define how different media types should be | |
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 | 24 |
25 Editing codecs.conf | |
26 ------------------- | |
27 You can edit codecs.conf using your favorite text editor. Anything that | |
28 comes after a semicolon (;) on a line is regarded as a comment. For | |
29 example: | |
30 ; this is a comment | |
31 format 0x34616d69 ; "ima4" (MOV files) | |
32 | |
33 The codec blocks can be in any order; the file parser doesn't | |
34 care. However, they are organized in a particular order for the benefit of | |
35 human readers. For example, all of the open source decoders that MPlayer | |
36 implements natively are grouped in one section. | |
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 | 50 Video Codecs |
51 ------------ | |
52 Let's jump right in with an example. Here is an example video codec block: | |
53 | |
54 videocodec indeo5ds | |
55 info "Intel Indeo 5" | |
56 status working | |
57 fourcc IV50,iv50 | |
58 driver dshow | |
59 dll "ir50_32.dll" | |
60 guid 0x30355649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 | |
61 out YV12 | |
62 out YUY2 | |
63 out BGR32,BGR24,BGR16,BGR15 | |
64 | |
65 This is a particularly full-featured video codec. The "videocodec" keyword | |
66 identifies the fact that this is the start of a new video | |
7350 | 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 | 69 |
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 | 72 |
73 The "status" keyword carries information about the codec's functional | |
74 status. MPlayer currently recognizes 4 status levels: working, buggy, | |
7350 | 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 | 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 | 79 |
80 The next line lists 4-character codes (FOURCCs) that are associated with | |
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 | 84 with a space. MPlayer will replace the original fourcc in the headers with |
85 this one before opening the codec. It's useful for win32 codecs checking for | |
86 the fourccs. | |
3860 | 87 |
88 The "driver" keyword associates this codec with an internal MPlayer | |
89 decoder module. MPlayer has a module named "dshow" that handles data | |
7350 | 90 encoded by the codec. See -vfm help / -afm help for the available module list. |
3860 | 91 |
26736 | 92 The "dll" keyword specifies which Win32/XAnim/Real/Quicktime binary |
26741 | 93 module needs to be loaded. It's also used to specify which FFmpeg codec |
26736 | 94 to load. The list of FFmpeg codecs can be found in libavcodec/allcodecs.c. |
3860 | 95 |
96 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
|
97 files use to identify codecs. Used only for win32 dshow and DMO codecs. |
3860 | 98 |
13998
14c476d62fc2
Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents:
7398
diff
changeset
|
99 The "out" keyword identifies which output format the decoder is known |
14173 | 100 to provide. Just like the fourcc line, there can be multiple out lines or |
3860 | 101 multiple comma-separated output formats on the same line. The output |
102 formats should be listed in order of preference. | |
7398 | 103 |
7350 | 104 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
|
105 static, query. The flags are defined as follows: |
7398 | 106 |
107 "flip": | |
108 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
|
109 set to -bih->biHeight, i.e. the image will be decoded upside-down. |
7398 | 110 Used only by vfw and vfwex codecs. |
111 | |
112 "noflip": | |
113 This flag is ignored (no effect) without "flip" being set! | |
114 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
|
115 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
|
116 |
7398 | 117 "yuvhack": |
118 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
|
119 MP42 and DIV3 (DivX 3.11). These DLLs actually support YUV formats, |
7398 | 120 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
|
121 (the decode function accepts it and works well!) |
7398 | 122 If this flag is set, then o_bih->biCompression will be set to 0 for |
123 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
|
124 |
7398 | 125 "query": |
126 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
|
127 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
|
128 support, otherwise it will assume a constant csp table. Required for |
7398 | 129 some DLLs (like huffyuv, CRAM). |
130 | |
131 "static", | |
132 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
|
133 Used for some very old DLLs like Indeo 3 and for some XAnim codecs like |
7398 | 134 cinepak. See dr-methods.txt for details on buffer types. |
3860 | 135 |
29417 | 136 The "in" keyword -- UNDOCUMENTED |
137 | |
3860 | 138 Audio Codecs |
139 ------------ | |
13998
14c476d62fc2
Some fixes by myself and compn <tempn at twmi dot rr dot com>
diego
parents:
7398
diff
changeset
|
140 Here is an example of a rather full-featured audio codec block: |
3860 | 141 |
142 audiocodec mp3 | |
143 info "MPEG layer-2, layer-3" | |
144 status working | |
145 comment "Optimized to MMX/SSE/3Dnow!" | |
146 format 0x50 | |
147 format 0x55 | |
148 format 0x33706d2e ; ".mp3" CBR/VBR MP3 (MOV files) | |
149 format 0x5500736d ; "ms\0\x55" older mp3 fcc (MOV files) | |
150 driver mp3lib | |
151 dll "mp3lib (mpglib)" | |
152 flags seekable | |
153 | |
154 Many of the keywords are the same as a video codec block. However, we see | |
155 a few that we haven't seen before. The "comment" keyword identifies | |
156 another human-readable note for this codec. | |
157 | |
158 The "format" keyword performs a similar job as the fourcc line. However, | |
159 since certain media file formats (notably AVI) identify audio formats with | |
160 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
|
161 convention to accommodate them. However, as shown in this example, FOURCCs |
3860 | 162 can also be specified with the format keyword as long as they're converted |
163 to their hex representation. It's important to note that this can be | |
164 useful for video codecs as well if a FOURCC contains a space (such as | |
165 Apple's "rle " codec). | |
166 | |
167 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
|
168 codec. Currently, seekable is the only supported flag. |
3860 | 169 |
32517
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
170 |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
171 Adding FFmpeg Codecs |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
172 ------------------- |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
173 example codec: |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
174 |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
175 videocodec ffmdec |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
176 info "FFmpeg Sony PlayStation MDEC (Motion DECoder)" |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
177 status working |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
178 fourcc MDEC ; internal MPlayer FourCC |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
179 driver ffmpeg |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
180 dll mdec |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
181 out YV12 |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
182 |
32528 | 183 The "videocodec" name should start with ff to differentiate it from other |
32517
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
184 libraries or binary codecs. |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
185 |
32528 | 186 The "dll" name comes from the codec source file or the libavcodec/allcodecs.c |
32517
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
187 file. |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
188 |
32528 | 189 The "out" colorspace can be found in the codec source file in the PIX_FMT |
32517
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
190 struct. Note that some codecs may have several pix_fmt structs. |
32528 | 191 The pix_fmt can be converted to the codecs.conf "out" format by reading |
32682
0cf4c6f3d56b
add some notes about BE/LE colorspaces and fix a small typo
compn
parents:
32528
diff
changeset
|
192 the fmt-conversion.c file. |
0cf4c6f3d56b
add some notes about BE/LE colorspaces and fix a small typo
compn
parents:
32528
diff
changeset
|
193 |
0cf4c6f3d56b
add some notes about BE/LE colorspaces and fix a small typo
compn
parents:
32528
diff
changeset
|
194 If there are BE and LE versions of a pix_fmt, ignore them and use the short |
0cf4c6f3d56b
add some notes about BE/LE colorspaces and fix a small typo
compn
parents:
32528
diff
changeset
|
195 native format instead. e.g. 422P16_LE becomes out 422P16. also to note that |
0cf4c6f3d56b
add some notes about BE/LE colorspaces and fix a small typo
compn
parents:
32528
diff
changeset
|
196 underscores cause parse errors, so 422P16_LE becomes out 422P16LE. |
32517
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
197 |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
198 libmpdemux/mp_taglists.c |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
199 -------------- |
32528 | 200 Sometimes the lavf demuxer will not pass on a fourcc (mostly video game |
201 formats or other containers that do not support isom/riff tags). You will have | |
202 to make one based on the codec_id listed in the codec source file. | |
203 | |
204 Note that it is a good idea to mark any fourcc you create as | |
205 ' ; internal MPlayer FourCC'. In case another codec uses that fourcc, | |
206 you can easily change the internal one. Also this will stop other projects | |
207 from thinking of the internal tag as a real fourcc found in the wild. | |
32517
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
208 |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
209 libmpdemux/demuxer.c |
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
210 -------------- |
32528 | 211 Some audio codecs require a parser, you can see which ones do |
212 by reading the parsers section in libavcodec/allcodecs.c. | |
32517
a3ca3a1ae291
document how to add ffmpeg codecs in codecs.conf.txt
compn
parents:
29417
diff
changeset
|
213 |
3860 | 214 EOF |