Statistics
| Branch: | Revision:

ffmpeg / doc / ffmpeg-doc.texi @ 2f954ef2

History | View | Annotate | Download (59.7 KB)

1 9181577c Fabrice Bellard
\input texinfo @c -*- texinfo -*-
2
3
@settitle FFmpeg Documentation
4
@titlepage
5
@sp 7
6
@center @titlefont{FFmpeg Documentation}
7
@sp 3
8
@end titlepage
9
10
11
@chapter Introduction
12
13
FFmpeg is a very fast video and audio converter. It can also grab from
14
a live audio/video source.
15 115329f1 Diego Biurrun
16 9181577c Fabrice Bellard
The command line interface is designed to be intuitive, in the sense
17 4c5f7207 Diego Biurrun
that FFmpeg tries to figure out all parameters that can possibly be
18
derived automatically. You usually only have to specify the target
19
bitrate you want.
20 9181577c Fabrice Bellard
21
FFmpeg can also convert from any sample rate to any other, and resize
22
video on the fly with a high quality polyphase filter.
23
24
@chapter Quick Start
25
26 e99c4e10 Fabrice Bellard
@c man begin EXAMPLES
27 9181577c Fabrice Bellard
@section Video and Audio grabbing
28
29 cc58300e Ramiro Polla
FFmpeg can grab video and audio from devices given that you specify the input
30
format and device.
31 e99c4e10 Fabrice Bellard
32 9181577c Fabrice Bellard
@example
33 cc58300e Ramiro Polla
ffmpeg -f audio_device -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
34 9181577c Fabrice Bellard
@end example
35
36 e99c4e10 Fabrice Bellard
Note that you must activate the right video source and channel before
37 4c5f7207 Diego Biurrun
launching FFmpeg with any TV viewer such as xawtv
38
(@url{http://bytesex.org/xawtv/}) by Gerd Knorr. You also
39
have to set the audio recording levels correctly with a
40 e99c4e10 Fabrice Bellard
standard mixer.
41 9181577c Fabrice Bellard
42 76d2efda Baptiste Coudurier
@section X11 grabbing
43
44 913e4081 Diego Biurrun
FFmpeg can grab the X11 display.
45 76d2efda Baptiste Coudurier
46
@example
47 9e0ab666 Benoit Fouet
ffmpeg -f x11grab -s cif -i :0.0 /tmp/out.mpg
48 76d2efda Baptiste Coudurier
@end example
49
50 913e4081 Diego Biurrun
0.0 is display.screen number of your X11 server, same as
51
the DISPLAY environment variable.
52 76d2efda Baptiste Coudurier
53 0cd4faf9 Panagiotis Issaris
@example
54 9e0ab666 Benoit Fouet
ffmpeg -f x11grab -s cif -i :0.0+10,20 /tmp/out.mpg
55 0cd4faf9 Panagiotis Issaris
@end example
56
57
0.0 is display.screen number of your X11 server, same as the DISPLAY environment
58
variable. 10 is the x-offset and 20 the y-offset for the grabbing.
59
60 6bf40f39 Philip Gladstone
@section Video and Audio file format conversion
61 9181577c Fabrice Bellard
62 4c5f7207 Diego Biurrun
* FFmpeg can use any supported file format and protocol as input:
63 9181577c Fabrice Bellard
64
Examples:
65
66 4c5f7207 Diego Biurrun
* You can use YUV files as input:
67 9181577c Fabrice Bellard
68
@example
69 115329f1 Diego Biurrun
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
70 9181577c Fabrice Bellard
@end example
71
72 115329f1 Diego Biurrun
It will use the files:
73 9181577c Fabrice Bellard
@example
74 e99c4e10 Fabrice Bellard
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
75
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
76 9181577c Fabrice Bellard
@end example
77
78 e99c4e10 Fabrice Bellard
The Y files use twice the resolution of the U and V files. They are
79
raw files, without header. They can be generated by all decent video
80
decoders. You must specify the size of the image with the @option{-s} option
81 4c5f7207 Diego Biurrun
if FFmpeg cannot guess it.
82 9181577c Fabrice Bellard
83 4c5f7207 Diego Biurrun
* You can input from a raw YUV420P file:
84 9181577c Fabrice Bellard
85
@example
86 e99c4e10 Fabrice Bellard
ffmpeg -i /tmp/test.yuv /tmp/out.avi
87 9181577c Fabrice Bellard
@end example
88
89 4c5f7207 Diego Biurrun
test.yuv is a file containing raw YUV planar data. Each frame is composed
90
of the Y plane followed by the U and V planes at half vertical and
91 e99c4e10 Fabrice Bellard
horizontal resolution.
92 9181577c Fabrice Bellard
93 4c5f7207 Diego Biurrun
* You can output to a raw YUV420P file:
94 9181577c Fabrice Bellard
95
@example
96 f926cbe7 Michel Bardiaux
ffmpeg -i mydivx.avi hugefile.yuv
97 9181577c Fabrice Bellard
@end example
98
99
* You can set several input files and output files:
100
101
@example
102 e99c4e10 Fabrice Bellard
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
103 9181577c Fabrice Bellard
@end example
104
105 4c5f7207 Diego Biurrun
Converts the audio file a.wav and the raw YUV video file a.yuv
106
to MPEG file a.mpg.
107 9181577c Fabrice Bellard
108 6bf40f39 Philip Gladstone
* You can also do audio and video conversions at the same time:
109 9181577c Fabrice Bellard
110
@example
111 e99c4e10 Fabrice Bellard
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
112 9181577c Fabrice Bellard
@end example
113
114 4c5f7207 Diego Biurrun
Converts a.wav to MPEG audio at 22050Hz sample rate.
115 9181577c Fabrice Bellard
116
* You can encode to several formats at the same time and define a
117 e99c4e10 Fabrice Bellard
mapping from input stream to output streams:
118 9181577c Fabrice Bellard
119
@example
120 5438308f Panagiotis Issaris
ffmpeg -i /tmp/a.wav -ab 64k /tmp/a.mp2 -ab 128k /tmp/b.mp2 -map 0:0 -map 0:0
121 9181577c Fabrice Bellard
@end example
122
123 4c5f7207 Diego Biurrun
Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map
124
file:index' specifies which input stream is used for each output
125 e99c4e10 Fabrice Bellard
stream, in the order of the definition of output streams.
126 9181577c Fabrice Bellard
127
* You can transcode decrypted VOBs
128
129
@example
130 5438308f Panagiotis Issaris
ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec mp3 -ab 128k snatch.avi
131 9181577c Fabrice Bellard
@end example
132
133 4c5f7207 Diego Biurrun
This is a typical DVD ripping example; the input is a VOB file, the
134
output an AVI file with MPEG-4 video and MP3 audio. Note that in this
135
command we use B-frames so the MPEG-4 stream is DivX5 compatible, and
136
GOP size is 300 which means one intra frame every 10 seconds for 29.97fps
137
input video. Furthermore, the audio stream is MP3-encoded so you need
138
to enable LAME support by passing @code{--enable-mp3lame} to configure.
139
The mapping is particularly useful for DVD transcoding
140 e99c4e10 Fabrice Bellard
to get the desired audio language.
141 9181577c Fabrice Bellard
142 4c5f7207 Diego Biurrun
NOTE: To see the supported input formats, use @code{ffmpeg -formats}.
143 e99c4e10 Fabrice Bellard
@c man end
144 9181577c Fabrice Bellard
145
@chapter Invocation
146
147
@section Syntax
148
149 e99c4e10 Fabrice Bellard
The generic syntax is:
150 9181577c Fabrice Bellard
151 115329f1 Diego Biurrun
@example
152 e99c4e10 Fabrice Bellard
@c man begin SYNOPSIS
153 28f88dc8 Michael Niedermayer
ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{outfile}@}...
154 e99c4e10 Fabrice Bellard
@c man end
155 9181577c Fabrice Bellard
@end example
156 e99c4e10 Fabrice Bellard
@c man begin DESCRIPTION
157
As a general rule, options are applied to the next specified
158 699e77b1 Víctor Paesa
file. Therefore, order is important, and you can have the same
159 8cc62264 Diego Biurrun
option on the command line multiple times. Each occurrence is
160 699e77b1 Víctor Paesa
then applied to the next input or output file.
161
162 eb10acec Diego Biurrun
* To set the video bitrate of the output file to 64kbit/s:
163 699e77b1 Víctor Paesa
@example
164
ffmpeg -i input.avi -b 64k output.avi
165
@end example
166
167
* To force the frame rate of the input and output file to 24 fps:
168
@example
169
ffmpeg -r 24 -i input.avi output.avi
170
@end example
171
172
* To force the frame rate of the output file to 24 fps:
173
@example
174
ffmpeg -i input.avi -r 24 output.avi
175
@end example
176
177
* To force the frame rate of input file to 1 fps and the output file to 24 fps:
178
@example
179
ffmpeg -r 1 -i input.avi -r 24 output.avi
180
@end example
181
182
The format option may be needed for raw input files.
183 9181577c Fabrice Bellard
184 4c5f7207 Diego Biurrun
By default, FFmpeg tries to convert as losslessly as possible: It
185
uses the same audio and video parameters for the outputs as the one
186 e99c4e10 Fabrice Bellard
specified for the inputs.
187
@c man end
188 9181577c Fabrice Bellard
189 e99c4e10 Fabrice Bellard
@c man begin OPTIONS
190 9181577c Fabrice Bellard
@section Main options
191
192 e99c4e10 Fabrice Bellard
@table @option
193 9181577c Fabrice Bellard
@item -L
194 4c5f7207 Diego Biurrun
Show license.
195 18bff752 Fabrice Bellard
196 9181577c Fabrice Bellard
@item -h
197 4c5f7207 Diego Biurrun
Show help.
198 18bff752 Fabrice Bellard
199 4386f941 Diego Biurrun
@item -version
200
Show version.
201
202 e99c4e10 Fabrice Bellard
@item -formats
203 4c5f7207 Diego Biurrun
Show available formats, codecs, protocols, ...
204 18bff752 Fabrice Bellard
205 115329f1 Diego Biurrun
@item -f fmt
206 4c5f7207 Diego Biurrun
Force format.
207 18bff752 Fabrice Bellard
208 115329f1 Diego Biurrun
@item -i filename
209 4c5f7207 Diego Biurrun
input filename
210 9181577c Fabrice Bellard
211 115329f1 Diego Biurrun
@item -y
212 4c5f7207 Diego Biurrun
Overwrite output files.
213 9181577c Fabrice Bellard
214 115329f1 Diego Biurrun
@item -t duration
215 4c5f7207 Diego Biurrun
Set the recording time in seconds.
216
@code{hh:mm:ss[.xxx]} syntax is also supported.
217 9181577c Fabrice Bellard
218 4386f941 Diego Biurrun
@item -fs limit_size
219
Set the file size limit.
220
221 e83a84ac Benjamin Larsson
@item -ss position
222 4c5f7207 Diego Biurrun
Seek to given time position in seconds.
223
@code{hh:mm:ss[.xxx]} syntax is also supported.
224 e83a84ac Benjamin Larsson
225 4386f941 Diego Biurrun
@item -itsoffset offset
226
Set the input time offset in seconds.
227
@code{[-]hh:mm:ss[.xxx]} syntax is also supported.
228
This option affects all the input files that follow it.
229
The offset is added to the timestamps of the input files.
230
Specifying a positive offset means that the corresponding
231
streams are delayed by 'offset' seconds.
232
233 115329f1 Diego Biurrun
@item -title string
234 4c5f7207 Diego Biurrun
Set the title.
235 9181577c Fabrice Bellard
236 4386f941 Diego Biurrun
@item -timestamp time
237
Set the timestamp.
238
239 115329f1 Diego Biurrun
@item -author string
240 4c5f7207 Diego Biurrun
Set the author.
241 9181577c Fabrice Bellard
242 115329f1 Diego Biurrun
@item -copyright string
243 4c5f7207 Diego Biurrun
Set the copyright.
244 9181577c Fabrice Bellard
245 115329f1 Diego Biurrun
@item -comment string
246 4c5f7207 Diego Biurrun
Set the comment.
247 9181577c Fabrice Bellard
248 4386f941 Diego Biurrun
@item -album string
249
Set the album.
250
251 ec1b10f4 Panagiotis Issaris
@item -track number
252
Set the track.
253
254
@item -year number
255
Set the year.
256
257 4386f941 Diego Biurrun
@item -v verbose
258
Control amount of logging.
259
260 99db6420 Fabrice Bellard
@item -target type
261 4386f941 Diego Biurrun
Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd",
262 4c5f7207 Diego Biurrun
"ntsc-svcd", ... ). All the format options (bitrate, codecs,
263
buffer sizes) are then set automatically. You can just type:
264 99db6420 Fabrice Bellard
265
@example
266
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
267
@end example
268
269 4c5f7207 Diego Biurrun
Nevertheless you can specify additional options as long as you know
270
they do not conflict with the standard, as in:
271 791d8d1d Michel Bardiaux
272
@example
273
ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
274
@end example
275
276 4386f941 Diego Biurrun
@item -dframes number
277
Set the number of data frames to record.
278
279
@item -scodec codec
280
Force subtitle codec ('copy' to copy stream).
281
282
@item -newsubtitle
283
Add a new subtitle stream to the current output stream.
284
285
@item -slang code
286
Set the ISO 639 language code (3 letters) of the current subtitle stream.
287 401fbdde Michael Niedermayer
288 9181577c Fabrice Bellard
@end table
289
290
@section Video Options
291
292 e99c4e10 Fabrice Bellard
@table @option
293 9181577c Fabrice Bellard
@item -b bitrate
294 3c0ba870 Panagiotis Issaris
Set the video bitrate in bit/s (default = 200 kb/s).
295 4386f941 Diego Biurrun
@item -vframes number
296
Set the number of video frames to record.
297 115329f1 Diego Biurrun
@item -r fps
298 4386f941 Diego Biurrun
Set frame rate (Hz value, fraction or abbreviation), (default = 25).
299 115329f1 Diego Biurrun
@item -s size
300 67053c30 Ivan Kalvachev
Set frame size. The format is @samp{wxh} (ffserver default = 160x128, ffmpeg default = same as source).
301 4c5f7207 Diego Biurrun
The following abbreviations are recognized:
302 5ee03c86 Fabrice Bellard
@table @samp
303 18bff752 Fabrice Bellard
@item sqcif
304
128x96
305
@item qcif
306
176x144
307
@item cif
308
352x288
309
@item 4cif
310
704x576
311 7d88b5ca Benoit Fouet
@item qqvga
312
160x120
313
@item qvga
314
320x240
315
@item vga
316
640x480
317
@item svga
318
800x600
319
@item xga
320
1024x768
321
@item uxga
322
1600x1200
323
@item qxga
324
2048x1536
325
@item sxga
326
1280x1024
327
@item qsxga
328
2560x2048
329
@item hsxga
330
5120x4096
331
@item wvga
332
852x480
333
@item wxga
334
1366x768
335
@item wsxga
336
1600x1024
337
@item wuxga
338
1920x1200
339
@item woxga
340
2560x1600
341
@item wqsxga
342
3200x2048
343
@item wquxga
344
3840x2400
345
@item whsxga
346
6400x4096
347
@item whuxga
348
7680x4800
349
@item cga
350
320x200
351
@item ega
352
640x350
353
@item hd480
354
852x480
355
@item hd720
356
1280x720
357
@item hd1080
358
1920x1080
359 18bff752 Fabrice Bellard
@end table
360
361
@item -aspect aspect
362 4c5f7207 Diego Biurrun
Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777).
363 18bff752 Fabrice Bellard
@item -croptop size
364 4c5f7207 Diego Biurrun
Set top crop band size (in pixels).
365 18bff752 Fabrice Bellard
@item -cropbottom size
366 4c5f7207 Diego Biurrun
Set bottom crop band size (in pixels).
367 18bff752 Fabrice Bellard
@item -cropleft size
368 4c5f7207 Diego Biurrun
Set left crop band size (in pixels).
369 18bff752 Fabrice Bellard
@item -cropright size
370 4c5f7207 Diego Biurrun
Set right crop band size (in pixels).
371 1ff93ffc Todd Kirby
@item -padtop size
372 4c5f7207 Diego Biurrun
Set top pad band size (in pixels).
373 1ff93ffc Todd Kirby
@item -padbottom size
374 4c5f7207 Diego Biurrun
Set bottom pad band size (in pixels).
375 1ff93ffc Todd Kirby
@item -padleft size
376 4c5f7207 Diego Biurrun
Set left pad band size (in pixels).
377 1ff93ffc Todd Kirby
@item -padright size
378 4c5f7207 Diego Biurrun
Set right pad band size (in pixels).
379 5b79a73e Todd Kirby
@item -padcolor (hex color)
380 4c5f7207 Diego Biurrun
Set color of padded bands. The value for padcolor is expressed
381
as a six digit hexadecimal number where the first two digits
382
represent red, the middle two digits green and last two digits
383
blue (default = 000000 (black)).
384 9181577c Fabrice Bellard
@item -vn
385 4c5f7207 Diego Biurrun
Disable video recording.
386 115329f1 Diego Biurrun
@item -bt tolerance
387 dc5ee8bc Panagiotis Issaris
Set video bitrate tolerance (in bit/s).
388 18bff752 Fabrice Bellard
@item -maxrate bitrate
389 a5515106 Panagiotis Issaris
Set max video bitrate tolerance (in bit/s).
390 18bff752 Fabrice Bellard
@item -minrate bitrate
391 a5515106 Panagiotis Issaris
Set min video bitrate tolerance (in bit/s).
392 18bff752 Fabrice Bellard
@item -bufsize size
393 81d0618f Panagiotis Issaris
Set rate control buffer size (in bits).
394 115329f1 Diego Biurrun
@item -vcodec codec
395 4c5f7207 Diego Biurrun
Force video codec to @var{codec}. Use the @code{copy} special value to
396 5ee03c86 Fabrice Bellard
tell that the raw codec data must be copied as is.
397 18bff752 Fabrice Bellard
@item -sameq
398 4c5f7207 Diego Biurrun
Use same video quality as source (implies VBR).
399 9181577c Fabrice Bellard
400 115329f1 Diego Biurrun
@item -pass n
401 4c5f7207 Diego Biurrun
Select the pass number (1 or 2). It is useful to do two pass
402
encoding. The statistics of the video are recorded in the first
403
pass and the video is generated at the exact requested bitrate
404
in the second pass.
405 9181577c Fabrice Bellard
406 115329f1 Diego Biurrun
@item -passlogfile file
407 4c5f7207 Diego Biurrun
Set two pass logfile name to @var{file}.
408 9181577c Fabrice Bellard
409 4386f941 Diego Biurrun
@item -newvideo
410
Add a new video stream to the current output stream.
411
412 9181577c Fabrice Bellard
@end table
413
414 18bff752 Fabrice Bellard
@section Advanced Video Options
415 9181577c Fabrice Bellard
416 e99c4e10 Fabrice Bellard
@table @option
417 4386f941 Diego Biurrun
@item -pix_fmt format
418
Set pixel format.
419 115329f1 Diego Biurrun
@item -g gop_size
420 4c5f7207 Diego Biurrun
Set the group of pictures size.
421 115329f1 Diego Biurrun
@item -intra
422 4c5f7207 Diego Biurrun
Use only intra frames.
423 4386f941 Diego Biurrun
@item -vdt n
424
Discard threshold.
425 115329f1 Diego Biurrun
@item -qscale q
426 4bef236b Diego Biurrun
Use fixed video quantizer scale (VBR).
427 115329f1 Diego Biurrun
@item -qmin q
428 4bef236b Diego Biurrun
minimum video quantizer scale (VBR)
429 115329f1 Diego Biurrun
@item -qmax q
430 4bef236b Diego Biurrun
maximum video quantizer scale (VBR)
431 115329f1 Diego Biurrun
@item -qdiff q
432 4bef236b Diego Biurrun
maximum difference between the quantizer scales (VBR)
433 115329f1 Diego Biurrun
@item -qblur blur
434 4bef236b Diego Biurrun
video quantizer scale blur (VBR)
435 115329f1 Diego Biurrun
@item -qcomp compression
436 4bef236b Diego Biurrun
video quantizer scale compression (VBR)
437 18bff752 Fabrice Bellard
438 9ae711e1 Víctor Paesa
@item -lmin lambda
439
minimum video lagrange factor (VBR)
440
@item -lmax lambda
441
max video lagrange factor (VBR)
442
@item -mblmin lambda
443
minimum macroblock quantizer scale (VBR)
444
@item -mblmax lambda
445
maximum macroblock quantizer scale (VBR)
446
447
These four options (lmin, lmax, mblmin, mblmax) use 'lambda' units,
448
but you may use the QP2LAMBDA constant to easily convert from 'q' units:
449
@example
450
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
451
@end example
452
453 18bff752 Fabrice Bellard
@item -rc_init_cplx complexity
454 4c5f7207 Diego Biurrun
initial complexity for single pass encoding
455 18bff752 Fabrice Bellard
@item -b_qfactor factor
456 4c5f7207 Diego Biurrun
qp factor between P- and B-frames
457 18bff752 Fabrice Bellard
@item -i_qfactor factor
458 4c5f7207 Diego Biurrun
qp factor between P- and I-frames
459 18bff752 Fabrice Bellard
@item -b_qoffset offset
460 4c5f7207 Diego Biurrun
qp offset between P- and B-frames
461 18bff752 Fabrice Bellard
@item -i_qoffset offset
462 4c5f7207 Diego Biurrun
qp offset between P- and I-frames
463 18bff752 Fabrice Bellard
@item -rc_eq equation
464 4c5f7207 Diego Biurrun
Set rate control equation (@pxref{FFmpeg formula
465
evaluator}) (default = @code{tex^qComp}).
466 5ee03c86 Fabrice Bellard
@item -rc_override override
467
rate control override for specific intervals
468 18bff752 Fabrice Bellard
@item -me method
469 4c5f7207 Diego Biurrun
Set motion estimation method to @var{method}.
470
Available methods are (from lowest to best quality):
471 18bff752 Fabrice Bellard
@table @samp
472
@item zero
473 5ee03c86 Fabrice Bellard
Try just the (0, 0) vector.
474 18bff752 Fabrice Bellard
@item phods
475
@item log
476
@item x1
477
@item epzs
478
(default method)
479
@item full
480
exhaustive search (slow and marginally better than epzs)
481
@end table
482
483
@item -dct_algo algo
484 4c5f7207 Diego Biurrun
Set DCT algorithm to @var{algo}. Available values are:
485 18bff752 Fabrice Bellard
@table @samp
486
@item 0
487
FF_DCT_AUTO (default)
488
@item 1
489
FF_DCT_FASTINT
490
@item 2
491
FF_DCT_INT
492
@item 3
493
FF_DCT_MMX
494
@item 4
495
FF_DCT_MLIB
496
@item 5
497
FF_DCT_ALTIVEC
498
@end table
499
500
@item -idct_algo algo
501 4c5f7207 Diego Biurrun
Set IDCT algorithm to @var{algo}. Available values are:
502 18bff752 Fabrice Bellard
@table @samp
503
@item 0
504
FF_IDCT_AUTO (default)
505
@item 1
506 115329f1 Diego Biurrun
FF_IDCT_INT
507 18bff752 Fabrice Bellard
@item 2
508 115329f1 Diego Biurrun
FF_IDCT_SIMPLE
509 18bff752 Fabrice Bellard
@item 3
510 115329f1 Diego Biurrun
FF_IDCT_SIMPLEMMX
511 18bff752 Fabrice Bellard
@item 4
512 115329f1 Diego Biurrun
FF_IDCT_LIBMPEG2MMX
513 18bff752 Fabrice Bellard
@item 5
514 115329f1 Diego Biurrun
FF_IDCT_PS2
515 18bff752 Fabrice Bellard
@item 6
516 115329f1 Diego Biurrun
FF_IDCT_MLIB
517 18bff752 Fabrice Bellard
@item 7
518 115329f1 Diego Biurrun
FF_IDCT_ARM
519 18bff752 Fabrice Bellard
@item 8
520 115329f1 Diego Biurrun
FF_IDCT_ALTIVEC
521 18bff752 Fabrice Bellard
@item 9
522 115329f1 Diego Biurrun
FF_IDCT_SH4
523 18bff752 Fabrice Bellard
@item 10
524 115329f1 Diego Biurrun
FF_IDCT_SIMPLEARM
525 18bff752 Fabrice Bellard
@end table
526
527
@item -er n
528 4c5f7207 Diego Biurrun
Set error resilience to @var{n}.
529 18bff752 Fabrice Bellard
@table @samp
530 115329f1 Diego Biurrun
@item 1
531 1471c6c2 Diego Biurrun
FF_ER_CAREFUL (default)
532 18bff752 Fabrice Bellard
@item 2
533 5ee03c86 Fabrice Bellard
FF_ER_COMPLIANT
534 18bff752 Fabrice Bellard
@item 3
535
FF_ER_AGGRESSIVE
536
@item 4
537
FF_ER_VERY_AGGRESSIVE
538
@end table
539
540 5ee03c86 Fabrice Bellard
@item -ec bit_mask
541 4c5f7207 Diego Biurrun
Set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of
542 5ee03c86 Fabrice Bellard
the following values:
543 18bff752 Fabrice Bellard
@table @samp
544
@item 1
545 4c5f7207 Diego Biurrun
FF_EC_GUESS_MVS (default = enabled)
546 18bff752 Fabrice Bellard
@item 2
547 4c5f7207 Diego Biurrun
FF_EC_DEBLOCK (default = enabled)
548 18bff752 Fabrice Bellard
@end table
549
550
@item -bf frames
551 4c5f7207 Diego Biurrun
Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
552 18bff752 Fabrice Bellard
@item -mbd mode
553
macroblock decision
554
@table @samp
555
@item 0
556 4c5f7207 Diego Biurrun
FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg).
557 18bff752 Fabrice Bellard
@item 1
558 4c5f7207 Diego Biurrun
FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
559 18bff752 Fabrice Bellard
@item 2
560 019c8838 Diego Biurrun
FF_MB_DECISION_RD: rate distortion
561 18bff752 Fabrice Bellard
@end table
562
563
@item -4mv
564 4c5f7207 Diego Biurrun
Use four motion vector by macroblock (MPEG-4 only).
565 18bff752 Fabrice Bellard
@item -part
566 4c5f7207 Diego Biurrun
Use data partitioning (MPEG-4 only).
567 18bff752 Fabrice Bellard
@item -bug param
568 4c5f7207 Diego Biurrun
Work around encoder bugs that are not auto-detected.
569 18bff752 Fabrice Bellard
@item -strict strictness
570 4c5f7207 Diego Biurrun
How strictly to follow the standards.
571 5ee03c86 Fabrice Bellard
@item -aic
572 4c5f7207 Diego Biurrun
Enable Advanced intra coding (h263+).
573 5ee03c86 Fabrice Bellard
@item -umv
574 4c5f7207 Diego Biurrun
Enable Unlimited Motion Vector (h263+)
575 18bff752 Fabrice Bellard
576
@item -deinterlace
577 4c5f7207 Diego Biurrun
Deinterlace pictures.
578 3841e813 Benjamin Larsson
@item -ilme
579 4c5f7207 Diego Biurrun
Force interlacing support in encoder (MPEG-2 and MPEG-4 only).
580
Use this option if your input file is interlaced and you want
581
to keep the interlaced format for minimum losses.
582
The alternative is to deinterlace the input stream with
583
@option{-deinterlace}, but deinterlacing introduces losses.
584 18bff752 Fabrice Bellard
@item -psnr
585 4c5f7207 Diego Biurrun
Calculate PSNR of compressed frames.
586 18bff752 Fabrice Bellard
@item -vstats
587 4c5f7207 Diego Biurrun
Dump video coding statistics to @file{vstats_HHMMSS.log}.
588 18bff752 Fabrice Bellard
@item -vhook module
589 4c5f7207 Diego Biurrun
Insert video processing @var{module}. @var{module} contains the module
590 18bff752 Fabrice Bellard
name and its parameters separated by spaces.
591 4386f941 Diego Biurrun
@item -top n
592
top=1/bottom=0/auto=-1 field first
593
@item -dc precision
594
Intra_dc_precision.
595
@item -vtag fourcc/tag
596
Force video tag/fourcc.
597
@item -qphist
598
Show QP histogram.
599
@item -vbsf bitstream filter
600
Bitstream filters available are "dump_extra", "remove_extra", "noise".
601 18bff752 Fabrice Bellard
@end table
602
603
@section Audio Options
604
605
@table @option
606 4386f941 Diego Biurrun
@item -aframes number
607
Set the number of audio frames to record.
608 115329f1 Diego Biurrun
@item -ar freq
609 4c5f7207 Diego Biurrun
Set the audio sampling frequency (default = 44100 Hz).
610 115329f1 Diego Biurrun
@item -ab bitrate
611 5438308f Panagiotis Issaris
Set the audio bitrate in bit/s (default = 64k).
612 18bff752 Fabrice Bellard
@item -ac channels
613 4c5f7207 Diego Biurrun
Set the number of audio channels (default = 1).
614 5ee03c86 Fabrice Bellard
@item -an
615 4c5f7207 Diego Biurrun
Disable audio recording.
616 5ee03c86 Fabrice Bellard
@item -acodec codec
617 4c5f7207 Diego Biurrun
Force audio codec to @var{codec}. Use the @code{copy} special value to
618
specify that the raw codec data must be copied as is.
619 de62a89d Víctor Paesa
@item -newaudio
620 18fd519f Diego Biurrun
Add a new audio track to the output file. If you want to specify parameters,
621
do so before @code{-newaudio} (@code{-acodec}, @code{-ab}, etc..).
622 de62a89d Víctor Paesa
623 18fd519f Diego Biurrun
Mapping will be done automatically, if the number of output streams is equal to
624
the number of input streams, else it will pick the first one that matches. You
625 de62a89d Víctor Paesa
can override the mapping using @code{-map} as usual.
626
627
Example:
628
@example
629 5438308f Panagiotis Issaris
ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio
630 de62a89d Víctor Paesa
@end example
631 4386f941 Diego Biurrun
@item -alang code
632
Set the ISO 639 language code (3 letters) of the current audio stream.
633
@end table
634
635
@section Advanced Audio options:
636
637
@table @option
638
@item -atag fourcc/tag
639
Force audio tag/fourcc.
640
@item -absf bitstream filter
641
Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp", "mp3decomp".
642
@end table
643
644
@section Subtitle options:
645
646
@table @option
647
@item -scodec codec
648
Force subtitle codec ('copy' to copy stream).
649
@item -newsubtitle
650
Add a new subtitle stream to the current output stream.
651
@item -slang code
652
Set the ISO 639 language code (3 letters) of the current subtitle stream.
653 18bff752 Fabrice Bellard
@end table
654
655
@section Audio/Video grab options
656
657
@table @option
658
@item -vc channel
659 4c5f7207 Diego Biurrun
Set video grab channel (DV1394 only).
660 18bff752 Fabrice Bellard
@item -tvstd standard
661 4c5f7207 Diego Biurrun
Set television standard (NTSC, PAL (SECAM)).
662 cc58300e Ramiro Polla
@item -isync
663
Synchronize read on input.
664 18bff752 Fabrice Bellard
@end table
665
666
@section Advanced options
667
668
@table @option
669 e645a733 Benjamin Larsson
@item -map input stream id[:input stream id]
670
Set stream mapping from input streams to output streams.
671
Just enumerate the input streams in the order you want them in the output.
672
[input stream id] sets the (input) stream to sync against.
673 4386f941 Diego Biurrun
@item -map_meta_data outfile:infile
674
Set meta data information of outfile from infile.
675 18bff752 Fabrice Bellard
@item -debug
676 4c5f7207 Diego Biurrun
Print specific debug info.
677 115329f1 Diego Biurrun
@item -benchmark
678 4c5f7207 Diego Biurrun
Add timings for benchmarking.
679 4386f941 Diego Biurrun
@item -dump
680 4c5f7207 Diego Biurrun
Dump each input packet.
681 4386f941 Diego Biurrun
@item -hex
682
When dumping packets, also dump the payload.
683 18bff752 Fabrice Bellard
@item -bitexact
684 4c5f7207 Diego Biurrun
Only use bit exact algorithms (for codec testing).
685 18bff752 Fabrice Bellard
@item -ps size
686 4c5f7207 Diego Biurrun
Set packet size in bits.
687 5ee03c86 Fabrice Bellard
@item -re
688 4c5f7207 Diego Biurrun
Read input at native frame rate. Mainly used to simulate a grab device.
689 4386f941 Diego Biurrun
@item -loop_input
690 4c5f7207 Diego Biurrun
Loop over the input stream. Currently it works only for image
691
streams. This option is used for automatic FFserver testing.
692 8108551a Todd Kirby
@item -loop_output number_of_times
693 019c8838 Diego Biurrun
Repeatedly loop output for formats that support looping such as animated GIF
694 4c5f7207 Diego Biurrun
(0 will loop the output infinitely).
695 4386f941 Diego Biurrun
@item -threads count
696
Thread count.
697 c52e13f1 Benjamin Larsson
@item -vsync parameter
698 29c9183c Diego Biurrun
Video sync method. Video will be stretched/squeezed to match the timestamps,
699
it is done by duplicating and dropping frames. With -map you can select from
700
which stream the timestamps should be taken. You can leave either video or
701 c52e13f1 Benjamin Larsson
audio unchanged and sync the remaining stream(s) to the unchanged one.
702
@item -async samples_per_second
703 29c9183c Diego Biurrun
Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
704 c52e13f1 Benjamin Larsson
the parameter is the maximum samples per second by which the audio is changed.
705
-async 1 is a special case where only the start of the audio stream is corrected
706
without any later correction.
707 9181577c Fabrice Bellard
@end table
708 18bff752 Fabrice Bellard
709
@node FFmpeg formula evaluator
710
@section FFmpeg formula evaluator
711
712
When evaluating a rate control string, FFmpeg uses an internal formula
713 115329f1 Diego Biurrun
evaluator.
714 18bff752 Fabrice Bellard
715
The following binary operators are available: @code{+}, @code{-},
716
@code{*}, @code{/}, @code{^}.
717
718
The following unary operators are available: @code{+}, @code{-},
719
@code{(...)}.
720
721
The following functions are available:
722
@table @var
723
@item sinh(x)
724
@item cosh(x)
725
@item tanh(x)
726
@item sin(x)
727
@item cos(x)
728
@item tan(x)
729
@item exp(x)
730
@item log(x)
731
@item squish(x)
732
@item gauss(x)
733
@item abs(x)
734
@item max(x, y)
735
@item min(x, y)
736
@item gt(x, y)
737
@item lt(x, y)
738
@item eq(x, y)
739
@item bits2qp(bits)
740
@item qp2bits(qp)
741
@end table
742
743
The following constants are available:
744
@table @var
745
@item PI
746
@item E
747
@item iTex
748
@item pTex
749
@item tex
750
@item mv
751
@item fCode
752
@item iCount
753
@item mcVar
754
@item var
755
@item isI
756
@item isP
757
@item isB
758
@item avgQP
759
@item qComp
760
@item avgIITex
761
@item avgPITex
762
@item avgPPTex
763
@item avgBPTex
764
@item avgTex
765
@end table
766
767 e99c4e10 Fabrice Bellard
@c man end
768
769
@ignore
770
771
@setfilename ffmpeg
772
@settitle FFmpeg video converter
773
774
@c man begin SEEALSO
775 019c8838 Diego Biurrun
ffserver(1), ffplay(1) and the HTML documentation of @file{ffmpeg}.
776 e99c4e10 Fabrice Bellard
@c man end
777
778
@c man begin AUTHOR
779
Fabrice Bellard
780
@c man end
781
782
@end ignore
783 9181577c Fabrice Bellard
784
@section Protocols
785
786 4c5f7207 Diego Biurrun
The filename can be @file{-} to read from standard input or to write
787
to standard output.
788 9181577c Fabrice Bellard
789 4c5f7207 Diego Biurrun
FFmpeg also handles many protocols specified with an URL syntax.
790 9181577c Fabrice Bellard
791 4c5f7207 Diego Biurrun
Use 'ffmpeg -formats' to see a list of the supported protocols.
792 9181577c Fabrice Bellard
793 e99c4e10 Fabrice Bellard
The protocol @code{http:} is currently used only to communicate with
794 4c5f7207 Diego Biurrun
FFserver (see the FFserver documentation). When FFmpeg will be a
795 e99c4e10 Fabrice Bellard
video player it will also be used for streaming :-)
796 9181577c Fabrice Bellard
797
@chapter Tips
798
799
@itemize
800 4c5f7207 Diego Biurrun
@item For streaming at very low bitrate application, use a low frame rate
801
and a small GOP size. This is especially true for RealVideo where
802 e99c4e10 Fabrice Bellard
the Linux player does not seem to be very fast, so it can miss
803
frames. An example is:
804 9181577c Fabrice Bellard
805
@example
806 3c0ba870 Panagiotis Issaris
ffmpeg -g 3 -r 3 -t 10 -b 50k -s qcif -f rv10 /tmp/b.rm
807 9181577c Fabrice Bellard
@end example
808
809
@item  The parameter 'q' which is displayed while encoding is the current
810 4c5f7207 Diego Biurrun
quantizer. The value 1 indicates that a very good quality could
811
be achieved. The value 31 indicates the worst quality. If q=31 appears
812 e99c4e10 Fabrice Bellard
too often, it means that the encoder cannot compress enough to meet
813 4c5f7207 Diego Biurrun
your bitrate. You must either increase the bitrate, decrease the
814 e99c4e10 Fabrice Bellard
frame rate or decrease the frame size.
815 9181577c Fabrice Bellard
816
@item If your computer is not fast enough, you can speed up the
817 e99c4e10 Fabrice Bellard
compression at the expense of the compression ratio. You can use
818
'-me zero' to speed up motion estimation, and '-intra' to disable
819 4c5f7207 Diego Biurrun
motion estimation completely (you have only I-frames, which means it
820 e99c4e10 Fabrice Bellard
is about as good as JPEG compression).
821 9181577c Fabrice Bellard
822 4c5f7207 Diego Biurrun
@item To have very low audio bitrates, reduce the sampling frequency
823 019c8838 Diego Biurrun
(down to 22050 kHz for MPEG audio, 22050 or 11025 for AC3).
824 9181577c Fabrice Bellard
825
@item To have a constant quality (but a variable bitrate), use the option
826 e99c4e10 Fabrice Bellard
'-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
827
quality).
828 9181577c Fabrice Bellard
829
@item When converting video files, you can use the '-sameq' option which
830 4c5f7207 Diego Biurrun
uses the same quality factor in the encoder as in the decoder.
831
It allows almost lossless encoding.
832 9181577c Fabrice Bellard
833
@end itemize
834
835 47404f9f Diego Biurrun
836
@chapter external libraries
837
838
FFmpeg can be hooked up with a number of external libraries to add support
839 7bb93206 Diego Biurrun
for more formats. None of them are used by default, their use has to be
840
explicitly requested by passing the appropriate flags to @file{./configure}.
841 47404f9f Diego Biurrun
842
@section AMR
843
844
AMR comes in two different flavors, WB and NB. FFmpeg can make use of the
845
AMR WB (floating-point mode) and the AMR NB (both floating-point and
846
fixed-point mode) reference decoders and encoders.
847
848
@itemize
849
850 6056c939 Diego Biurrun
@item For AMR WB floating-point and AMR NB floating point support, go to
851
@url{http://www.penguin.cz/~utx/amr} and follow the instructions for building
852 4f99f932 Diego Biurrun
the libraries. Pass @code{--enable-amr-nb} and/or @code{--enable-amr-wb} to
853
configure to enable the libraries.
854 6056c939 Diego Biurrun
855
@item For AMR NB fixed-point download TS26.073 REL-6 V6.0.0 from
856
@url{http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-600.zip}
857
and extract the source to the directory @file{libavcodec/amr}.
858 ef4e31d4 Diego Biurrun
You must also add @code{-DMMS_IO} to @code{CFLAGS} in
859 6056c939 Diego Biurrun
@file{libavcodec/amr/makefile}, i.e.
860
``@code{CFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO}''.
861 4f99f932 Diego Biurrun
Pass @code{--enable-amr-nb-fixed} to configure to enable it.
862 47404f9f Diego Biurrun
863
@end itemize
864
865
866 9181577c Fabrice Bellard
@chapter Supported File Formats and Codecs
867
868
You can use the @code{-formats} option to have an exhaustive list.
869
870
@section File Formats
871
872 6bf40f39 Philip Gladstone
FFmpeg supports the following file formats through the @code{libavformat}
873 0699d2fe Fabrice Bellard
library:
874 9181577c Fabrice Bellard
875 3fc9e78f Diego Biurrun
@multitable @columnfractions .4 .1 .1 .4
876 9181577c Fabrice Bellard
@item Supported File Format @tab Encoding @tab Decoding @tab Comments
877
@item MPEG audio @tab X @tab X
878 4c5f7207 Diego Biurrun
@item MPEG-1 systems @tab X  @tab  X
879 9181577c Fabrice Bellard
@tab muxed audio and video
880 4c5f7207 Diego Biurrun
@item MPEG-2 PS @tab X  @tab  X
881 9181577c Fabrice Bellard
@tab also known as @code{VOB} file
882 4c5f7207 Diego Biurrun
@item MPEG-2 TS @tab    @tab  X
883 9181577c Fabrice Bellard
@tab also known as DVB Transport Stream
884 115329f1 Diego Biurrun
@item ASF@tab X @tab X
885
@item AVI@tab X @tab X
886
@item WAV@tab X @tab X
887 9181577c Fabrice Bellard
@item Macromedia Flash@tab X @tab X
888 4c5f7207 Diego Biurrun
@tab Only embedded audio is decoded.
889 2eb5d024 Fabrice Bellard
@item FLV              @tab  X @tab X
890
@tab Macromedia Flash video files
891 115329f1 Diego Biurrun
@item Real Audio and Video @tab X @tab X
892
@item Raw AC3 @tab X  @tab  X
893
@item Raw MJPEG @tab X  @tab  X
894
@item Raw MPEG video @tab X  @tab  X
895
@item Raw PCM8/16 bits, mulaw/Alaw@tab X  @tab  X
896
@item Raw CRI ADX audio @tab X  @tab  X
897
@item Raw Shorten audio @tab    @tab  X
898
@item SUN AU format @tab X  @tab  X
899 7fe4c823 Alex Beregszaszi
@item NUT @tab X @tab X @tab NUT Open Container Format
900 115329f1 Diego Biurrun
@item QuickTime        @tab X @tab  X
901 4c5f7207 Diego Biurrun
@item MPEG-4           @tab X @tab  X
902
@tab MPEG-4 is a variant of QuickTime.
903 115329f1 Diego Biurrun
@item Raw MPEG4 video  @tab  X @tab  X
904 4fa1c4fa Roman Shaposhnik
@item DV               @tab  X @tab  X
905 701b603d Mike Melanson
@item 4xm              @tab    @tab X
906 4c5f7207 Diego Biurrun
@tab 4X Technologies format, used in some games.
907 4d3b1f8d Mike Melanson
@item Playstation STR  @tab    @tab X
908
@item Id RoQ           @tab    @tab X
909 4c5f7207 Diego Biurrun
@tab Used in Quake III, Jedi Knight 2, other computer games.
910 4d3b1f8d Mike Melanson
@item Interplay MVE    @tab    @tab X
911 4c5f7207 Diego Biurrun
@tab Format used in various Interplay computer games.
912 b17e9c99 Mike Melanson
@item WC3 Movie        @tab    @tab X
913 4c5f7207 Diego Biurrun
@tab Multimedia format used in Origin's Wing Commander III computer game.
914 2fdf638b Mike Melanson
@item Sega FILM/CPK    @tab    @tab X
915 4c5f7207 Diego Biurrun
@tab Used in many Sega Saturn console games.
916 2fdf638b Mike Melanson
@item Westwood Studios VQA/AUD  @tab    @tab X
917 4c5f7207 Diego Biurrun
@tab Multimedia formats used in Westwood Studios games.
918 4120a53a Mike Melanson
@item Id Cinematic (.cin) @tab    @tab X
919 4c5f7207 Diego Biurrun
@tab Used in Quake II.
920 42cad81a Mike Melanson
@item FLIC format      @tab    @tab X
921
@tab .fli/.flc files
922 da00f30e Mike Melanson
@item Sierra VMD       @tab    @tab X
923 4c5f7207 Diego Biurrun
@tab Used in Sierra CD-ROM games.
924 d08d7142 Mike Melanson
@item Sierra Online    @tab    @tab X
925 4c5f7207 Diego Biurrun
@tab .sol files used in Sierra Online games.
926 38088adf Mike Melanson
@item Matroska         @tab    @tab X
927 ad81a9fe Mike Melanson
@item Electronic Arts Multimedia    @tab    @tab X
928 4c5f7207 Diego Biurrun
@tab Used in various EA games; files have extensions like WVE and UV2.
929 353147ed Mike Melanson
@item Nullsoft Video (NSV) format @tab    @tab X
930 4accd1fd Måns Rullgård
@item ADTS AAC audio @tab X @tab X
931 ea395e8c Aurelien Jacobs
@item Creative VOC @tab X @tab X @tab Created for the Sound Blaster Pro.
932 4e114829 Mike Melanson
@item American Laser Games MM  @tab    @tab X
933
@tab Multimedia format used in games like Mad Dog McCree
934 26376701 Mike Melanson
@item AVS @tab    @tab X
935
@tab Multimedia format used by the Creature Shock game.
936 348efc18 Kostya Shishkov
@item Smacker @tab    @tab X
937
@tab Multimedia format used by many games.
938 d7a3a783 Baptiste Coudurier
@item GXF @tab  X @tab X
939
@tab General eXchange Format SMPTE 360M, used by Thomson Grass Valley playout servers.
940 dc56e0de Baptiste Coudurier
@item CIN @tab    @tab X
941
@tab Multimedia format used by Delphine Software games.
942 f3239539 Baptiste Coudurier
@item MXF @tab    @tab X
943
@tab Material eXchange Format SMPTE 377M, used by D-Cinema, broadcast industry.
944 29f86228 Baptiste Coudurier
@item SEQ @tab    @tab X
945
@tab Tiertex .seq files used in the DOS CDROM version of the game Flashback.
946 33a0dd37 Kostya Shishkov
@item DXA @tab    @tab X
947
@tab This format is used in non-Windows version of Feeble Files game and
948
different game cutscenes repacked for use with ScummVM.
949 efb0c399 Diego Biurrun
@item THP @tab    @tab X
950 d1e0d21f Marco Gerards
@tab Used on the Nintendo GameCube.
951 9a0ddd09 Anssi Hannula
@item C93 @tab    @tab X
952
@tab Used in the game Cyberia from Interplay.
953 1e6c6759 Nicholas Tung
@item Bethsoft VID @tab    @tab X
954
@tab Used in some games from Bethesda Softworks.
955 8e952e4d Anssi Hannula
@item CRYO APC @tab    @tab X
956
@tab Audio format used in some games by CRYO Interactive Entertainment.
957 353147ed Mike Melanson
@end multitable
958 9181577c Fabrice Bellard
959 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
960 9181577c Fabrice Bellard
961 0699d2fe Fabrice Bellard
@section Image Formats
962
963
FFmpeg can read and write images for each frame of a video sequence. The
964
following image formats are supported:
965
966 3fc9e78f Diego Biurrun
@multitable @columnfractions .4 .1 .1 .4
967 0699d2fe Fabrice Bellard
@item Supported Image Format @tab Encoding @tab Decoding @tab Comments
968 115329f1 Diego Biurrun
@item PGM, PPM     @tab X @tab X
969 4c5f7207 Diego Biurrun
@item PAM          @tab X @tab X @tab PAM is a PNM extension with alpha support.
970 2eb5d024 Fabrice Bellard
@item PGMYUV       @tab X @tab X @tab PGM with U and V components in YUV 4:2:0
971 4c5f7207 Diego Biurrun
@item JPEG         @tab X @tab X @tab Progressive JPEG is not supported.
972
@item .Y.U.V       @tab X @tab X @tab one raw file per component
973
@item animated GIF @tab X @tab X @tab Only uncompressed GIFs are generated.
974
@item PNG          @tab X @tab X @tab 2 bit and 4 bit/pixel not supported yet.
975 3689cf16 Kostya Shishkov
@item Targa        @tab   @tab X @tab Targa (.TGA) image format.
976 716222db Michael Niedermayer
@item TIFF         @tab X @tab X @tab YUV, JPEG and some extension is not supported yet.
977 6a91ec51 Mike Melanson
@item SGI          @tab X @tab X @tab SGI RGB image format
978 0699d2fe Fabrice Bellard
@end multitable
979
980 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
981 0699d2fe Fabrice Bellard
982 9181577c Fabrice Bellard
@section Video Codecs
983
984 3fc9e78f Diego Biurrun
@multitable @columnfractions .4 .1 .1 .4
985 9181577c Fabrice Bellard
@item Supported Codec @tab Encoding @tab Decoding @tab Comments
986 4c5f7207 Diego Biurrun
@item MPEG-1 video           @tab  X  @tab  X
987
@item MPEG-2 video           @tab  X  @tab  X
988 2bc5da7b Michael Niedermayer
@item MPEG-4                 @tab  X  @tab  X
989 9181577c Fabrice Bellard
@item MSMPEG4 V1             @tab  X  @tab  X
990
@item MSMPEG4 V2             @tab  X  @tab  X
991 2bc5da7b Michael Niedermayer
@item MSMPEG4 V3             @tab  X  @tab  X
992 9181577c Fabrice Bellard
@item WMV7                   @tab  X  @tab  X
993 4c5f7207 Diego Biurrun
@item WMV8                   @tab  X  @tab  X @tab not completely working
994 17a21f3c Diego Biurrun
@item WMV9                   @tab     @tab  X @tab not completely working
995
@item VC1                    @tab     @tab  X
996 b06b45c4 Mike Melanson
@item H.261                  @tab  X  @tab  X
997 4c5f7207 Diego Biurrun
@item H.263(+)               @tab  X  @tab  X @tab also known as RealVideo 1.0
998 b06b45c4 Mike Melanson
@item H.264                  @tab     @tab  X
999 e839a994 Diego Biurrun
@item RealVideo 1.0          @tab  X  @tab  X
1000
@item RealVideo 2.0          @tab  X  @tab  X
1001 115329f1 Diego Biurrun
@item MJPEG                  @tab  X  @tab  X
1002 4c5f7207 Diego Biurrun
@item lossless MJPEG         @tab  X  @tab  X
1003 26d6d032 Benjamin Larsson
@item JPEG-LS                @tab  X  @tab  X @tab fourcc: MJLS, lossless and near-lossless is supported
1004 d6896c49 Alex Beregszaszi
@item Apple MJPEG-B          @tab     @tab  X
1005
@item Sunplus MJPEG          @tab     @tab  X @tab fourcc: SP5X
1006 115329f1 Diego Biurrun
@item DV                     @tab  X  @tab  X
1007 4c5f7207 Diego Biurrun
@item HuffYUV                @tab  X  @tab  X
1008
@item FFmpeg Video 1         @tab  X  @tab  X @tab experimental lossless codec (fourcc: FFV1)
1009
@item FFmpeg Snow            @tab  X  @tab  X @tab experimental wavelet codec (fourcc: SNOW)
1010 701b603d Mike Melanson
@item Asus v1                @tab  X  @tab  X @tab fourcc: ASV1
1011 4d3b1f8d Mike Melanson
@item Asus v2                @tab  X  @tab  X @tab fourcc: ASV2
1012 701b603d Mike Melanson
@item Creative YUV           @tab     @tab  X @tab fourcc: CYUV
1013 d2bfadc0 Mike Melanson
@item Sorenson Video 1       @tab  X  @tab  X @tab fourcc: SVQ1
1014 701b603d Mike Melanson
@item Sorenson Video 3       @tab     @tab  X @tab fourcc: SVQ3
1015
@item On2 VP3                @tab     @tab  X @tab still experimental
1016 5ce117c3 Aurelien Jacobs
@item On2 VP5                @tab     @tab  X @tab fourcc: VP50
1017 9110a0e3 Aurelien Jacobs
@item On2 VP6                @tab     @tab  X @tab fourcc: VP60,VP61,VP62
1018 150d2772 Diego Biurrun
@item Theora                 @tab  X  @tab  X @tab still experimental
1019 cdb2c1ca Sebastian Jedruszkiewicz
@item Intel Indeo 3          @tab     @tab  X
1020 9303d49c Alex Beregszaszi
@item FLV                    @tab  X  @tab  X @tab Sorenson H.263 used in Flash
1021 15419468 Benjamin Larsson
@item Flash Screen Video     @tab  X  @tab  X @tab fourcc: FSV1
1022 4d3b1f8d Mike Melanson
@item ATI VCR1               @tab     @tab  X @tab fourcc: VCR1
1023 7fe4c823 Alex Beregszaszi
@item ATI VCR2               @tab     @tab  X @tab fourcc: VCR2
1024 4d3b1f8d Mike Melanson
@item Cirrus Logic AccuPak   @tab     @tab  X @tab fourcc: CLJR
1025 4c5f7207 Diego Biurrun
@item 4X Video               @tab     @tab  X @tab Used in certain computer games.
1026 115329f1 Diego Biurrun
@item Sony Playstation MDEC  @tab     @tab  X
1027 4c5f7207 Diego Biurrun
@item Id RoQ                 @tab     @tab  X @tab Used in Quake III, Jedi Knight 2, other computer games.
1028
@item Xan/WC3                @tab     @tab  X @tab Used in Wing Commander III .MVE files.
1029
@item Interplay Video        @tab     @tab  X @tab Used in Interplay .MVE files.
1030 070ed1bc Mike Melanson
@item Apple Animation        @tab     @tab  X @tab fourcc: 'rle '
1031 42cad81a Mike Melanson
@item Apple Graphics         @tab     @tab  X @tab fourcc: 'smc '
1032 2fdf638b Mike Melanson
@item Apple Video            @tab     @tab  X @tab fourcc: rpza
1033 d08d7142 Mike Melanson
@item Apple QuickDraw        @tab     @tab  X @tab fourcc: qdrw
1034 2fdf638b Mike Melanson
@item Cinepak                @tab     @tab  X
1035
@item Microsoft RLE          @tab     @tab  X
1036
@item Microsoft Video-1      @tab     @tab  X
1037 4120a53a Mike Melanson
@item Westwood VQA           @tab     @tab  X
1038 4c5f7207 Diego Biurrun
@item Id Cinematic Video     @tab     @tab  X @tab Used in Quake II.
1039 1dc1ed99 Roberto Togni
@item Planar RGB             @tab     @tab  X @tab fourcc: 8BPS
1040 42cad81a Mike Melanson
@item FLIC video             @tab     @tab  X
1041 9a4117d5 Mike Melanson
@item Duck TrueMotion v1     @tab     @tab  X @tab fourcc: DUCK
1042 dce76c20 Mike Melanson
@item Duck TrueMotion v2     @tab     @tab  X @tab fourcc: TM20
1043 4c5f7207 Diego Biurrun
@item VMD Video              @tab     @tab  X @tab Used in Sierra VMD files.
1044 a273bbfb Roberto Togni
@item MSZH                   @tab     @tab  X @tab Part of LCL
1045
@item ZLIB                   @tab  X  @tab  X @tab Part of LCL, encoder experimental
1046 9d53d58e Mike Melanson
@item TechSmith Camtasia     @tab     @tab  X @tab fourcc: TSCC
1047 d0a0bbd2 Mike Melanson
@item IBM Ultimotion         @tab     @tab  X @tab fourcc: ULTI
1048 ab711b3c Mike Melanson
@item Miro VideoXL           @tab     @tab  X @tab fourcc: VIXL
1049 acfd8f0f Mike Melanson
@item QPEG                   @tab     @tab  X @tab fourccs: QPEG, Q1.0, Q1.1
1050 115329f1 Diego Biurrun
@item LOCO                   @tab     @tab  X @tab
1051
@item Winnov WNV1            @tab     @tab  X @tab
1052 589f8220 Mike Melanson
@item Autodesk Animator Studio Codec  @tab     @tab  X @tab fourcc: AASC
1053 115329f1 Diego Biurrun
@item Fraps FPS1             @tab     @tab  X @tab
1054 2b6c1d80 Diego Biurrun
@item CamStudio              @tab     @tab  X @tab fourcc: CSCD
1055 4e114829 Mike Melanson
@item American Laser Games Video  @tab    @tab X @tab Used in games like Mad Dog McCree
1056 f48d6e1b Kostya Shishkov
@item ZMBV                   @tab   X @tab  X @tab Encoder works only on PAL8
1057 26376701 Mike Melanson
@item AVS Video              @tab     @tab  X @tab Video encoding used by the Creature Shock game.
1058 348efc18 Kostya Shishkov
@item Smacker Video          @tab     @tab  X @tab Video encoding used in Smacker.
1059 dfca23e3 Reimar Döffinger
@item RTjpeg                 @tab     @tab  X @tab Video encoding used in NuppelVideo files.
1060 fd7b1991 Kostya Shishkov
@item KMVC                   @tab     @tab  X @tab Codec used in Worms games.
1061 eb57c889 Kostya Shishkov
@item VMware Video           @tab     @tab  X @tab Codec used in videos captured by VMware.
1062 dc56e0de Baptiste Coudurier
@item Cin Video              @tab     @tab  X @tab Codec used in Delphine Software games.
1063 29f86228 Baptiste Coudurier
@item Tiertex Seq Video      @tab     @tab  X @tab Codec used in DOS CDROM FlashBack game.
1064 33a0dd37 Kostya Shishkov
@item DXA Video              @tab     @tab  X @tab Codec originally used in Feeble Files game.
1065 52b6bad2 Baptiste Coudurier
@item AVID DNxHD             @tab     @tab  X @tab aka SMPTE VC3
1066 9a0ddd09 Anssi Hannula
@item C93 Video              @tab     @tab  X @tab Codec used in Cyberia game.
1067 8845202e Diego Biurrun
@item THP                    @tab     @tab  X @tab Used on the Nintendo GameCube.
1068 1e6c6759 Nicholas Tung
@item Bethsoft VID           @tab     @tab  X @tab Used in some games from Bethesda Softworks.
1069 9181577c Fabrice Bellard
@end multitable
1070
1071 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
1072 9181577c Fabrice Bellard
1073
@section Audio Codecs
1074
1075
@multitable @columnfractions .4 .1 .1 .1 .7
1076
@item Supported Codec @tab Encoding @tab Decoding @tab Comments
1077 115329f1 Diego Biurrun
@item MPEG audio layer 2     @tab  IX  @tab  IX
1078 9181577c Fabrice Bellard
@item MPEG audio layer 1/3   @tab IX   @tab  IX
1079 4c5f7207 Diego Biurrun
@tab MP3 encoding is supported through the external library LAME.
1080 37776c3b Benjamin Larsson
@item AC3                    @tab  IX  @tab  IX
1081 4c5f7207 Diego Biurrun
@tab liba52 is used internally for decoding.
1082 34d7008d Philip Gladstone
@item Vorbis                 @tab  X   @tab  X
1083 74882049 Diego Biurrun
@item WMA V1/V2              @tab X    @tab X
1084 f6fa7a6c Benjamin Larsson
@item AAC                    @tab X    @tab X
1085 4c5f7207 Diego Biurrun
@tab Supported through the external library libfaac/libfaad.
1086 d4c3c5a6 Michael Niedermayer
@item Microsoft ADPCM        @tab X    @tab X
1087 4d3b1f8d Mike Melanson
@item MS IMA ADPCM           @tab X    @tab X
1088
@item QT IMA ADPCM           @tab      @tab X
1089
@item 4X IMA ADPCM           @tab      @tab X
1090 d4e437df Roman Shaposhnik
@item G.726  ADPCM           @tab X    @tab X
1091 b17e9c99 Mike Melanson
@item Duck DK3 IMA ADPCM     @tab      @tab X
1092 4c5f7207 Diego Biurrun
@tab Used in some Sega Saturn console games.
1093 b17e9c99 Mike Melanson
@item Duck DK4 IMA ADPCM     @tab      @tab X
1094 4c5f7207 Diego Biurrun
@tab Used in some Sega Saturn console games.
1095 2fdf638b Mike Melanson
@item Westwood Studios IMA ADPCM @tab      @tab X
1096 4c5f7207 Diego Biurrun
@tab Used in Westwood Studios games like Command and Conquer.
1097 7d8379f2 Mike Melanson
@item SMJPEG IMA ADPCM       @tab      @tab X
1098 4c5f7207 Diego Biurrun
@tab Used in certain Loki game ports.
1099 42cad81a Mike Melanson
@item CD-ROM XA ADPCM        @tab      @tab X
1100
@item CRI ADX ADPCM          @tab X    @tab X
1101 4c5f7207 Diego Biurrun
@tab Used in Sega Dreamcast games.
1102 7d8379f2 Mike Melanson
@item Electronic Arts ADPCM  @tab      @tab X
1103 4c5f7207 Diego Biurrun
@tab Used in various EA titles.
1104 b3bfb299 Mike Melanson
@item Creative ADPCM         @tab      @tab X
1105 2433f24f Aurelien Jacobs
@tab 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
1106 8845202e Diego Biurrun
@item THP ADPCM              @tab      @tab X
1107
@tab Used on the Nintendo GameCube.
1108 2eb5d024 Fabrice Bellard
@item RA144                  @tab      @tab X
1109
@tab Real 14400 bit/s codec
1110
@item RA288                  @tab      @tab X
1111
@tab Real 28800 bit/s codec
1112 37776c3b Benjamin Larsson
@item RADnet                 @tab X    @tab IX
1113 4c5f7207 Diego Biurrun
@tab Real low bitrate AC3 codec, liba52 is used for decoding.
1114 2eb5d024 Fabrice Bellard
@item AMR-NB                 @tab X    @tab X
1115 4c5f7207 Diego Biurrun
@tab Supported through an external library.
1116 d663a1fd Michael Niedermayer
@item AMR-WB                 @tab X    @tab X
1117 4c5f7207 Diego Biurrun
@tab Supported through an external library.
1118 2eb5d024 Fabrice Bellard
@item DV audio               @tab      @tab X
1119 4d3b1f8d Mike Melanson
@item Id RoQ DPCM            @tab      @tab X
1120 4c5f7207 Diego Biurrun
@tab Used in Quake III, Jedi Knight 2, other computer games.
1121 4d3b1f8d Mike Melanson
@item Interplay MVE DPCM     @tab      @tab X
1122 4c5f7207 Diego Biurrun
@tab Used in various Interplay computer games.
1123 b17e9c99 Mike Melanson
@item Xan DPCM               @tab      @tab X
1124 4c5f7207 Diego Biurrun
@tab Used in Origin's Wing Commander IV AVI files.
1125 d08d7142 Mike Melanson
@item Sierra Online DPCM     @tab      @tab X
1126 4c5f7207 Diego Biurrun
@tab Used in Sierra Online game audio files.
1127 d6896c49 Alex Beregszaszi
@item Apple MACE 3           @tab      @tab X
1128
@item Apple MACE 6           @tab      @tab X
1129 bfd9a00f Justin Ruggles
@item FLAC lossless audio    @tab X    @tab X
1130 13dfd2b9 Mike Melanson
@item Shorten lossless audio @tab      @tab X
1131 f770ee03 Mike Melanson
@item Apple lossless audio   @tab      @tab X
1132
@tab QuickTime fourcc 'alac'
1133 33a4d8b1 Alex Beregszaszi
@item FFmpeg Sonic           @tab X    @tab X
1134 4c5f7207 Diego Biurrun
@tab experimental lossy/lossless codec
1135 d9b1c197 Roberto Togni
@item Qdesign QDM2           @tab      @tab X
1136
@tab there are still some distortions
1137 440e7988 Roberto Togni
@item Real COOK              @tab      @tab X
1138
@tab All versions except 5.1 are supported
1139 e839a994 Diego Biurrun
@item DSP Group TrueSpeech   @tab      @tab X
1140 3dc411c0 Alex Beregszaszi
@item True Audio (TTA)       @tab      @tab X
1141 348efc18 Kostya Shishkov
@item Smacker Audio          @tab      @tab X
1142 730581f3 Kostya Shishkov
@item WavPack Audio          @tab      @tab X
1143 dc56e0de Baptiste Coudurier
@item Cin Audio              @tab      @tab X
1144
@tab Codec used in Delphine Software games.
1145 84ed36da Kostya Shishkov
@item Intel Music Coder      @tab      @tab X
1146 185c7b6b Kostya Shishkov
@item Musepack               @tab      @tab X
1147
@tab Only SV7 is supported
1148 01ca9ac3 Kostya Shishkov
@item DT$ Coherent Audio     @tab      @tab X
1149 10e26bc7 Benjamin Larsson
@item ATRAC 3                @tab      @tab X
1150 9181577c Fabrice Bellard
@end multitable
1151
1152 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
1153 9181577c Fabrice Bellard
1154 4c5f7207 Diego Biurrun
@code{I} means that an integer-only version is available, too (ensures high
1155
performance on systems without hardware floating point support).
1156 9181577c Fabrice Bellard
1157 47d944d2 Fabrice Bellard
@chapter Platform Specific information
1158
1159
@section BSD
1160
1161 21d1cb12 Diego Biurrun
BSD make will not build FFmpeg, you need to install and use GNU Make
1162
(@file{gmake}).
1163
1164 47d944d2 Fabrice Bellard
@section Windows
1165
1166 e2ef53fc Diego Biurrun
To get help and instructions for using FFmpeg under Windows, check out
1167
the FFmpeg Windows Help Forum at
1168
@url{http://arrozcru.no-ip.org/ffmpeg/}.
1169
1170 b030b284 Fabrice Bellard
@subsection Native Windows compilation
1171
1172
@itemize
1173
@item Install the current versions of MSYS and MinGW from
1174
@url{http://www.mingw.org/}. You can find detailed installation
1175
instructions in the download section and the FAQ.
1176
1177 f2d64c19 Alex Beregszaszi
NOTE: Use at least bash 3.1. Older versions are known to be failing on the
1178
configure script.
1179
1180 4c5f7207 Diego Biurrun
@item If you want to test the FFplay, also download
1181 50f52fcd Fabrice Bellard
the MinGW development library of SDL 1.2.x
1182
(@file{SDL-devel-1.2.x-mingw32.tar.gz}) from
1183 4c5f7207 Diego Biurrun
@url{http://www.libsdl.org}. Unpack it in a temporary directory, and
1184 50f52fcd Fabrice Bellard
unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool
1185 988a9f9e Fabrice Bellard
directory. Edit the @file{sdl-config} script so that it gives the
1186
correct SDL directory when invoked.
1187 50f52fcd Fabrice Bellard
1188 e926e391 Diego Biurrun
@item Extract the current version of FFmpeg.
1189 115329f1 Diego Biurrun
1190 b030b284 Fabrice Bellard
@item Start the MSYS shell (file @file{msys.bat}).
1191
1192 4c5f7207 Diego Biurrun
@item Change to the FFmpeg directory and follow
1193
 the instructions of how to compile FFmpeg (file
1194 50f52fcd Fabrice Bellard
@file{INSTALL}). Usually, launching @file{./configure} and @file{make}
1195
suffices. If you have problems using SDL, verify that
1196
@file{sdl-config} can be launched from the MSYS command line.
1197
1198 4c5f7207 Diego Biurrun
@item You can install FFmpeg in @file{Program Files/FFmpeg} by typing
1199 ce10ff8e Diego Biurrun
@file{make install}. Do not forget to copy @file{SDL.dll} to the place
1200 4c5f7207 Diego Biurrun
you launch @file{ffplay} from.
1201 50f52fcd Fabrice Bellard
1202 b030b284 Fabrice Bellard
@end itemize
1203
1204 115329f1 Diego Biurrun
Notes:
1205 988a9f9e Fabrice Bellard
@itemize
1206 50f52fcd Fabrice Bellard
1207 988a9f9e Fabrice Bellard
@item The target @file{make wininstaller} can be used to create a
1208
Nullsoft based Windows installer for FFmpeg and FFplay. @file{SDL.dll}
1209 4c5f7207 Diego Biurrun
must be copied to the FFmpeg directory in order to build the
1210 988a9f9e Fabrice Bellard
installer.
1211
1212 4c5f7207 Diego Biurrun
@item By using @code{./configure --enable-shared} when configuring FFmpeg,
1213 988a9f9e Fabrice Bellard
you can build @file{avcodec.dll} and @file{avformat.dll}. With
1214
@code{make install} you install the FFmpeg DLLs and the associated
1215 115329f1 Diego Biurrun
headers in @file{Program Files/FFmpeg}.
1216 988a9f9e Fabrice Bellard
1217 4c5f7207 Diego Biurrun
@item Visual C++ compatibility: If you used @code{./configure --enable-shared}
1218
when configuring FFmpeg, FFmpeg tries to use the Microsoft Visual
1219 988a9f9e Fabrice Bellard
C++ @code{lib} tool to build @code{avcodec.lib} and
1220 4c5f7207 Diego Biurrun
@code{avformat.lib}. With these libraries you can link your Visual C++
1221 be0efc0c Martin Boehme
code directly with the FFmpeg DLLs (see below).
1222 988a9f9e Fabrice Bellard
1223
@end itemize
1224 b030b284 Fabrice Bellard
1225 be0efc0c Martin Boehme
@subsection Visual C++ compatibility
1226
1227
FFmpeg will not compile under Visual C++ -- and it has too many
1228
dependencies on the GCC compiler to make a port viable. However,
1229
if you want to use the FFmpeg libraries in your own applications,
1230
you can still compile those applications using Visual C++. An
1231
important restriction to this is that you have to use the
1232
dynamically linked versions of the FFmpeg libraries (i.e. the
1233
DLLs), and you have to make sure that Visual-C++-compatible
1234
import libraries are created during the FFmpeg build process.
1235
1236
This description of how to use the FFmpeg libraries with Visual C++ is
1237
based on Visual C++ 2005 Express Edition Beta 2. If you have a different
1238
version, you might have to modify the procedures slightly.
1239
1240
Here are the step-by-step instructions for building the FFmpeg libraries
1241
so they can be used with Visual C++:
1242
1243
@enumerate
1244
1245 ce10ff8e Diego Biurrun
@item Install Visual C++ (if you have not done so already).
1246 be0efc0c Martin Boehme
1247
@item Install MinGW and MSYS as described above.
1248
1249
@item Add a call to @file{vcvars32.bat} (which sets up the environment
1250
variables for the Visual C++ tools) as the first line of
1251
@file{msys.bat}. The standard location for @file{vcvars32.bat} is
1252
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat},
1253
and the standard location for @file{msys.bat} is
1254
@file{C:\msys\1.0\msys.bat}. If this corresponds to your setup, add the
1255
following line as the first line of @file{msys.bat}:
1256
1257
@code{call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"}
1258
1259
@item Start the MSYS shell (file @file{msys.bat}) and type @code{link.exe}.
1260
If you get a help message with the command line options of @code{link.exe},
1261
this means your environment variables are set up correctly, the
1262
Microsoft linker is on the path and will be used by FFmpeg to
1263
create Visual-C++-compatible import libraries.
1264
1265 e926e391 Diego Biurrun
@item Extract the current version of FFmpeg and change to the FFmpeg directory.
1266 be0efc0c Martin Boehme
1267
@item Type the command
1268 51d8321d Diego Biurrun
@code{./configure --enable-shared --disable-static --enable-memalign-hack}
1269 ce10ff8e Diego Biurrun
to configure and, if that did not produce any errors,
1270 51d8321d Diego Biurrun
type @code{make} to build FFmpeg.
1271 be0efc0c Martin Boehme
1272
@item The subdirectories @file{libavformat}, @file{libavcodec}, and
1273
@file{libavutil} should now contain the files @file{avformat.dll},
1274
@file{avformat.lib}, @file{avcodec.dll}, @file{avcodec.lib},
1275
@file{avutil.dll}, and @file{avutil.lib}, respectively. Copy the three
1276
DLLs to your System32 directory (typically @file{C:\Windows\System32}).
1277
1278
@end enumerate
1279
1280
And here is how to use these libraries with Visual C++:
1281
1282
@enumerate
1283
1284
@item Create a new console application ("File / New / Project") and then
1285
select "Win32 Console Application". On the appropriate page of the
1286
Application Wizard, uncheck the "Precompiled headers" option.
1287
1288
@item Write the source code for your application, or, for testing, just
1289
copy the code from an existing sample application into the source file
1290
that Visual C++ has already created for you. (Note that your source
1291 ce10ff8e Diego Biurrun
filehas to have a @code{.cpp} extension; otherwise, Visual C++ will not
1292
compile the FFmpeg headers correctly because in C mode, it does not
1293 be0efc0c Martin Boehme
recognize the @code{inline} keyword.)  For example, you can copy
1294
@file{output_example.c} from the FFmpeg distribution (but you will
1295
have to make minor modifications so the code will compile under
1296
C++, see below).
1297
1298
@item Open the "Project / Properties" dialog box. In the "Configuration"
1299
combo box, select "All Configurations" so that the changes you make will
1300
affect both debug and release builds. In the tree view on the left hand
1301
side, select "C/C++ / General", then edit the "Additional Include
1302
Directories" setting to contain the complete paths to the
1303
@file{libavformat}, @file{libavcodec}, and @file{libavutil}
1304
subdirectories of your FFmpeg directory. Note that the directories have
1305
to be separated using semicolons. Now select "Linker / General" from the
1306
tree view and edit the "Additional Library Directories" setting to
1307
contain the same three directories.
1308
1309
@item Still in the "Project / Properties" dialog box, select "Linker / Input"
1310
from the tree view, then add the files @file{avformat.lib},
1311
@file{avcodec.lib}, and @file{avutil.lib} to the end of the "Additional
1312
Dependencies". Note that the names of the libraries have to be separated
1313
using spaces.
1314
1315 765c3440 Fredrik Orderud
@item Now, select "C/C++ / Code Generation" from the tree view. Select
1316 be0efc0c Martin Boehme
"Debug" in the "Configuration" combo box. Make sure that "Runtime
1317
Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in
1318
the "Configuration" combo box and make sure that "Runtime Library" is
1319
set to "Multi-threaded DLL".
1320
1321
@item Click "OK" to close the "Project / Properties" dialog box and build
1322
the application. Hopefully, it should compile and run cleanly. If you
1323
used @file{output_example.c} as your sample application, you will get a
1324
few compiler errors, but they are easy to fix. The first type of error
1325 ce10ff8e Diego Biurrun
occurs because Visual C++ does not allow an @code{int} to be converted to
1326 be0efc0c Martin Boehme
an @code{enum} without a cast. To solve the problem, insert the required
1327
casts (this error occurs once for a @code{CodecID} and once for a
1328
@code{CodecType}).  The second type of error occurs because C++ requires
1329
the return value of @code{malloc} to be cast to the exact type of the
1330
pointer it is being assigned to. Visual C++ will complain that, for
1331
example, @code{(void *)} is being assigned to @code{(uint8_t *)} without
1332
an explicit cast. So insert an explicit cast in these places to silence
1333
the compiler. The third type of error occurs because the @code{snprintf}
1334
library function is called @code{_snprintf} under Visual C++.  So just
1335
add an underscore to fix the problem. With these changes,
1336
@file{output_example.c} should compile under Visual C++, and the
1337
resulting executable should produce valid video files.
1338
1339
@end enumerate
1340
1341 b030b284 Fabrice Bellard
@subsection Cross compilation for Windows with Linux
1342
1343
You must use the MinGW cross compilation tools available at
1344
@url{http://www.mingw.org/}.
1345
1346 4c5f7207 Diego Biurrun
Then configure FFmpeg with the following options:
1347 b030b284 Fabrice Bellard
@example
1348 6b74787b Víctor Paesa
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
1349 b030b284 Fabrice Bellard
@end example
1350 019c8838 Diego Biurrun
(you can change the cross-prefix according to the prefix chosen for the
1351 b030b284 Fabrice Bellard
MinGW tools).
1352
1353 4c5f7207 Diego Biurrun
Then you can easily test FFmpeg with Wine
1354 b030b284 Fabrice Bellard
(@url{http://www.winehq.com/}).
1355
1356 30aee296 Diego Biurrun
@subsection Compilation under Cygwin
1357
1358
Cygwin works very much like Unix.
1359
1360
Just install your Cygwin with all the "Base" packages, plus the
1361
following "Devel" ones:
1362
@example
1363
binutils, gcc-core, make, subversion
1364
@end example
1365
1366
Do not install binutils-20060709-1 (they are buggy on shared builds);
1367
use binutils-20050610-1 instead.
1368
1369
Then run
1370
1371
@example
1372
./configure --enable-static --disable-shared
1373
@end example
1374
1375
to make a static build or
1376
1377
@example
1378
./configure --enable-shared --disable-static
1379
@end example
1380
1381
to build shared libraries.
1382
1383
If you want to build FFmpeg with additional libraries, download Cygwin
1384
"Devel" packages for Ogg and Vorbis from any Cygwin packages repository
1385
and/or SDL, xvid, faac, faad2 packages from Cygwin Ports,
1386
(@url{http://cygwinports.dotsrc.org/}).
1387
1388
@subsection Crosscompilation for Windows under Cygwin
1389
1390 ce10ff8e Diego Biurrun
With Cygwin you can create Windows binaries that do not need the cygwin1.dll.
1391 30aee296 Diego Biurrun
1392
Just install your Cygwin as explained before, plus these additional
1393
"Devel" packages:
1394
@example
1395
gcc-mingw-core, mingw-runtime, mingw-zlib
1396
@end example
1397
1398
and add some special flags to your configure invocation.
1399
1400
For a static build run
1401
@example
1402 6b74787b Víctor Paesa
./configure --target-os=mingw32 --enable-memalign-hack --enable-static --disable-shared --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
1403 30aee296 Diego Biurrun
@end example
1404
1405
and for a build with shared libraries
1406
@example
1407 6b74787b Víctor Paesa
./configure --target-os=mingw32 --enable-memalign-hack --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
1408 30aee296 Diego Biurrun
@end example
1409
1410 47d944d2 Fabrice Bellard
@section BeOS
1411
1412
The configure script should guess the configuration itself.
1413
Networking support is currently not finished.
1414
errno issues fixed by Andrew Bachmann.
1415
1416
Old stuff:
1417
1418 7dd611c9 François Revol
François Revol - revol at free dot fr - April 2002
1419 47d944d2 Fabrice Bellard
1420 115329f1 Diego Biurrun
The configure script should guess the configuration itself,
1421 ce10ff8e Diego Biurrun
however I still did not test building on the net_server version of BeOS.
1422 47d944d2 Fabrice Bellard
1423 4c5f7207 Diego Biurrun
FFserver is broken (needs poll() implementation).
1424 47d944d2 Fabrice Bellard
1425 4c5f7207 Diego Biurrun
There are still issues with errno codes, which are negative in BeOS, and
1426 115329f1 Diego Biurrun
that FFmpeg negates when returning. This ends up turning errors into
1427 47d944d2 Fabrice Bellard
valid results, then crashes.
1428
(To be fixed)
1429
1430 34d7008d Philip Gladstone
@chapter Developers Guide
1431 9181577c Fabrice Bellard
1432
@section API
1433 a0b72f90 Diego Biurrun
@itemize @bullet
1434 9181577c Fabrice Bellard
@item libavcodec is the library containing the codecs (both encoding and
1435 4c5f7207 Diego Biurrun
decoding). Look at @file{libavcodec/apiexample.c} to see how to use it.
1436 9181577c Fabrice Bellard
1437 4c5f7207 Diego Biurrun
@item libavformat is the library containing the file format handling (mux and
1438
demux code for several formats). Look at @file{ffplay.c} to use it in a
1439 a93b9dba Fabrice Bellard
player. See @file{output_example.c} to use it to generate audio or video
1440
streams.
1441
1442 9181577c Fabrice Bellard
@end itemize
1443
1444
@section Integrating libavcodec or libavformat in your program
1445
1446
You can integrate all the source code of the libraries to link them
1447
statically to avoid any version problem. All you need is to provide a
1448
'config.mak' and a 'config.h' in the parent directory. See the defines
1449
generated by ./configure to understand what is needed.
1450
1451
You can use libavcodec or libavformat in your commercial program, but
1452
@emph{any patch you make must be published}. The best way to proceed is
1453 4c5f7207 Diego Biurrun
to send your patches to the FFmpeg mailing list.
1454 9181577c Fabrice Bellard
1455 80d1c272 Michael Niedermayer
@node Coding Rules
1456 9181577c Fabrice Bellard
@section Coding Rules
1457
1458 4c5f7207 Diego Biurrun
FFmpeg is programmed in the ISO C90 language with a few additional
1459 cb6e87c1 Falk Hüffner
features from ISO C99, namely:
1460
@itemize @bullet
1461
@item
1462
the @samp{inline} keyword;
1463
@item
1464
@samp{//} comments;
1465
@item
1466
designated struct initializers (@samp{struct s x = @{ .i = 17 @};})
1467
@item
1468 114afa9c Diego Biurrun
compound literals (@samp{x = (struct s) @{ 17, 23 @};})
1469 cb6e87c1 Falk Hüffner
@end itemize
1470
1471 ce10ff8e Diego Biurrun
These features are supported by all compilers we care about, so we will not
1472
accept patches to remove their use unless they absolutely do not impair
1473 cb6e87c1 Falk Hüffner
clarity and performance.
1474
1475 4c5f7207 Diego Biurrun
All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also
1476 cb6e87c1 Falk Hüffner
compiles with several other compilers, such as the Compaq ccc compiler
1477
or Sun Studio 9, and we would like to keep it that way unless it would
1478 ce10ff8e Diego Biurrun
be exceedingly involved. To ensure compatibility, please do not use any
1479 4c5f7207 Diego Biurrun
additional C99 features or GCC extensions. Especially watch out for:
1480 cb6e87c1 Falk Hüffner
@itemize @bullet
1481
@item
1482
mixing statements and declarations;
1483
@item
1484
@samp{long long} (use @samp{int64_t} instead);
1485
@item
1486
@samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar;
1487
@item
1488 019c8838 Diego Biurrun
GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}).
1489 cb6e87c1 Falk Hüffner
@end itemize
1490 9181577c Fabrice Bellard
1491 53862e0f Diego Biurrun
Indent size is 4.
1492 b86e38a0 Aurelien Jacobs
The presentation is the one specified by 'indent -i4 -kr -nut'.
1493 53862e0f Diego Biurrun
The TAB character is forbidden outside of Makefiles as is any
1494
form of trailing whitespace. Commits containing either will be
1495 1c1b5a40 Diego Biurrun
rejected by the Subversion repository.
1496 9181577c Fabrice Bellard
1497 4c5f7207 Diego Biurrun
Main priority in FFmpeg is simplicity and small code size (=less
1498 9181577c Fabrice Bellard
bugs).
1499
1500 4c5f7207 Diego Biurrun
Comments: Use the JavaDoc/Doxygen
1501
format (see examples below) so that code documentation
1502
can be generated automatically. All nontrivial functions should have a comment
1503 ce10ff8e Diego Biurrun
above them explaining what the function does, even if it is just one sentence.
1504 4c5f7207 Diego Biurrun
All structures and their member variables should be documented, too.
1505 f4888b83 Michael Niedermayer
@example
1506
/**
1507 2185824b Måns Rullgård
 * @@file mpeg.c
1508
 * MPEG codec.
1509
 * @@author ...
1510
 */
1511 f4888b83 Michael Niedermayer
1512
/**
1513 2185824b Måns Rullgård
 * Summary sentence.
1514
 * more text ...
1515
 * ...
1516
 */
1517 114afa9c Diego Biurrun
typedef struct Foobar@{
1518 2185824b Måns Rullgård
    int var1; /**< var1 description */
1519
    int var2; ///< var2 description
1520
    /** var3 description */
1521
    int var3;
1522 114afa9c Diego Biurrun
@} Foobar;
1523 f4888b83 Michael Niedermayer
1524
/**
1525 2185824b Måns Rullgård
 * Summary sentence.
1526
 * more text ...
1527
 * ...
1528
 * @@param my_parameter description of my_parameter
1529
 * @@return return value description
1530
 */
1531 f4888b83 Michael Niedermayer
int myfunc(int my_parameter)
1532
...
1533
@end example
1534 9181577c Fabrice Bellard
1535 115329f1 Diego Biurrun
fprintf and printf are forbidden in libavformat and libavcodec,
1536 36d9b4e8 Michael Niedermayer
please use av_log() instead.
1537
1538 1c1b5a40 Diego Biurrun
@section Development Policy
1539 7a57b90c Michael Niedermayer
1540
@enumerate
1541 115329f1 Diego Biurrun
@item
1542 7a57b90c Michael Niedermayer
   You must not commit code which breaks FFmpeg! (Meaning unfinished but
1543 4c5f7207 Diego Biurrun
   enabled code which breaks compilation or compiles but does not work or
1544 7a57b90c Michael Niedermayer
   breaks the regression tests)
1545
   You can commit unfinished stuff (for testing etc), but it must be disabled
1546
   (#ifdef etc) by default so it does not interfere with other developers'
1547
   work.
1548 115329f1 Diego Biurrun
@item
1549 ce10ff8e Diego Biurrun
   You do not have to over-test things. If it works for you, and you think it
1550 4c5f7207 Diego Biurrun
   should work for others, then commit. If your code has problems
1551
   (portability, triggers compiler bugs, unusual environment etc) they will be
1552 7a57b90c Michael Niedermayer
   reported and eventually fixed.
1553 115329f1 Diego Biurrun
@item
1554 7a57b90c Michael Niedermayer
   Do not commit unrelated changes together, split them into self-contained
1555 ce10ff8e Diego Biurrun
   pieces. Also do not forget that if part B depends on part A, but A does not
1556
   depend on B, then A can and should be committed first and separate from B.
1557
   Keeping changes well split into self-contained parts makes reviewing and
1558
   understanding them on the commit log mailing list easier. This also helps
1559
   in case of debugging later on.
1560
   Also if you have doubts about splitting or not splitting, do not hesitate to
1561 442d1598 Reimar Döffinger
   ask/discuss it on the developer mailing list.
1562 7a57b90c Michael Niedermayer
@item
1563
   Do not change behavior of the program (renaming options etc) without
1564 019c8838 Diego Biurrun
   first discussing it on the ffmpeg-devel mailing list. Do not remove
1565 7a57b90c Michael Niedermayer
   functionality from the code. Just improve!
1566 115329f1 Diego Biurrun
1567 4c5f7207 Diego Biurrun
   Note: Redundant code can be removed.
1568 7a57b90c Michael Niedermayer
@item
1569
   Do not commit changes to the build system (Makefiles, configure script)
1570 019c8838 Diego Biurrun
   which change behavior, defaults etc, without asking first. The same
1571 7a57b90c Michael Niedermayer
   applies to compiler warning fixes, trivial looking fixes and to code
1572
   maintained by other developers. We usually have a reason for doing things
1573 019c8838 Diego Biurrun
   the way we do. Send your changes as patches to the ffmpeg-devel mailing
1574 7a57b90c Michael Niedermayer
   list, and if the code maintainers say OK, you may commit. This does not
1575
   apply to files you wrote and/or maintain.
1576
@item
1577
   We refuse source indentation and other cosmetic changes if they are mixed
1578
   with functional changes, such commits will be rejected and removed. Every
1579
   developer has his own indentation style, you should not change it. Of course
1580
   if you (re)write something, you can use your own style, even though we would
1581 4c5f7207 Diego Biurrun
   prefer if the indentation throughout FFmpeg was consistent (Many projects
1582 ce10ff8e Diego Biurrun
   force a given indentation style - we do not.). If you really need to make
1583 7a57b90c Michael Niedermayer
   indentation changes (try to avoid this), separate them strictly from real
1584
   changes.
1585
1586 114afa9c Diego Biurrun
   NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code,
1587 ce10ff8e Diego Biurrun
   then either do NOT change the indentation of the inner part within (do not
1588 019c8838 Diego Biurrun
   move it to the right)! or do so in a separate commit
1589 7a57b90c Michael Niedermayer
@item
1590
   Always fill out the commit log message. Describe in a few lines what you
1591
   changed and why. You can refer to mailing list postings if you fix a
1592
   particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
1593
@item
1594
   If you apply a patch by someone else, include the name and email address in
1595 1c1b5a40 Diego Biurrun
   the log message. Since the ffmpeg-cvslog mailing list is publicly
1596 019c8838 Diego Biurrun
   archived you should add some SPAM protection to the email address. Send an
1597
   answer to ffmpeg-devel (or wherever you got the patch from) saying that
1598 7a57b90c Michael Niedermayer
   you applied the patch.
1599
@item
1600 b092d033 Benoit Fouet
   When applying patches that have been discussed (at length) on the mailing
1601
   list, reference the thread in the log message.
1602
@item
1603 5ab0f204 Diego Biurrun
    Do NOT commit to code actively maintained by others without permission.
1604
    Send a patch to ffmpeg-devel instead. If noone answers within a reasonable
1605
    timeframe (12h for build failures and security fixes, 3 days small changes,
1606 ce10ff8e Diego Biurrun
    1 week for big patches) then commit your patch if you think it is OK.
1607 5ab0f204 Diego Biurrun
    Also note, the maintainer can simply ask for more time to review!
1608 7a57b90c Michael Niedermayer
@item
1609 1c1b5a40 Diego Biurrun
    Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits
1610 7a57b90c Michael Niedermayer
    are sent there and reviewed by all the other developers. Bugs and possible
1611
    improvements or general questions regarding commits are discussed there. We
1612
    expect you to react if problems with your code are uncovered.
1613
@item
1614
    Update the documentation if you change behavior or add features. If you are
1615 019c8838 Diego Biurrun
    unsure how best to do this, send a patch to ffmpeg-devel, the documentation
1616 7a57b90c Michael Niedermayer
    maintainer(s) will review and commit your stuff.
1617
@item
1618 0541f2c4 Michael Niedermayer
    Try to keep important discussions and requests (also) on the public
1619
    developer mailing list, so that all developers can benefit from them.
1620
@item
1621 4c5f7207 Diego Biurrun
    Never write to unallocated memory, never write over the end of arrays,
1622
    always check values read from some untrusted source before using them
1623
    as array index or other risky things.
1624 76bec1d8 Alexander Strasser
@item
1625
    Remember to check if you need to bump versions for the specific libav
1626 f0efbde7 Diego Biurrun
    parts (libavutil, libavcodec, libavformat) you are changing. You need
1627 76bec1d8 Alexander Strasser
    to change the version integer and the version string.
1628
    Incrementing the first component means no backward compatibility to
1629 a940b428 Michael Niedermayer
    previous versions (e.g. removal of a function from the public API).
1630 76bec1d8 Alexander Strasser
    Incrementing the second component means backward compatible change
1631 a940b428 Michael Niedermayer
    (e.g. addition of a function to the public API).
1632 76bec1d8 Alexander Strasser
    Incrementing the third component means a noteworthy binary compatible
1633
    change (e.g. encoder bug fix that matters for the decoder).
1634 ebd32fd7 Diego Biurrun
@item
1635 3f1965c4 Diego Biurrun
    If you add a new codec, remember to update the changelog, add it to
1636
    the supported codecs table in the documentation and bump the second
1637
    component of the @file{libavcodec} version number appropriately. If
1638
    it has a fourcc, add it to @file{libavformat/avienc.c}, even if it
1639
    is only a decoder.
1640 65d0bea8 Michael Niedermayer
@item
1641 ce10ff8e Diego Biurrun
    Do not change code to hide warnings without ensuring that the underlying
1642
    logic is correct and thus the warning was inappropriate.
1643 114afa9c Diego Biurrun
@end enumerate
1644 7a57b90c Michael Niedermayer
1645
We think our rules are not too hard. If you have comments, contact us.
1646
1647
Note, these rules are mostly borrowed from the MPlayer project.
1648
1649 9181577c Fabrice Bellard
@section Submitting patches
1650
1651 ce10ff8e Diego Biurrun
First, (@pxref{Coding Rules}) above if you did not yet.
1652 80d1c272 Michael Niedermayer
1653 6a6810b1 Michael Niedermayer
When you submit your patch, try to send a unified diff (diff '-up'
1654 9181577c Fabrice Bellard
option). I cannot read other diffs :-)
1655
1656 6e5c1877 Michael Niedermayer
Also please do not submit patches which contain several unrelated changes.
1657 115329f1 Diego Biurrun
Split them into individual self-contained patches; this makes reviewing
1658 7885603a Michael Niedermayer
them much easier.
1659
1660 9181577c Fabrice Bellard
Run the regression tests before submitting a patch so that you can
1661 6bf40f39 Philip Gladstone
verify that there are no big problems.
1662 9181577c Fabrice Bellard
1663
Patches should be posted as base64 encoded attachments (or any other
1664 ce10ff8e Diego Biurrun
encoding which ensures that the patch will not be trashed during
1665 115329f1 Diego Biurrun
transmission) to the ffmpeg-devel mailing list, see
1666 2b165e29 Diego Biurrun
@url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel}
1667 9181577c Fabrice Bellard
1668 54fcf429 Michael Niedermayer
It also helps quite a bit if you tell us what the patch does (for example
1669 4c5f7207 Diego Biurrun
'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant
1670 54fcf429 Michael Niedermayer
and has no lrint()')
1671
1672 442d1598 Reimar Döffinger
Also please if you send several patches, send each patch as separate mail,
1673
do not attach several unrelated patches to the same mail.
1674 a15bcf70 Michael Niedermayer
1675 dd597cd7 Michael Niedermayer
@section patch submission checklist
1676
1677
@enumerate
1678
@item
1679
    Do the regression tests pass with the patch applied?
1680
@item
1681
    Is the patch a unified diff?
1682
@item
1683 4a7a0908 Diego Biurrun
    Is the patch against latest FFmpeg SVN?
1684 dd597cd7 Michael Niedermayer
@item
1685
    Are you subscribed to ffmpeg-dev?
1686
    (the list is subscribers only due to spam)
1687
@item
1688
    Have you checked that the changes are minimal, so that the same cannot be
1689 442d1598 Reimar Döffinger
    achieved with a smaller patch and/or simpler final code?
1690 dd597cd7 Michael Niedermayer
@item
1691 4a7a0908 Diego Biurrun
    If the change is to speed critical code, did you benchmark it?
1692 dd597cd7 Michael Niedermayer
@item
1693 442d1598 Reimar Döffinger
    Have you checked that the patch does not introduce buffer overflows or
1694 dd597cd7 Michael Niedermayer
    other security issues?
1695
@item
1696 4a7a0908 Diego Biurrun
    Is the patch created from the root of the source tree, so it can be
1697
    applied with @code{patch -p0}?
1698 dd597cd7 Michael Niedermayer
@item
1699
    Does the patch not mix functional and cosmetic changes?
1700
@item
1701
    Is the patch attached to the email you send?
1702
@item
1703 4a7a0908 Diego Biurrun
    Is the mime type of the patch correct? It should be text/x-diff or
1704
    text/x-patch or at least text/plain and not application/octet-stream.
1705 dd597cd7 Michael Niedermayer
@item
1706 4a7a0908 Diego Biurrun
    If the patch fixes a bug, did you provide a verbose analysis of the bug?
1707 dd597cd7 Michael Niedermayer
@item
1708 4a7a0908 Diego Biurrun
    If the patch fixes a bug, did you provide enough information, including
1709 dd597cd7 Michael Niedermayer
    a sample, so the bug can be reproduced and the fix can be verified?
1710
@item
1711
    Did you provide a verbose summary about what the patch does change?
1712
@item
1713
    Did you provide a verbose explanation why it changes things like it does?
1714
@item
1715 442d1598 Reimar Döffinger
    Did you provide a verbose summary of the user visible advantages and
1716 dd597cd7 Michael Niedermayer
    disadvantages if the patch is applied?
1717
@item
1718
    Did you provide an example so we can verify the new feature added by the
1719
    patch easily?
1720
@item
1721
    If you did any benchmarks, did you provide them in the mail?
1722 bbe94afb Diego Biurrun
@item
1723
    If you added a new file, did you insert a license header? It should be
1724 6baa2943 Diego Biurrun
    taken from FFmpeg, not randomly copied and pasted from somewhere else.
1725 2f954ef2 Michael Niedermayer
@item
1726
    Did you provide a suggestion for a clear commit log message?
1727 dd597cd7 Michael Niedermayer
@end enumerate
1728
1729 f5f11d71 Michael Niedermayer
@section Patch review process
1730
1731
All patches posted to ffmpeg-devel will be reviewed, unless they contain a
1732
clear note that the patch is not for SVN.
1733
Reviews and comments will be posted as replies to the patch on the
1734 ce10ff8e Diego Biurrun
mailing list. The patch submitter then has to take care of every comment,
1735 442d1598 Reimar Döffinger
that can be by resubmitting a changed patch or by discussion. Resubmitted
1736 ce10ff8e Diego Biurrun
patches will themselves be reviewed like any other patch. If at some point
1737 f5f11d71 Michael Niedermayer
a patch passes review with no comments then it is approved, that can for
1738 ce10ff8e Diego Biurrun
simple and small patches happen immediately while large patches will generally
1739 f5f11d71 Michael Niedermayer
have to be changed and reviewed many times before they are approved.
1740 ce10ff8e Diego Biurrun
After a patch is approved it will be committed to the repository.
1741 f5f11d71 Michael Niedermayer
1742
We will review all submitted patches, but sometimes we are quite busy so
1743
especially for large patches this can take several weeks.
1744
1745
When resubmitting patches, please do not make any significant changes
1746 ce10ff8e Diego Biurrun
not related to the comments received during review. Such patches will
1747
be rejected. Instead, submit  significant changes or new features as
1748
separate patches.
1749 cf7f2b16 Michael Niedermayer
1750 9181577c Fabrice Bellard
@section Regression tests
1751
1752 1c1b5a40 Diego Biurrun
Before submitting a patch (or committing to the repository), you should at least
1753 9181577c Fabrice Bellard
test that you did not break anything.
1754
1755 4c5f7207 Diego Biurrun
The regression tests build a synthetic video stream and a synthetic
1756
audio stream. These are then encoded and decoded with all codecs or
1757 9181577c Fabrice Bellard
formats. The CRC (or MD5) of each generated file is recorded in a
1758 4c5f7207 Diego Biurrun
result file. A 'diff' is launched to compare the reference results and
1759 9181577c Fabrice Bellard
the result file.
1760
1761 4c5f7207 Diego Biurrun
The regression tests then go on to test the FFserver code with a
1762 6bf40f39 Philip Gladstone
limited set of streams. It is important that this step runs correctly
1763
as well.
1764
1765 36d9b4e8 Michael Niedermayer
Run 'make test' to test all the codecs and formats.
1766 9181577c Fabrice Bellard
1767 4c5f7207 Diego Biurrun
Run 'make fulltest' to test all the codecs, formats and FFserver.
1768 9181577c Fabrice Bellard
1769 4c5f7207 Diego Biurrun
[Of course, some patches may change the results of the regression tests. In
1770
this case, the reference results of the regression tests shall be modified
1771 9181577c Fabrice Bellard
accordingly].
1772
1773
@bye