annotate DOCS/tech/codec-devel.txt @ 4467:9512d6832b38

YUY2, BGR24, BGR32 input support (no mmx yet)
author michael
date Fri, 01 Feb 2002 19:25:09 +0000
parents 74622f23bce5
children 02b275e198c3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3862
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
1 A Guide To Developing MPlayer Codecs
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
2 by Mike Melanson (melanson at pcisys dot net)
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
3
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
4 Introduction
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
5 ------------
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
6 I've developed a number of open source decoders for the MPlayer project,
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
7 for both audio and video data. As such, I feel I'm qualified to document a
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
8 few notes about developing new codecs for the codebase.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
9
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
10 As always, the best way to learn how to incorporate a new codec is to
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
11 study a bunch of existing code. This document is supplementary material to
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
12 the code, meant to give some tips, pointers, and a general roadmap.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
13
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
14 A note about terminology: "Codec" stands for coder/decoder (or
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
15 compressor/decompressor, if you prefer). The term refers to a module that
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
16 can both encode and decode data. However, this document focuses primarily
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
17 on incorporating decoders. Still, the terms "decoder" and "codec" are
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
18 often used interchangeably.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
19
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
20 Necessary Materials
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
21 -------------------
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
22 So you've decided that you want to implement a new decoder for
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
23 MPlayer. There are a few things you will need:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
24
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
25 - Knowledge of the codec to be implemented: You will need to know the data
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
26 format of the chunks that MPlayer will pass to you. You will need to know
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
27 how to take apart the data structures inside. You will need to know the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
28 algorithmic operations that need to be performed on the data in order to
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
29 reconstruct the original media.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
30
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
31 - Sample media: Preferably, lots of it. You will need media encoded in
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
32 your data format and stored in a media file format that MPlayer knows how
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
33 to parse (these include AVI, ASF, MOV, RM, VIVO, among others). If the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
34 encoded data is stored in a media file format that MPlayer doesn't
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
35 understand, then you will either need to somehow convert the format to a
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
36 media file format that the program does understand, or write your own
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
37 MPlayer file demuxer that can handle the data. Writing a file demuxer
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
38 is beyond the scope of this document.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
39 Try to obtain media that stresses all possible modes of a
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
40 decoder. If an audio codec is known to work with both mono and stereo
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
41 data, search for sample media of both types. If a video codec is known to
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
42 work at 7 different bit depths, then, as painful as it may be, do what you
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
43 can to obtain sample media encoded for each of the 7 bit depths.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
44
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
45 - Latest CVS snapshot: It's always useful to develop code for the very
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
46 latest development version of MPlayer. Be sure to update your local CVS
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
47 copy often.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
48
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
49 - General programming knowledge, working Linux development environment: I
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
50 would hope that these items would go without saying, but you never know.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
51
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
52 Typical Development Cycle
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
53 -------------------------
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
54 1) Set up basic infrastructure
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
55 First things first, there's a big song and dance to go through in order to
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
56 let the MPlayer program know that you have a new codec to incorporate.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
57
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
58 MPlayer does not feature what some would term a "clean" codec plugin
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
59 architecture. Some log this as a complaint. Personally, I think it's
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
60 necessary to allow MPlayer the type of flexibility to incorporate so many
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
61 open- and closed-source codecs.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
62
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
63 First, modify your local copy of codecs.conf. It may be system-shared or
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
64 in your home directory. Add a new entry for your codec. If it's an open
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
65 source codec, it would be a good idea to place the new entry with the rest
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
66 of the open source codecs. When you're confident that you have the entry
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
67 right, be sure to add it to etc/codecs.conf in your workspace. See the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
68 file codecs.conf.txt for a detailed description of the format of this
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
69 file. Create a new audiocodec or videocodec block with the proper info,
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
70 FOURCCs/format numbers, output formats, and a unique driver name. Remember
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
71 the driver name.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
72
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
73 Next, edit the file codec-cfg.h. You will find a list of #define's that
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
74 map names like AFM_MSADPCM and VFM_MSVIDC to numbers. The definitions that
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
75 begin with AFM_ are audio drivers. The definitions that begin with VFM_
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
76 are video drivers. If you want to implement a new audio driver, go to the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
77 end of the AFM_ list and create a new AFM_ definition for your decoder
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
78 using the next available number in the list. If you want to make a new
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
79 video decoder, do the same thing to the VFM_ list.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
80
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
81 Next, edit the file codec-cfg.c. You will find an array of audio driver
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
82 names and video driver names. If you are implementing a new audio codec,
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
83 add your new driver name (the one you entered into the codecs.conf
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
84 file) between the last non-NULL entry and the NULL at the end of the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
85 audio driver array. If you are implementing a new video codec, do the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
86 same in the video driver array.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
87
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
88 Next, create a new source file which contains the main decoding function
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
89 that MPlayer will call to decode data. Eventually, you may have multiple
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
90 files which comprise your decoder, but let's start simple here. Create the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
91 skeleton function for your decoder. Since you will also have to write the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
92 code to invoke the function, you can make the decoding function look
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
93 however you want, with whatever parameters you feel will be
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
94 necessary. Here's an example video decoder:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
95
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
96 void some_video_decoder(
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
97 char *encoded, // buffer of encoded data
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
98 int encoded_size, // length of encoded buffer
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
99 char *decoded, // buffer where decoded data is written
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
100 int width, // width of decoded frame in pixels
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
101 int height, // height of decoded frame in pixels
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
102 int bytes_per_pixel) // bytes/pixel in output image
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
103
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
104 Here's an example audio decoder:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
105
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
106 int some_audio_decoder(
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
107 unsigned short *output, // buffer where decoded 16-bit PCM samples go
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
108 unsigned char *input, // encoded data
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
109 int channels) // mono = 1, stereo = 2
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
110
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
111 Next, modify the Makefile so that it will compile your new source
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
112 file.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
113
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
114 Next, modify either dec_audio.c or dec_video.c, depending on whether
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
115 you're writing an audio or video decoder. You'll probably put the new
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
116 decoder function header at the top of the file unless you've created a
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
117 header file to handle it, in which case, you'll include the new header
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
118 file. The dec_*.c functions are in charge of initializing codecs and then
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
119 passing encoded data to the proper decoder function. The init and decode
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
120 functions are big switch statements that key off of the codec definition
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
121 numbers from codec-cfg.h. Your best bet in here is to examine some simple
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
122 other simple decoders and clone relevant portions of the case blocks.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
123
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
124 Next, compile the project and see if you have everything correct so far.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
125
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
126 Next, you want to make sure that the encoded data is making it to your
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
127 decoding function in the first place. This may sound like a trivial
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
128 exercise, but there are a lot of things that can go wrong (and I've
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
129 watched most of them go wrong in my experience). At the beginning of your
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
130 skeleton decoder function, enter the following code:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
131 int i;
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
132 for (i = 0; i < 16; i++)
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
133 printf ("%02X ", input[i]);
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
134 printf ("\n");
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
135 When you compile and run MPlayer, your decoder function will print the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
136 first 16 bytes of each data chunk that it receives. Open the sample media
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
137 in a hex editor and reconcile what you see on the screen with what
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
138 you find in the file. If the decoder is printing the first 16 bytes of
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
139 each block, that's a good sign that you're ready to move on to step
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
140 2. Otherwise, you need to figure out why the data isn't getting to your
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
141 decoder. Is your decoder even being invoked? If not, why not?
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
142
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
143 2) Develop the decoder
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
144 Go for it. Remember to make it work, first, then make it work fast.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
145
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
146 3) Debug and test the decoder
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
147 If you're extremely lucky, the decoder will work the first time. If you're
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
148 very lucky, it will work after you've reviewed your code a few times and
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
149 corrected a few obvious programming mistakes. Realistically, you will
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
150 write the decoder, review it many times and fix many obvious and subtle
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
151 programming errors, and still have to go through an elaborate debug
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
152 process in order to get the decoder to a minimally functional state.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
153
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
154 Big hint: Ask for all warnings. You know, the -Wall option in
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
155 gcc? It's very useful to develop your codec while running in debug
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
156 mode. In order to compile MPlayer with debug support (which includes -Wall
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
157 for all gcc operations), use the --enable-debug option when configuring
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
158 the project. Pay attention to all warnings and make it a goal to get
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
159 rid of every single one. I'll never forget when the compiler warned me
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
160 that there was no point in clamping a signed 16-bit variable within a
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
161 signed 16-bit range (the calculation to be clamped was supposed to be
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
162 stored in a signed 32-bit variable and then stored in the signed 16-bit
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
163 variable). I sat stunned for a moment, feeling like I had just dodged a
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
164 bullet as I knew that would have taken me hours to debug that kind of
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
165 mistake.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
166
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
167 4) Contribute decoder to codebase
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
168 Create a patch with the "diff -u" format and email it to the MPlayer
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
169 development team for approval. You will likely need to diff the following
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
170 files:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
171 - Makefile
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
172 - etc/codecs.conf
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
173 - codec-cfg.c
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
174 - codec-cfg.h
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
175 - dec_audio.c -OR- dec_video.c
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
176 Of course, you will need to include your newly-created file(s). If you
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
177 contribute enough decoders, the development team may even grant you write
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
178 privileges to the CVS repository.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
179
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
180 5) Wait for bug reports to start rolling in
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
181 You may think you're finished when you release the codec and if you're
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
182 extremely lucky, you will be right. However, it's more likely that people
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
183 will start throwing all kinds of oddball media at your decoder that it
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
184 never counted on. Cheer up; take comfort in knowing that people are
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
185 testing your code and attempting to use it as a real world
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
186 application. Download the problem media that people upload to the MPlayer
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
187 FTP site and get back to work, implementing fixed code that addresses the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
188 issues. Contribute more patches and encourage people to hammer on your
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
189 decoder even more. This is how you make your decoder rock-solid.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
190
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
191 EOF