annotate DOCS/tech/codec-devel.txt @ 7349:c5fd28225fab

updated to libmpcodecs way
author arpi
date Mon, 09 Sep 2002 22:43:13 +0000
parents 02b275e198c3
children 56bb20a00bc9
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)
7349
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
3 updated to libmpcodecs arch by A'rpi
3862
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
4
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
5 Introduction
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
6 ------------
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
7 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
8 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
9 few notes about developing new codecs for the codebase.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
10
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
11 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
12 study a bunch of existing code. This document is supplementary material to
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
13 the code, meant to give some tips, pointers, and a general roadmap.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
14
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
15 A note about terminology: "Codec" stands for coder/decoder (or
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
16 compressor/decompressor, if you prefer). The term refers to a module that
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
17 can both encode and decode data. However, this document focuses primarily
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
18 on incorporating decoders. Still, the terms "decoder" and "codec" are
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
19 often used interchangeably.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
20
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
21 Necessary Materials
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
22 -------------------
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
23 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
24 MPlayer. There are a few things you will need:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
25
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
26 - 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
27 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
28 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
29 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
30 reconstruct the original media.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
31
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
32 - Sample media: Preferably, lots of it. You will need media encoded in
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
33 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
34 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
35 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
36 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
37 media file format that the program does understand, or write your own
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
38 MPlayer file demuxer that can handle the data. Writing a file demuxer
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
39 is beyond the scope of this document.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
40 Try to obtain media that stresses all possible modes of a
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
41 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
42 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
43 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
44 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
45
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
46 - 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
47 latest development version of MPlayer. Be sure to update your local CVS
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
48 copy often.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
49
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
50 - General programming knowledge, working Linux development environment: I
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
51 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
52
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
53 Typical Development Cycle
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
54 -------------------------
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
55 1) Set up basic infrastructure
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
56 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
57 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
58
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
59 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
60 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
61 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
62 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
63 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
64 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
65 file. Create a new audiocodec or videocodec block with the proper info,
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
66 FOURCCs/format numbers, output formats, and a unique driver name. Remember
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
67 the driver name.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
68
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
69 Next, create a new source file which contains the main decoding function
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
70 that MPlayer will call to decode data. Eventually, you may have multiple
7349
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
71 files which comprise your decoder, but let's start simple here.
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
72 For audio codecs, see ad_sample.c skeleton. For video, choose one of the
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
73 existing vd_*.c files which you think is close to your codec in behaviour.
3862
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
74
7349
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
75 Next, modify the Makefile so that it will compile your new source file.
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
76 Also, add your codec to the array in ad.c (for audio) or vd.c (for video).
3862
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
77
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
78 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
79
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
80 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
81 decoding function in the first place. This may sound like a trivial
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
82 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
83 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
84 skeleton decoder function, enter the following code:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
85 int i;
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
86 for (i = 0; i < 16; i++)
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
87 printf ("%02X ", input[i]);
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
88 printf ("\n");
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
89 When you compile and run MPlayer, your decoder function will print the
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
90 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
91 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
92 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
93 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
94 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
95 decoder. Is your decoder even being invoked? If not, why not?
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
96
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
97 2) Develop the decoder
4630
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
98 Go for it. Remember to make it work, first, then make it work fast. Some
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
99 specific tips:
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
100
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
101 What output formats should you support in your decoder? Whatever makes
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
102 sense. YUV output is always preferable over RGB output. Generally, if a
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
103 codec uses a YUV data as its source data, you will be able to decode a
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
104 frame of YUV data. If a codec takes RGB data as its input, as many older
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
105 video codecs do, then there's no point in supporting YUV output; just
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
106 output as many RGB formats as possible.
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
107
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
108 The most preferred output format for video data is YV12. This is because
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
109 MPlayer supports a multitude of hardware devices that can display, scale,
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
110 and filter this type of data directly. MPlayer also has a bunch of
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
111 optimized conversion functions that can convert YV12 data to any other
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
112 type of output data.
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
113
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
114 If you do take the RGB output route, you should be aware that MPlayer
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
115 actually orders packed RGB data as BGR. If you're decoding into a BGR24
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
116 buffer, the output will look like:
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
117 B G R B G R B G R B ...
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
118 If you're decoding into a BGR32 buffer, there will need to be an
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
119 additional (unused) byte after each BGR triplet:
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
120 B G R - B G R - B G ...
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
121
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
122 Make liberal use of sanity checks. Start by including the file mp_msg.h at
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
123 the start of your decoder. Then you can use the mp_msg() function as you
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
124 would a normal printf() statement. Whenever your decoder notices a strange
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
125 bit of data or an odd condition, print a message such as:
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
126 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "Odd data encountered: %d\n", data);
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
127 Obviously, you should make the message a little more
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
128 descriptive, for your benefit. MSGL_WARN is a good message level for this
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
129 type of information. Look in mp_msg.h for all of the error levels. You can
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
130 even make MPlayer bail out completely by using MSGL_FATAL, but that should
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
131 never be necessary at the data decoder level.
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
132
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
133 What conditions should trigger a warning? Anything, and I mean *anything*
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
134 out of the ordinary. Many chunks of compressed video data contain headers
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
135 with data such as width, height, and chunk size. Reconcile these fields
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
136 with the parameters passed into the decoding function (if you set it up to
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
137 take those parameters). Such data should match up. If it doesn't, issue a
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
138 warning and make an executive decision in the code about which data to
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
139 believe (personally, I always lend more weight to the data that was passed
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
140 into the decoder function, the data that comes from the container file's
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
141 header). If there's supposed to be a magic number embedded in, or computed
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
142 from, the chunk's header, issue a warning if it isn't correct.
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
143
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
144 Whenever you're about the index into a memory array with an index that
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
145 could theoretically be out of range, then test that the index is in range,
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
146 no matter how tedious it seems. Accessing outside of your memory range is,
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
147 after all, the number 1 cause of segmentation faults. Never trust that all
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
148 the data passed to you will be correct. If an array index suddenly winds
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
149 up out of range, it's probably best to issue a warning about it and bail
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
150 out of the decoder (but not the whole application).
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
151
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
152 Writing all of these warning statements may seem insipid, but consider
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
153 that if you don't do it when you start writing your decoder, you'll
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
154 probably end up doing it later on when your decoder isn't working properly
02b275e198c3 added more tips on codec development
melanson
parents: 3862
diff changeset
155 and you need to figure out why (believe me, I know).
3862
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
156
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
157 3) Debug and test the decoder
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
158 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
159 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
160 corrected a few obvious programming mistakes. Realistically, you will
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
161 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
162 programming errors, and still have to go through an elaborate debug
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
163 process in order to get the decoder to a minimally functional state.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
164
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
165 Big hint: Ask for all warnings. You know, the -Wall option in
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
166 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
167 mode. In order to compile MPlayer with debug support (which includes -Wall
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
168 for all gcc operations), use the --enable-debug option when configuring
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
169 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
170 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
171 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
172 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
173 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
174 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
175 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
176 mistake.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
177
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
178 4) Contribute decoder to codebase
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
179 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
180 development team for approval. You will likely need to diff the following
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
181 files:
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
182 - Makefile
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
183 - etc/codecs.conf
7349
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
184 - ad.c or vd.c
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
185 Of course, you will need to include your newly-created file(s):
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
186 vd_<name>.c -OR- ad_<name>.c. If you contribute enough decoders, the
c5fd28225fab updated to libmpcodecs way
arpi
parents: 4630
diff changeset
187 development team may even grant you write privileges to the CVS repository.
3862
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
188
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
189 5) Wait for bug reports to start rolling in
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
190 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
191 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
192 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
193 never counted on. Cheer up; take comfort in knowing that people are
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
194 testing your code and attempting to use it as a real world
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
195 application. Download the problem media that people upload to the MPlayer
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
196 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
197 issues. Contribute more patches and encourage people to hammer on your
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
198 decoder even more. This is how you make your decoder rock-solid.
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
199
74622f23bce5 initial commit of "Guide To Codec Hacking"
melanson
parents:
diff changeset
200 EOF