Statistics
| Branch: | Revision:

ffmpeg / doc / ffmpeg-doc.texi @ e300ab4e

History | View | Annotate | Download (59.4 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 b60d1379 Stefano Sabatini
@item -vstats_file file
589
Dump video coding statistics to @var{file}.
590 18bff752 Fabrice Bellard
@item -vhook module
591 4c5f7207 Diego Biurrun
Insert video processing @var{module}. @var{module} contains the module
592 18bff752 Fabrice Bellard
name and its parameters separated by spaces.
593 4386f941 Diego Biurrun
@item -top n
594
top=1/bottom=0/auto=-1 field first
595
@item -dc precision
596
Intra_dc_precision.
597
@item -vtag fourcc/tag
598
Force video tag/fourcc.
599
@item -qphist
600
Show QP histogram.
601
@item -vbsf bitstream filter
602
Bitstream filters available are "dump_extra", "remove_extra", "noise".
603 18bff752 Fabrice Bellard
@end table
604
605
@section Audio Options
606
607
@table @option
608 4386f941 Diego Biurrun
@item -aframes number
609
Set the number of audio frames to record.
610 115329f1 Diego Biurrun
@item -ar freq
611 4c5f7207 Diego Biurrun
Set the audio sampling frequency (default = 44100 Hz).
612 115329f1 Diego Biurrun
@item -ab bitrate
613 5438308f Panagiotis Issaris
Set the audio bitrate in bit/s (default = 64k).
614 18bff752 Fabrice Bellard
@item -ac channels
615 4c5f7207 Diego Biurrun
Set the number of audio channels (default = 1).
616 5ee03c86 Fabrice Bellard
@item -an
617 4c5f7207 Diego Biurrun
Disable audio recording.
618 5ee03c86 Fabrice Bellard
@item -acodec codec
619 4c5f7207 Diego Biurrun
Force audio codec to @var{codec}. Use the @code{copy} special value to
620
specify that the raw codec data must be copied as is.
621 de62a89d Víctor Paesa
@item -newaudio
622 18fd519f Diego Biurrun
Add a new audio track to the output file. If you want to specify parameters,
623
do so before @code{-newaudio} (@code{-acodec}, @code{-ab}, etc..).
624 de62a89d Víctor Paesa
625 18fd519f Diego Biurrun
Mapping will be done automatically, if the number of output streams is equal to
626
the number of input streams, else it will pick the first one that matches. You
627 de62a89d Víctor Paesa
can override the mapping using @code{-map} as usual.
628
629
Example:
630
@example
631 5438308f Panagiotis Issaris
ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio
632 de62a89d Víctor Paesa
@end example
633 4386f941 Diego Biurrun
@item -alang code
634
Set the ISO 639 language code (3 letters) of the current audio stream.
635
@end table
636
637
@section Advanced Audio options:
638
639
@table @option
640
@item -atag fourcc/tag
641
Force audio tag/fourcc.
642
@item -absf bitstream filter
643
Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp", "mp3decomp".
644
@end table
645
646
@section Subtitle options:
647
648
@table @option
649
@item -scodec codec
650
Force subtitle codec ('copy' to copy stream).
651
@item -newsubtitle
652
Add a new subtitle stream to the current output stream.
653
@item -slang code
654
Set the ISO 639 language code (3 letters) of the current subtitle stream.
655 18bff752 Fabrice Bellard
@end table
656
657
@section Audio/Video grab options
658
659
@table @option
660
@item -vc channel
661 4c5f7207 Diego Biurrun
Set video grab channel (DV1394 only).
662 18bff752 Fabrice Bellard
@item -tvstd standard
663 4c5f7207 Diego Biurrun
Set television standard (NTSC, PAL (SECAM)).
664 cc58300e Ramiro Polla
@item -isync
665
Synchronize read on input.
666 18bff752 Fabrice Bellard
@end table
667
668
@section Advanced options
669
670
@table @option
671 e645a733 Benjamin Larsson
@item -map input stream id[:input stream id]
672
Set stream mapping from input streams to output streams.
673
Just enumerate the input streams in the order you want them in the output.
674
[input stream id] sets the (input) stream to sync against.
675 4386f941 Diego Biurrun
@item -map_meta_data outfile:infile
676
Set meta data information of outfile from infile.
677 18bff752 Fabrice Bellard
@item -debug
678 4c5f7207 Diego Biurrun
Print specific debug info.
679 115329f1 Diego Biurrun
@item -benchmark
680 4c5f7207 Diego Biurrun
Add timings for benchmarking.
681 4386f941 Diego Biurrun
@item -dump
682 4c5f7207 Diego Biurrun
Dump each input packet.
683 4386f941 Diego Biurrun
@item -hex
684
When dumping packets, also dump the payload.
685 18bff752 Fabrice Bellard
@item -bitexact
686 4c5f7207 Diego Biurrun
Only use bit exact algorithms (for codec testing).
687 18bff752 Fabrice Bellard
@item -ps size
688 4c5f7207 Diego Biurrun
Set packet size in bits.
689 5ee03c86 Fabrice Bellard
@item -re
690 4c5f7207 Diego Biurrun
Read input at native frame rate. Mainly used to simulate a grab device.
691 4386f941 Diego Biurrun
@item -loop_input
692 4c5f7207 Diego Biurrun
Loop over the input stream. Currently it works only for image
693
streams. This option is used for automatic FFserver testing.
694 8108551a Todd Kirby
@item -loop_output number_of_times
695 019c8838 Diego Biurrun
Repeatedly loop output for formats that support looping such as animated GIF
696 4c5f7207 Diego Biurrun
(0 will loop the output infinitely).
697 4386f941 Diego Biurrun
@item -threads count
698
Thread count.
699 c52e13f1 Benjamin Larsson
@item -vsync parameter
700 29c9183c Diego Biurrun
Video sync method. Video will be stretched/squeezed to match the timestamps,
701
it is done by duplicating and dropping frames. With -map you can select from
702
which stream the timestamps should be taken. You can leave either video or
703 c52e13f1 Benjamin Larsson
audio unchanged and sync the remaining stream(s) to the unchanged one.
704
@item -async samples_per_second
705 29c9183c Diego Biurrun
Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
706 c52e13f1 Benjamin Larsson
the parameter is the maximum samples per second by which the audio is changed.
707
-async 1 is a special case where only the start of the audio stream is corrected
708
without any later correction.
709 9181577c Fabrice Bellard
@end table
710 18bff752 Fabrice Bellard
711
@node FFmpeg formula evaluator
712
@section FFmpeg formula evaluator
713
714
When evaluating a rate control string, FFmpeg uses an internal formula
715 115329f1 Diego Biurrun
evaluator.
716 18bff752 Fabrice Bellard
717
The following binary operators are available: @code{+}, @code{-},
718
@code{*}, @code{/}, @code{^}.
719
720
The following unary operators are available: @code{+}, @code{-},
721
@code{(...)}.
722
723
The following functions are available:
724
@table @var
725
@item sinh(x)
726
@item cosh(x)
727
@item tanh(x)
728
@item sin(x)
729
@item cos(x)
730
@item tan(x)
731
@item exp(x)
732
@item log(x)
733
@item squish(x)
734
@item gauss(x)
735
@item abs(x)
736
@item max(x, y)
737
@item min(x, y)
738
@item gt(x, y)
739
@item lt(x, y)
740
@item eq(x, y)
741
@item bits2qp(bits)
742
@item qp2bits(qp)
743
@end table
744
745
The following constants are available:
746
@table @var
747
@item PI
748
@item E
749
@item iTex
750
@item pTex
751
@item tex
752
@item mv
753
@item fCode
754
@item iCount
755
@item mcVar
756
@item var
757
@item isI
758
@item isP
759
@item isB
760
@item avgQP
761
@item qComp
762
@item avgIITex
763
@item avgPITex
764
@item avgPPTex
765
@item avgBPTex
766
@item avgTex
767
@end table
768
769 e99c4e10 Fabrice Bellard
@c man end
770
771
@ignore
772
773
@setfilename ffmpeg
774
@settitle FFmpeg video converter
775
776
@c man begin SEEALSO
777 019c8838 Diego Biurrun
ffserver(1), ffplay(1) and the HTML documentation of @file{ffmpeg}.
778 e99c4e10 Fabrice Bellard
@c man end
779
780
@c man begin AUTHOR
781
Fabrice Bellard
782
@c man end
783
784
@end ignore
785 9181577c Fabrice Bellard
786
@section Protocols
787
788 4c5f7207 Diego Biurrun
The filename can be @file{-} to read from standard input or to write
789
to standard output.
790 9181577c Fabrice Bellard
791 4c5f7207 Diego Biurrun
FFmpeg also handles many protocols specified with an URL syntax.
792 9181577c Fabrice Bellard
793 4c5f7207 Diego Biurrun
Use 'ffmpeg -formats' to see a list of the supported protocols.
794 9181577c Fabrice Bellard
795 e99c4e10 Fabrice Bellard
The protocol @code{http:} is currently used only to communicate with
796 4c5f7207 Diego Biurrun
FFserver (see the FFserver documentation). When FFmpeg will be a
797 e99c4e10 Fabrice Bellard
video player it will also be used for streaming :-)
798 9181577c Fabrice Bellard
799
@chapter Tips
800
801
@itemize
802 4c5f7207 Diego Biurrun
@item For streaming at very low bitrate application, use a low frame rate
803
and a small GOP size. This is especially true for RealVideo where
804 e99c4e10 Fabrice Bellard
the Linux player does not seem to be very fast, so it can miss
805
frames. An example is:
806 9181577c Fabrice Bellard
807
@example
808 3c0ba870 Panagiotis Issaris
ffmpeg -g 3 -r 3 -t 10 -b 50k -s qcif -f rv10 /tmp/b.rm
809 9181577c Fabrice Bellard
@end example
810
811
@item  The parameter 'q' which is displayed while encoding is the current
812 4c5f7207 Diego Biurrun
quantizer. The value 1 indicates that a very good quality could
813
be achieved. The value 31 indicates the worst quality. If q=31 appears
814 e99c4e10 Fabrice Bellard
too often, it means that the encoder cannot compress enough to meet
815 4c5f7207 Diego Biurrun
your bitrate. You must either increase the bitrate, decrease the
816 e99c4e10 Fabrice Bellard
frame rate or decrease the frame size.
817 9181577c Fabrice Bellard
818
@item If your computer is not fast enough, you can speed up the
819 e99c4e10 Fabrice Bellard
compression at the expense of the compression ratio. You can use
820
'-me zero' to speed up motion estimation, and '-intra' to disable
821 4c5f7207 Diego Biurrun
motion estimation completely (you have only I-frames, which means it
822 e99c4e10 Fabrice Bellard
is about as good as JPEG compression).
823 9181577c Fabrice Bellard
824 4c5f7207 Diego Biurrun
@item To have very low audio bitrates, reduce the sampling frequency
825 019c8838 Diego Biurrun
(down to 22050 kHz for MPEG audio, 22050 or 11025 for AC3).
826 9181577c Fabrice Bellard
827
@item To have a constant quality (but a variable bitrate), use the option
828 e99c4e10 Fabrice Bellard
'-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
829
quality).
830 9181577c Fabrice Bellard
831
@item When converting video files, you can use the '-sameq' option which
832 4c5f7207 Diego Biurrun
uses the same quality factor in the encoder as in the decoder.
833
It allows almost lossless encoding.
834 9181577c Fabrice Bellard
835
@end itemize
836
837 47404f9f Diego Biurrun
838
@chapter external libraries
839
840
FFmpeg can be hooked up with a number of external libraries to add support
841 7bb93206 Diego Biurrun
for more formats. None of them are used by default, their use has to be
842
explicitly requested by passing the appropriate flags to @file{./configure}.
843 47404f9f Diego Biurrun
844
@section AMR
845
846
AMR comes in two different flavors, WB and NB. FFmpeg can make use of the
847 73508bc6 Diego Biurrun
AMR WB (floating-point mode) and the AMR NB (floating-point mode) reference
848
decoders and encoders.
849 47404f9f Diego Biurrun
850 73508bc6 Diego Biurrun
Go to @url{http://www.penguin.cz/~utx/amr} and follow the instructions for
851
installing the libraries. Then pass @code{--enable-amr-nb} and/or
852
@code{--enable-amr-wb} to configure to enable the libraries.
853 47404f9f Diego Biurrun
854
855 9181577c Fabrice Bellard
@chapter Supported File Formats and Codecs
856
857
You can use the @code{-formats} option to have an exhaustive list.
858
859
@section File Formats
860
861 6bf40f39 Philip Gladstone
FFmpeg supports the following file formats through the @code{libavformat}
862 0699d2fe Fabrice Bellard
library:
863 9181577c Fabrice Bellard
864 3fc9e78f Diego Biurrun
@multitable @columnfractions .4 .1 .1 .4
865 9181577c Fabrice Bellard
@item Supported File Format @tab Encoding @tab Decoding @tab Comments
866
@item MPEG audio @tab X @tab X
867 4c5f7207 Diego Biurrun
@item MPEG-1 systems @tab X  @tab  X
868 9181577c Fabrice Bellard
@tab muxed audio and video
869 4c5f7207 Diego Biurrun
@item MPEG-2 PS @tab X  @tab  X
870 9181577c Fabrice Bellard
@tab also known as @code{VOB} file
871 4c5f7207 Diego Biurrun
@item MPEG-2 TS @tab    @tab  X
872 9181577c Fabrice Bellard
@tab also known as DVB Transport Stream
873 115329f1 Diego Biurrun
@item ASF@tab X @tab X
874
@item AVI@tab X @tab X
875
@item WAV@tab X @tab X
876 9181577c Fabrice Bellard
@item Macromedia Flash@tab X @tab X
877 4c5f7207 Diego Biurrun
@tab Only embedded audio is decoded.
878 2eb5d024 Fabrice Bellard
@item FLV              @tab  X @tab X
879
@tab Macromedia Flash video files
880 115329f1 Diego Biurrun
@item Real Audio and Video @tab X @tab X
881
@item Raw AC3 @tab X  @tab  X
882
@item Raw MJPEG @tab X  @tab  X
883
@item Raw MPEG video @tab X  @tab  X
884
@item Raw PCM8/16 bits, mulaw/Alaw@tab X  @tab  X
885
@item Raw CRI ADX audio @tab X  @tab  X
886
@item Raw Shorten audio @tab    @tab  X
887
@item SUN AU format @tab X  @tab  X
888 7fe4c823 Alex Beregszaszi
@item NUT @tab X @tab X @tab NUT Open Container Format
889 115329f1 Diego Biurrun
@item QuickTime        @tab X @tab  X
890 4c5f7207 Diego Biurrun
@item MPEG-4           @tab X @tab  X
891
@tab MPEG-4 is a variant of QuickTime.
892 115329f1 Diego Biurrun
@item Raw MPEG4 video  @tab  X @tab  X
893 4fa1c4fa Roman Shaposhnik
@item DV               @tab  X @tab  X
894 701b603d Mike Melanson
@item 4xm              @tab    @tab X
895 4c5f7207 Diego Biurrun
@tab 4X Technologies format, used in some games.
896 4d3b1f8d Mike Melanson
@item Playstation STR  @tab    @tab X
897
@item Id RoQ           @tab    @tab X
898 4c5f7207 Diego Biurrun
@tab Used in Quake III, Jedi Knight 2, other computer games.
899 4d3b1f8d Mike Melanson
@item Interplay MVE    @tab    @tab X
900 4c5f7207 Diego Biurrun
@tab Format used in various Interplay computer games.
901 b17e9c99 Mike Melanson
@item WC3 Movie        @tab    @tab X
902 4c5f7207 Diego Biurrun
@tab Multimedia format used in Origin's Wing Commander III computer game.
903 2fdf638b Mike Melanson
@item Sega FILM/CPK    @tab    @tab X
904 4c5f7207 Diego Biurrun
@tab Used in many Sega Saturn console games.
905 2fdf638b Mike Melanson
@item Westwood Studios VQA/AUD  @tab    @tab X
906 4c5f7207 Diego Biurrun
@tab Multimedia formats used in Westwood Studios games.
907 4120a53a Mike Melanson
@item Id Cinematic (.cin) @tab    @tab X
908 4c5f7207 Diego Biurrun
@tab Used in Quake II.
909 42cad81a Mike Melanson
@item FLIC format      @tab    @tab X
910
@tab .fli/.flc files
911 da00f30e Mike Melanson
@item Sierra VMD       @tab    @tab X
912 4c5f7207 Diego Biurrun
@tab Used in Sierra CD-ROM games.
913 d08d7142 Mike Melanson
@item Sierra Online    @tab    @tab X
914 4c5f7207 Diego Biurrun
@tab .sol files used in Sierra Online games.
915 38088adf Mike Melanson
@item Matroska         @tab    @tab X
916 ad81a9fe Mike Melanson
@item Electronic Arts Multimedia    @tab    @tab X
917 4c5f7207 Diego Biurrun
@tab Used in various EA games; files have extensions like WVE and UV2.
918 353147ed Mike Melanson
@item Nullsoft Video (NSV) format @tab    @tab X
919 4accd1fd Måns Rullgård
@item ADTS AAC audio @tab X @tab X
920 ea395e8c Aurelien Jacobs
@item Creative VOC @tab X @tab X @tab Created for the Sound Blaster Pro.
921 4e114829 Mike Melanson
@item American Laser Games MM  @tab    @tab X
922
@tab Multimedia format used in games like Mad Dog McCree
923 26376701 Mike Melanson
@item AVS @tab    @tab X
924
@tab Multimedia format used by the Creature Shock game.
925 348efc18 Kostya Shishkov
@item Smacker @tab    @tab X
926
@tab Multimedia format used by many games.
927 d7a3a783 Baptiste Coudurier
@item GXF @tab  X @tab X
928
@tab General eXchange Format SMPTE 360M, used by Thomson Grass Valley playout servers.
929 dc56e0de Baptiste Coudurier
@item CIN @tab    @tab X
930
@tab Multimedia format used by Delphine Software games.
931 f3239539 Baptiste Coudurier
@item MXF @tab    @tab X
932
@tab Material eXchange Format SMPTE 377M, used by D-Cinema, broadcast industry.
933 29f86228 Baptiste Coudurier
@item SEQ @tab    @tab X
934
@tab Tiertex .seq files used in the DOS CDROM version of the game Flashback.
935 33a0dd37 Kostya Shishkov
@item DXA @tab    @tab X
936
@tab This format is used in non-Windows version of Feeble Files game and
937
different game cutscenes repacked for use with ScummVM.
938 efb0c399 Diego Biurrun
@item THP @tab    @tab X
939 d1e0d21f Marco Gerards
@tab Used on the Nintendo GameCube.
940 9a0ddd09 Anssi Hannula
@item C93 @tab    @tab X
941
@tab Used in the game Cyberia from Interplay.
942 1e6c6759 Nicholas Tung
@item Bethsoft VID @tab    @tab X
943
@tab Used in some games from Bethesda Softworks.
944 8e952e4d Anssi Hannula
@item CRYO APC @tab    @tab X
945
@tab Audio format used in some games by CRYO Interactive Entertainment.
946 353147ed Mike Melanson
@end multitable
947 9181577c Fabrice Bellard
948 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
949 9181577c Fabrice Bellard
950 0699d2fe Fabrice Bellard
@section Image Formats
951
952
FFmpeg can read and write images for each frame of a video sequence. The
953
following image formats are supported:
954
955 3fc9e78f Diego Biurrun
@multitable @columnfractions .4 .1 .1 .4
956 0699d2fe Fabrice Bellard
@item Supported Image Format @tab Encoding @tab Decoding @tab Comments
957 115329f1 Diego Biurrun
@item PGM, PPM     @tab X @tab X
958 4c5f7207 Diego Biurrun
@item PAM          @tab X @tab X @tab PAM is a PNM extension with alpha support.
959 2eb5d024 Fabrice Bellard
@item PGMYUV       @tab X @tab X @tab PGM with U and V components in YUV 4:2:0
960 4c5f7207 Diego Biurrun
@item JPEG         @tab X @tab X @tab Progressive JPEG is not supported.
961
@item .Y.U.V       @tab X @tab X @tab one raw file per component
962
@item animated GIF @tab X @tab X @tab Only uncompressed GIFs are generated.
963
@item PNG          @tab X @tab X @tab 2 bit and 4 bit/pixel not supported yet.
964 3689cf16 Kostya Shishkov
@item Targa        @tab   @tab X @tab Targa (.TGA) image format.
965 716222db Michael Niedermayer
@item TIFF         @tab X @tab X @tab YUV, JPEG and some extension is not supported yet.
966 6a91ec51 Mike Melanson
@item SGI          @tab X @tab X @tab SGI RGB image format
967 0699d2fe Fabrice Bellard
@end multitable
968
969 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
970 0699d2fe Fabrice Bellard
971 9181577c Fabrice Bellard
@section Video Codecs
972
973 3fc9e78f Diego Biurrun
@multitable @columnfractions .4 .1 .1 .4
974 9181577c Fabrice Bellard
@item Supported Codec @tab Encoding @tab Decoding @tab Comments
975 4c5f7207 Diego Biurrun
@item MPEG-1 video           @tab  X  @tab  X
976
@item MPEG-2 video           @tab  X  @tab  X
977 2bc5da7b Michael Niedermayer
@item MPEG-4                 @tab  X  @tab  X
978 9181577c Fabrice Bellard
@item MSMPEG4 V1             @tab  X  @tab  X
979
@item MSMPEG4 V2             @tab  X  @tab  X
980 2bc5da7b Michael Niedermayer
@item MSMPEG4 V3             @tab  X  @tab  X
981 9181577c Fabrice Bellard
@item WMV7                   @tab  X  @tab  X
982 4c5f7207 Diego Biurrun
@item WMV8                   @tab  X  @tab  X @tab not completely working
983 17a21f3c Diego Biurrun
@item WMV9                   @tab     @tab  X @tab not completely working
984
@item VC1                    @tab     @tab  X
985 b06b45c4 Mike Melanson
@item H.261                  @tab  X  @tab  X
986 4c5f7207 Diego Biurrun
@item H.263(+)               @tab  X  @tab  X @tab also known as RealVideo 1.0
987 b06b45c4 Mike Melanson
@item H.264                  @tab     @tab  X
988 e839a994 Diego Biurrun
@item RealVideo 1.0          @tab  X  @tab  X
989
@item RealVideo 2.0          @tab  X  @tab  X
990 115329f1 Diego Biurrun
@item MJPEG                  @tab  X  @tab  X
991 4c5f7207 Diego Biurrun
@item lossless MJPEG         @tab  X  @tab  X
992 26d6d032 Benjamin Larsson
@item JPEG-LS                @tab  X  @tab  X @tab fourcc: MJLS, lossless and near-lossless is supported
993 d6896c49 Alex Beregszaszi
@item Apple MJPEG-B          @tab     @tab  X
994
@item Sunplus MJPEG          @tab     @tab  X @tab fourcc: SP5X
995 115329f1 Diego Biurrun
@item DV                     @tab  X  @tab  X
996 4c5f7207 Diego Biurrun
@item HuffYUV                @tab  X  @tab  X
997
@item FFmpeg Video 1         @tab  X  @tab  X @tab experimental lossless codec (fourcc: FFV1)
998
@item FFmpeg Snow            @tab  X  @tab  X @tab experimental wavelet codec (fourcc: SNOW)
999 701b603d Mike Melanson
@item Asus v1                @tab  X  @tab  X @tab fourcc: ASV1
1000 4d3b1f8d Mike Melanson
@item Asus v2                @tab  X  @tab  X @tab fourcc: ASV2
1001 701b603d Mike Melanson
@item Creative YUV           @tab     @tab  X @tab fourcc: CYUV
1002 d2bfadc0 Mike Melanson
@item Sorenson Video 1       @tab  X  @tab  X @tab fourcc: SVQ1
1003 701b603d Mike Melanson
@item Sorenson Video 3       @tab     @tab  X @tab fourcc: SVQ3
1004
@item On2 VP3                @tab     @tab  X @tab still experimental
1005 5ce117c3 Aurelien Jacobs
@item On2 VP5                @tab     @tab  X @tab fourcc: VP50
1006 9110a0e3 Aurelien Jacobs
@item On2 VP6                @tab     @tab  X @tab fourcc: VP60,VP61,VP62
1007 150d2772 Diego Biurrun
@item Theora                 @tab  X  @tab  X @tab still experimental
1008 cdb2c1ca Sebastian Jedruszkiewicz
@item Intel Indeo 3          @tab     @tab  X
1009 9303d49c Alex Beregszaszi
@item FLV                    @tab  X  @tab  X @tab Sorenson H.263 used in Flash
1010 15419468 Benjamin Larsson
@item Flash Screen Video     @tab  X  @tab  X @tab fourcc: FSV1
1011 4d3b1f8d Mike Melanson
@item ATI VCR1               @tab     @tab  X @tab fourcc: VCR1
1012 7fe4c823 Alex Beregszaszi
@item ATI VCR2               @tab     @tab  X @tab fourcc: VCR2
1013 4d3b1f8d Mike Melanson
@item Cirrus Logic AccuPak   @tab     @tab  X @tab fourcc: CLJR
1014 4c5f7207 Diego Biurrun
@item 4X Video               @tab     @tab  X @tab Used in certain computer games.
1015 115329f1 Diego Biurrun
@item Sony Playstation MDEC  @tab     @tab  X
1016 4c5f7207 Diego Biurrun
@item Id RoQ                 @tab     @tab  X @tab Used in Quake III, Jedi Knight 2, other computer games.
1017
@item Xan/WC3                @tab     @tab  X @tab Used in Wing Commander III .MVE files.
1018
@item Interplay Video        @tab     @tab  X @tab Used in Interplay .MVE files.
1019 070ed1bc Mike Melanson
@item Apple Animation        @tab     @tab  X @tab fourcc: 'rle '
1020 42cad81a Mike Melanson
@item Apple Graphics         @tab     @tab  X @tab fourcc: 'smc '
1021 2fdf638b Mike Melanson
@item Apple Video            @tab     @tab  X @tab fourcc: rpza
1022 d08d7142 Mike Melanson
@item Apple QuickDraw        @tab     @tab  X @tab fourcc: qdrw
1023 2fdf638b Mike Melanson
@item Cinepak                @tab     @tab  X
1024
@item Microsoft RLE          @tab     @tab  X
1025
@item Microsoft Video-1      @tab     @tab  X
1026 4120a53a Mike Melanson
@item Westwood VQA           @tab     @tab  X
1027 4c5f7207 Diego Biurrun
@item Id Cinematic Video     @tab     @tab  X @tab Used in Quake II.
1028 1dc1ed99 Roberto Togni
@item Planar RGB             @tab     @tab  X @tab fourcc: 8BPS
1029 42cad81a Mike Melanson
@item FLIC video             @tab     @tab  X
1030 9a4117d5 Mike Melanson
@item Duck TrueMotion v1     @tab     @tab  X @tab fourcc: DUCK
1031 dce76c20 Mike Melanson
@item Duck TrueMotion v2     @tab     @tab  X @tab fourcc: TM20
1032 4c5f7207 Diego Biurrun
@item VMD Video              @tab     @tab  X @tab Used in Sierra VMD files.
1033 a273bbfb Roberto Togni
@item MSZH                   @tab     @tab  X @tab Part of LCL
1034
@item ZLIB                   @tab  X  @tab  X @tab Part of LCL, encoder experimental
1035 9d53d58e Mike Melanson
@item TechSmith Camtasia     @tab     @tab  X @tab fourcc: TSCC
1036 d0a0bbd2 Mike Melanson
@item IBM Ultimotion         @tab     @tab  X @tab fourcc: ULTI
1037 ab711b3c Mike Melanson
@item Miro VideoXL           @tab     @tab  X @tab fourcc: VIXL
1038 acfd8f0f Mike Melanson
@item QPEG                   @tab     @tab  X @tab fourccs: QPEG, Q1.0, Q1.1
1039 115329f1 Diego Biurrun
@item LOCO                   @tab     @tab  X @tab
1040
@item Winnov WNV1            @tab     @tab  X @tab
1041 589f8220 Mike Melanson
@item Autodesk Animator Studio Codec  @tab     @tab  X @tab fourcc: AASC
1042 115329f1 Diego Biurrun
@item Fraps FPS1             @tab     @tab  X @tab
1043 2b6c1d80 Diego Biurrun
@item CamStudio              @tab     @tab  X @tab fourcc: CSCD
1044 4e114829 Mike Melanson
@item American Laser Games Video  @tab    @tab X @tab Used in games like Mad Dog McCree
1045 f48d6e1b Kostya Shishkov
@item ZMBV                   @tab   X @tab  X @tab Encoder works only on PAL8
1046 26376701 Mike Melanson
@item AVS Video              @tab     @tab  X @tab Video encoding used by the Creature Shock game.
1047 348efc18 Kostya Shishkov
@item Smacker Video          @tab     @tab  X @tab Video encoding used in Smacker.
1048 dfca23e3 Reimar Döffinger
@item RTjpeg                 @tab     @tab  X @tab Video encoding used in NuppelVideo files.
1049 fd7b1991 Kostya Shishkov
@item KMVC                   @tab     @tab  X @tab Codec used in Worms games.
1050 eb57c889 Kostya Shishkov
@item VMware Video           @tab     @tab  X @tab Codec used in videos captured by VMware.
1051 dc56e0de Baptiste Coudurier
@item Cin Video              @tab     @tab  X @tab Codec used in Delphine Software games.
1052 29f86228 Baptiste Coudurier
@item Tiertex Seq Video      @tab     @tab  X @tab Codec used in DOS CDROM FlashBack game.
1053 33a0dd37 Kostya Shishkov
@item DXA Video              @tab     @tab  X @tab Codec originally used in Feeble Files game.
1054 52b6bad2 Baptiste Coudurier
@item AVID DNxHD             @tab     @tab  X @tab aka SMPTE VC3
1055 9a0ddd09 Anssi Hannula
@item C93 Video              @tab     @tab  X @tab Codec used in Cyberia game.
1056 8845202e Diego Biurrun
@item THP                    @tab     @tab  X @tab Used on the Nintendo GameCube.
1057 1e6c6759 Nicholas Tung
@item Bethsoft VID           @tab     @tab  X @tab Used in some games from Bethesda Softworks.
1058 9181577c Fabrice Bellard
@end multitable
1059
1060 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
1061 9181577c Fabrice Bellard
1062
@section Audio Codecs
1063
1064
@multitable @columnfractions .4 .1 .1 .1 .7
1065
@item Supported Codec @tab Encoding @tab Decoding @tab Comments
1066 115329f1 Diego Biurrun
@item MPEG audio layer 2     @tab  IX  @tab  IX
1067 9181577c Fabrice Bellard
@item MPEG audio layer 1/3   @tab IX   @tab  IX
1068 4c5f7207 Diego Biurrun
@tab MP3 encoding is supported through the external library LAME.
1069 37776c3b Benjamin Larsson
@item AC3                    @tab  IX  @tab  IX
1070 4c5f7207 Diego Biurrun
@tab liba52 is used internally for decoding.
1071 34d7008d Philip Gladstone
@item Vorbis                 @tab  X   @tab  X
1072 74882049 Diego Biurrun
@item WMA V1/V2              @tab X    @tab X
1073 f6fa7a6c Benjamin Larsson
@item AAC                    @tab X    @tab X
1074 4c5f7207 Diego Biurrun
@tab Supported through the external library libfaac/libfaad.
1075 d4c3c5a6 Michael Niedermayer
@item Microsoft ADPCM        @tab X    @tab X
1076 4d3b1f8d Mike Melanson
@item MS IMA ADPCM           @tab X    @tab X
1077
@item QT IMA ADPCM           @tab      @tab X
1078
@item 4X IMA ADPCM           @tab      @tab X
1079 d4e437df Roman Shaposhnik
@item G.726  ADPCM           @tab X    @tab X
1080 b17e9c99 Mike Melanson
@item Duck DK3 IMA ADPCM     @tab      @tab X
1081 4c5f7207 Diego Biurrun
@tab Used in some Sega Saturn console games.
1082 b17e9c99 Mike Melanson
@item Duck DK4 IMA ADPCM     @tab      @tab X
1083 4c5f7207 Diego Biurrun
@tab Used in some Sega Saturn console games.
1084 2fdf638b Mike Melanson
@item Westwood Studios IMA ADPCM @tab      @tab X
1085 4c5f7207 Diego Biurrun
@tab Used in Westwood Studios games like Command and Conquer.
1086 7d8379f2 Mike Melanson
@item SMJPEG IMA ADPCM       @tab      @tab X
1087 4c5f7207 Diego Biurrun
@tab Used in certain Loki game ports.
1088 42cad81a Mike Melanson
@item CD-ROM XA ADPCM        @tab      @tab X
1089
@item CRI ADX ADPCM          @tab X    @tab X
1090 4c5f7207 Diego Biurrun
@tab Used in Sega Dreamcast games.
1091 7d8379f2 Mike Melanson
@item Electronic Arts ADPCM  @tab      @tab X
1092 4c5f7207 Diego Biurrun
@tab Used in various EA titles.
1093 b3bfb299 Mike Melanson
@item Creative ADPCM         @tab      @tab X
1094 2433f24f Aurelien Jacobs
@tab 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
1095 8845202e Diego Biurrun
@item THP ADPCM              @tab      @tab X
1096
@tab Used on the Nintendo GameCube.
1097 2eb5d024 Fabrice Bellard
@item RA144                  @tab      @tab X
1098
@tab Real 14400 bit/s codec
1099
@item RA288                  @tab      @tab X
1100
@tab Real 28800 bit/s codec
1101 37776c3b Benjamin Larsson
@item RADnet                 @tab X    @tab IX
1102 4c5f7207 Diego Biurrun
@tab Real low bitrate AC3 codec, liba52 is used for decoding.
1103 2eb5d024 Fabrice Bellard
@item AMR-NB                 @tab X    @tab X
1104 4c5f7207 Diego Biurrun
@tab Supported through an external library.
1105 d663a1fd Michael Niedermayer
@item AMR-WB                 @tab X    @tab X
1106 4c5f7207 Diego Biurrun
@tab Supported through an external library.
1107 2eb5d024 Fabrice Bellard
@item DV audio               @tab      @tab X
1108 4d3b1f8d Mike Melanson
@item Id RoQ DPCM            @tab      @tab X
1109 4c5f7207 Diego Biurrun
@tab Used in Quake III, Jedi Knight 2, other computer games.
1110 4d3b1f8d Mike Melanson
@item Interplay MVE DPCM     @tab      @tab X
1111 4c5f7207 Diego Biurrun
@tab Used in various Interplay computer games.
1112 b17e9c99 Mike Melanson
@item Xan DPCM               @tab      @tab X
1113 4c5f7207 Diego Biurrun
@tab Used in Origin's Wing Commander IV AVI files.
1114 d08d7142 Mike Melanson
@item Sierra Online DPCM     @tab      @tab X
1115 4c5f7207 Diego Biurrun
@tab Used in Sierra Online game audio files.
1116 d6896c49 Alex Beregszaszi
@item Apple MACE 3           @tab      @tab X
1117
@item Apple MACE 6           @tab      @tab X
1118 bfd9a00f Justin Ruggles
@item FLAC lossless audio    @tab X    @tab X
1119 13dfd2b9 Mike Melanson
@item Shorten lossless audio @tab      @tab X
1120 f770ee03 Mike Melanson
@item Apple lossless audio   @tab      @tab X
1121
@tab QuickTime fourcc 'alac'
1122 33a4d8b1 Alex Beregszaszi
@item FFmpeg Sonic           @tab X    @tab X
1123 4c5f7207 Diego Biurrun
@tab experimental lossy/lossless codec
1124 d9b1c197 Roberto Togni
@item Qdesign QDM2           @tab      @tab X
1125
@tab there are still some distortions
1126 440e7988 Roberto Togni
@item Real COOK              @tab      @tab X
1127
@tab All versions except 5.1 are supported
1128 e839a994 Diego Biurrun
@item DSP Group TrueSpeech   @tab      @tab X
1129 3dc411c0 Alex Beregszaszi
@item True Audio (TTA)       @tab      @tab X
1130 348efc18 Kostya Shishkov
@item Smacker Audio          @tab      @tab X
1131 730581f3 Kostya Shishkov
@item WavPack Audio          @tab      @tab X
1132 dc56e0de Baptiste Coudurier
@item Cin Audio              @tab      @tab X
1133
@tab Codec used in Delphine Software games.
1134 84ed36da Kostya Shishkov
@item Intel Music Coder      @tab      @tab X
1135 185c7b6b Kostya Shishkov
@item Musepack               @tab      @tab X
1136
@tab Only SV7 is supported
1137 01ca9ac3 Kostya Shishkov
@item DT$ Coherent Audio     @tab      @tab X
1138 10e26bc7 Benjamin Larsson
@item ATRAC 3                @tab      @tab X
1139 9181577c Fabrice Bellard
@end multitable
1140
1141 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
1142 9181577c Fabrice Bellard
1143 4c5f7207 Diego Biurrun
@code{I} means that an integer-only version is available, too (ensures high
1144
performance on systems without hardware floating point support).
1145 9181577c Fabrice Bellard
1146 47d944d2 Fabrice Bellard
@chapter Platform Specific information
1147
1148
@section BSD
1149
1150 21d1cb12 Diego Biurrun
BSD make will not build FFmpeg, you need to install and use GNU Make
1151
(@file{gmake}).
1152
1153 47d944d2 Fabrice Bellard
@section Windows
1154
1155 e2ef53fc Diego Biurrun
To get help and instructions for using FFmpeg under Windows, check out
1156
the FFmpeg Windows Help Forum at
1157
@url{http://arrozcru.no-ip.org/ffmpeg/}.
1158
1159 b030b284 Fabrice Bellard
@subsection Native Windows compilation
1160
1161
@itemize
1162
@item Install the current versions of MSYS and MinGW from
1163
@url{http://www.mingw.org/}. You can find detailed installation
1164
instructions in the download section and the FAQ.
1165
1166 f2d64c19 Alex Beregszaszi
NOTE: Use at least bash 3.1. Older versions are known to be failing on the
1167
configure script.
1168
1169 4c5f7207 Diego Biurrun
@item If you want to test the FFplay, also download
1170 50f52fcd Fabrice Bellard
the MinGW development library of SDL 1.2.x
1171
(@file{SDL-devel-1.2.x-mingw32.tar.gz}) from
1172 4c5f7207 Diego Biurrun
@url{http://www.libsdl.org}. Unpack it in a temporary directory, and
1173 50f52fcd Fabrice Bellard
unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool
1174 988a9f9e Fabrice Bellard
directory. Edit the @file{sdl-config} script so that it gives the
1175
correct SDL directory when invoked.
1176 50f52fcd Fabrice Bellard
1177 e926e391 Diego Biurrun
@item Extract the current version of FFmpeg.
1178 115329f1 Diego Biurrun
1179 b030b284 Fabrice Bellard
@item Start the MSYS shell (file @file{msys.bat}).
1180
1181 4c5f7207 Diego Biurrun
@item Change to the FFmpeg directory and follow
1182
 the instructions of how to compile FFmpeg (file
1183 50f52fcd Fabrice Bellard
@file{INSTALL}). Usually, launching @file{./configure} and @file{make}
1184
suffices. If you have problems using SDL, verify that
1185
@file{sdl-config} can be launched from the MSYS command line.
1186
1187 4c5f7207 Diego Biurrun
@item You can install FFmpeg in @file{Program Files/FFmpeg} by typing
1188 ce10ff8e Diego Biurrun
@file{make install}. Do not forget to copy @file{SDL.dll} to the place
1189 4c5f7207 Diego Biurrun
you launch @file{ffplay} from.
1190 50f52fcd Fabrice Bellard
1191 b030b284 Fabrice Bellard
@end itemize
1192
1193 115329f1 Diego Biurrun
Notes:
1194 988a9f9e Fabrice Bellard
@itemize
1195 50f52fcd Fabrice Bellard
1196 988a9f9e Fabrice Bellard
@item The target @file{make wininstaller} can be used to create a
1197
Nullsoft based Windows installer for FFmpeg and FFplay. @file{SDL.dll}
1198 4c5f7207 Diego Biurrun
must be copied to the FFmpeg directory in order to build the
1199 988a9f9e Fabrice Bellard
installer.
1200
1201 4c5f7207 Diego Biurrun
@item By using @code{./configure --enable-shared} when configuring FFmpeg,
1202 988a9f9e Fabrice Bellard
you can build @file{avcodec.dll} and @file{avformat.dll}. With
1203
@code{make install} you install the FFmpeg DLLs and the associated
1204 115329f1 Diego Biurrun
headers in @file{Program Files/FFmpeg}.
1205 988a9f9e Fabrice Bellard
1206 4c5f7207 Diego Biurrun
@item Visual C++ compatibility: If you used @code{./configure --enable-shared}
1207
when configuring FFmpeg, FFmpeg tries to use the Microsoft Visual
1208 988a9f9e Fabrice Bellard
C++ @code{lib} tool to build @code{avcodec.lib} and
1209 4c5f7207 Diego Biurrun
@code{avformat.lib}. With these libraries you can link your Visual C++
1210 be0efc0c Martin Boehme
code directly with the FFmpeg DLLs (see below).
1211 988a9f9e Fabrice Bellard
1212
@end itemize
1213 b030b284 Fabrice Bellard
1214 be0efc0c Martin Boehme
@subsection Visual C++ compatibility
1215
1216
FFmpeg will not compile under Visual C++ -- and it has too many
1217
dependencies on the GCC compiler to make a port viable. However,
1218
if you want to use the FFmpeg libraries in your own applications,
1219
you can still compile those applications using Visual C++. An
1220
important restriction to this is that you have to use the
1221
dynamically linked versions of the FFmpeg libraries (i.e. the
1222
DLLs), and you have to make sure that Visual-C++-compatible
1223
import libraries are created during the FFmpeg build process.
1224
1225
This description of how to use the FFmpeg libraries with Visual C++ is
1226
based on Visual C++ 2005 Express Edition Beta 2. If you have a different
1227
version, you might have to modify the procedures slightly.
1228
1229
Here are the step-by-step instructions for building the FFmpeg libraries
1230
so they can be used with Visual C++:
1231
1232
@enumerate
1233
1234 ce10ff8e Diego Biurrun
@item Install Visual C++ (if you have not done so already).
1235 be0efc0c Martin Boehme
1236
@item Install MinGW and MSYS as described above.
1237
1238
@item Add a call to @file{vcvars32.bat} (which sets up the environment
1239
variables for the Visual C++ tools) as the first line of
1240
@file{msys.bat}. The standard location for @file{vcvars32.bat} is
1241
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat},
1242
and the standard location for @file{msys.bat} is
1243
@file{C:\msys\1.0\msys.bat}. If this corresponds to your setup, add the
1244
following line as the first line of @file{msys.bat}:
1245
1246
@code{call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"}
1247
1248
@item Start the MSYS shell (file @file{msys.bat}) and type @code{link.exe}.
1249
If you get a help message with the command line options of @code{link.exe},
1250
this means your environment variables are set up correctly, the
1251
Microsoft linker is on the path and will be used by FFmpeg to
1252
create Visual-C++-compatible import libraries.
1253
1254 e926e391 Diego Biurrun
@item Extract the current version of FFmpeg and change to the FFmpeg directory.
1255 be0efc0c Martin Boehme
1256
@item Type the command
1257 51d8321d Diego Biurrun
@code{./configure --enable-shared --disable-static --enable-memalign-hack}
1258 ce10ff8e Diego Biurrun
to configure and, if that did not produce any errors,
1259 51d8321d Diego Biurrun
type @code{make} to build FFmpeg.
1260 be0efc0c Martin Boehme
1261
@item The subdirectories @file{libavformat}, @file{libavcodec}, and
1262
@file{libavutil} should now contain the files @file{avformat.dll},
1263
@file{avformat.lib}, @file{avcodec.dll}, @file{avcodec.lib},
1264
@file{avutil.dll}, and @file{avutil.lib}, respectively. Copy the three
1265
DLLs to your System32 directory (typically @file{C:\Windows\System32}).
1266
1267
@end enumerate
1268
1269
And here is how to use these libraries with Visual C++:
1270
1271
@enumerate
1272
1273
@item Create a new console application ("File / New / Project") and then
1274
select "Win32 Console Application". On the appropriate page of the
1275
Application Wizard, uncheck the "Precompiled headers" option.
1276
1277
@item Write the source code for your application, or, for testing, just
1278
copy the code from an existing sample application into the source file
1279
that Visual C++ has already created for you. (Note that your source
1280 ce10ff8e Diego Biurrun
filehas to have a @code{.cpp} extension; otherwise, Visual C++ will not
1281
compile the FFmpeg headers correctly because in C mode, it does not
1282 be0efc0c Martin Boehme
recognize the @code{inline} keyword.)  For example, you can copy
1283
@file{output_example.c} from the FFmpeg distribution (but you will
1284
have to make minor modifications so the code will compile under
1285
C++, see below).
1286
1287
@item Open the "Project / Properties" dialog box. In the "Configuration"
1288
combo box, select "All Configurations" so that the changes you make will
1289
affect both debug and release builds. In the tree view on the left hand
1290
side, select "C/C++ / General", then edit the "Additional Include
1291
Directories" setting to contain the complete paths to the
1292
@file{libavformat}, @file{libavcodec}, and @file{libavutil}
1293
subdirectories of your FFmpeg directory. Note that the directories have
1294
to be separated using semicolons. Now select "Linker / General" from the
1295
tree view and edit the "Additional Library Directories" setting to
1296
contain the same three directories.
1297
1298
@item Still in the "Project / Properties" dialog box, select "Linker / Input"
1299
from the tree view, then add the files @file{avformat.lib},
1300
@file{avcodec.lib}, and @file{avutil.lib} to the end of the "Additional
1301
Dependencies". Note that the names of the libraries have to be separated
1302
using spaces.
1303
1304 765c3440 Fredrik Orderud
@item Now, select "C/C++ / Code Generation" from the tree view. Select
1305 be0efc0c Martin Boehme
"Debug" in the "Configuration" combo box. Make sure that "Runtime
1306
Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in
1307
the "Configuration" combo box and make sure that "Runtime Library" is
1308
set to "Multi-threaded DLL".
1309
1310
@item Click "OK" to close the "Project / Properties" dialog box and build
1311
the application. Hopefully, it should compile and run cleanly. If you
1312
used @file{output_example.c} as your sample application, you will get a
1313
few compiler errors, but they are easy to fix. The first type of error
1314 ce10ff8e Diego Biurrun
occurs because Visual C++ does not allow an @code{int} to be converted to
1315 be0efc0c Martin Boehme
an @code{enum} without a cast. To solve the problem, insert the required
1316
casts (this error occurs once for a @code{CodecID} and once for a
1317
@code{CodecType}).  The second type of error occurs because C++ requires
1318
the return value of @code{malloc} to be cast to the exact type of the
1319
pointer it is being assigned to. Visual C++ will complain that, for
1320
example, @code{(void *)} is being assigned to @code{(uint8_t *)} without
1321
an explicit cast. So insert an explicit cast in these places to silence
1322
the compiler. The third type of error occurs because the @code{snprintf}
1323
library function is called @code{_snprintf} under Visual C++.  So just
1324
add an underscore to fix the problem. With these changes,
1325
@file{output_example.c} should compile under Visual C++, and the
1326
resulting executable should produce valid video files.
1327
1328
@end enumerate
1329
1330 b030b284 Fabrice Bellard
@subsection Cross compilation for Windows with Linux
1331
1332
You must use the MinGW cross compilation tools available at
1333
@url{http://www.mingw.org/}.
1334
1335 4c5f7207 Diego Biurrun
Then configure FFmpeg with the following options:
1336 b030b284 Fabrice Bellard
@example
1337 6b74787b Víctor Paesa
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
1338 b030b284 Fabrice Bellard
@end example
1339 019c8838 Diego Biurrun
(you can change the cross-prefix according to the prefix chosen for the
1340 b030b284 Fabrice Bellard
MinGW tools).
1341
1342 4c5f7207 Diego Biurrun
Then you can easily test FFmpeg with Wine
1343 b030b284 Fabrice Bellard
(@url{http://www.winehq.com/}).
1344
1345 30aee296 Diego Biurrun
@subsection Compilation under Cygwin
1346
1347
Cygwin works very much like Unix.
1348
1349
Just install your Cygwin with all the "Base" packages, plus the
1350
following "Devel" ones:
1351
@example
1352
binutils, gcc-core, make, subversion
1353
@end example
1354
1355
Do not install binutils-20060709-1 (they are buggy on shared builds);
1356
use binutils-20050610-1 instead.
1357
1358
Then run
1359
1360
@example
1361
./configure --enable-static --disable-shared
1362
@end example
1363
1364
to make a static build or
1365
1366
@example
1367
./configure --enable-shared --disable-static
1368
@end example
1369
1370
to build shared libraries.
1371
1372
If you want to build FFmpeg with additional libraries, download Cygwin
1373
"Devel" packages for Ogg and Vorbis from any Cygwin packages repository
1374
and/or SDL, xvid, faac, faad2 packages from Cygwin Ports,
1375
(@url{http://cygwinports.dotsrc.org/}).
1376
1377
@subsection Crosscompilation for Windows under Cygwin
1378
1379 ce10ff8e Diego Biurrun
With Cygwin you can create Windows binaries that do not need the cygwin1.dll.
1380 30aee296 Diego Biurrun
1381
Just install your Cygwin as explained before, plus these additional
1382
"Devel" packages:
1383
@example
1384
gcc-mingw-core, mingw-runtime, mingw-zlib
1385
@end example
1386
1387
and add some special flags to your configure invocation.
1388
1389
For a static build run
1390
@example
1391 6b74787b Víctor Paesa
./configure --target-os=mingw32 --enable-memalign-hack --enable-static --disable-shared --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
1392 30aee296 Diego Biurrun
@end example
1393
1394
and for a build with shared libraries
1395
@example
1396 6b74787b Víctor Paesa
./configure --target-os=mingw32 --enable-memalign-hack --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
1397 30aee296 Diego Biurrun
@end example
1398
1399 47d944d2 Fabrice Bellard
@section BeOS
1400
1401
The configure script should guess the configuration itself.
1402
Networking support is currently not finished.
1403
errno issues fixed by Andrew Bachmann.
1404
1405
Old stuff:
1406
1407 7dd611c9 François Revol
François Revol - revol at free dot fr - April 2002
1408 47d944d2 Fabrice Bellard
1409 115329f1 Diego Biurrun
The configure script should guess the configuration itself,
1410 ce10ff8e Diego Biurrun
however I still did not test building on the net_server version of BeOS.
1411 47d944d2 Fabrice Bellard
1412 4c5f7207 Diego Biurrun
FFserver is broken (needs poll() implementation).
1413 47d944d2 Fabrice Bellard
1414 4c5f7207 Diego Biurrun
There are still issues with errno codes, which are negative in BeOS, and
1415 115329f1 Diego Biurrun
that FFmpeg negates when returning. This ends up turning errors into
1416 47d944d2 Fabrice Bellard
valid results, then crashes.
1417
(To be fixed)
1418
1419 34d7008d Philip Gladstone
@chapter Developers Guide
1420 9181577c Fabrice Bellard
1421
@section API
1422 a0b72f90 Diego Biurrun
@itemize @bullet
1423 9181577c Fabrice Bellard
@item libavcodec is the library containing the codecs (both encoding and
1424 4c5f7207 Diego Biurrun
decoding). Look at @file{libavcodec/apiexample.c} to see how to use it.
1425 9181577c Fabrice Bellard
1426 4c5f7207 Diego Biurrun
@item libavformat is the library containing the file format handling (mux and
1427
demux code for several formats). Look at @file{ffplay.c} to use it in a
1428 a93b9dba Fabrice Bellard
player. See @file{output_example.c} to use it to generate audio or video
1429
streams.
1430
1431 9181577c Fabrice Bellard
@end itemize
1432
1433
@section Integrating libavcodec or libavformat in your program
1434
1435
You can integrate all the source code of the libraries to link them
1436
statically to avoid any version problem. All you need is to provide a
1437
'config.mak' and a 'config.h' in the parent directory. See the defines
1438
generated by ./configure to understand what is needed.
1439
1440
You can use libavcodec or libavformat in your commercial program, but
1441
@emph{any patch you make must be published}. The best way to proceed is
1442 4c5f7207 Diego Biurrun
to send your patches to the FFmpeg mailing list.
1443 9181577c Fabrice Bellard
1444 80d1c272 Michael Niedermayer
@node Coding Rules
1445 9181577c Fabrice Bellard
@section Coding Rules
1446
1447 4c5f7207 Diego Biurrun
FFmpeg is programmed in the ISO C90 language with a few additional
1448 cb6e87c1 Falk Hüffner
features from ISO C99, namely:
1449
@itemize @bullet
1450
@item
1451
the @samp{inline} keyword;
1452
@item
1453
@samp{//} comments;
1454
@item
1455
designated struct initializers (@samp{struct s x = @{ .i = 17 @};})
1456
@item
1457 114afa9c Diego Biurrun
compound literals (@samp{x = (struct s) @{ 17, 23 @};})
1458 cb6e87c1 Falk Hüffner
@end itemize
1459
1460 ce10ff8e Diego Biurrun
These features are supported by all compilers we care about, so we will not
1461
accept patches to remove their use unless they absolutely do not impair
1462 cb6e87c1 Falk Hüffner
clarity and performance.
1463
1464 4c5f7207 Diego Biurrun
All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also
1465 cb6e87c1 Falk Hüffner
compiles with several other compilers, such as the Compaq ccc compiler
1466
or Sun Studio 9, and we would like to keep it that way unless it would
1467 ce10ff8e Diego Biurrun
be exceedingly involved. To ensure compatibility, please do not use any
1468 4c5f7207 Diego Biurrun
additional C99 features or GCC extensions. Especially watch out for:
1469 cb6e87c1 Falk Hüffner
@itemize @bullet
1470
@item
1471
mixing statements and declarations;
1472
@item
1473
@samp{long long} (use @samp{int64_t} instead);
1474
@item
1475
@samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar;
1476
@item
1477 019c8838 Diego Biurrun
GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}).
1478 cb6e87c1 Falk Hüffner
@end itemize
1479 9181577c Fabrice Bellard
1480 53862e0f Diego Biurrun
Indent size is 4.
1481 b86e38a0 Aurelien Jacobs
The presentation is the one specified by 'indent -i4 -kr -nut'.
1482 53862e0f Diego Biurrun
The TAB character is forbidden outside of Makefiles as is any
1483
form of trailing whitespace. Commits containing either will be
1484 1c1b5a40 Diego Biurrun
rejected by the Subversion repository.
1485 9181577c Fabrice Bellard
1486 4c5f7207 Diego Biurrun
Main priority in FFmpeg is simplicity and small code size (=less
1487 9181577c Fabrice Bellard
bugs).
1488
1489 4c5f7207 Diego Biurrun
Comments: Use the JavaDoc/Doxygen
1490
format (see examples below) so that code documentation
1491
can be generated automatically. All nontrivial functions should have a comment
1492 ce10ff8e Diego Biurrun
above them explaining what the function does, even if it is just one sentence.
1493 4c5f7207 Diego Biurrun
All structures and their member variables should be documented, too.
1494 f4888b83 Michael Niedermayer
@example
1495
/**
1496 2185824b Måns Rullgård
 * @@file mpeg.c
1497
 * MPEG codec.
1498
 * @@author ...
1499
 */
1500 f4888b83 Michael Niedermayer
1501
/**
1502 2185824b Måns Rullgård
 * Summary sentence.
1503
 * more text ...
1504
 * ...
1505
 */
1506 114afa9c Diego Biurrun
typedef struct Foobar@{
1507 2185824b Måns Rullgård
    int var1; /**< var1 description */
1508
    int var2; ///< var2 description
1509
    /** var3 description */
1510
    int var3;
1511 114afa9c Diego Biurrun
@} Foobar;
1512 f4888b83 Michael Niedermayer
1513
/**
1514 2185824b Måns Rullgård
 * Summary sentence.
1515
 * more text ...
1516
 * ...
1517
 * @@param my_parameter description of my_parameter
1518
 * @@return return value description
1519
 */
1520 f4888b83 Michael Niedermayer
int myfunc(int my_parameter)
1521
...
1522
@end example
1523 9181577c Fabrice Bellard
1524 115329f1 Diego Biurrun
fprintf and printf are forbidden in libavformat and libavcodec,
1525 36d9b4e8 Michael Niedermayer
please use av_log() instead.
1526
1527 1c1b5a40 Diego Biurrun
@section Development Policy
1528 7a57b90c Michael Niedermayer
1529
@enumerate
1530 115329f1 Diego Biurrun
@item
1531 7a57b90c Michael Niedermayer
   You must not commit code which breaks FFmpeg! (Meaning unfinished but
1532 4c5f7207 Diego Biurrun
   enabled code which breaks compilation or compiles but does not work or
1533 7a57b90c Michael Niedermayer
   breaks the regression tests)
1534
   You can commit unfinished stuff (for testing etc), but it must be disabled
1535
   (#ifdef etc) by default so it does not interfere with other developers'
1536
   work.
1537 115329f1 Diego Biurrun
@item
1538 ce10ff8e Diego Biurrun
   You do not have to over-test things. If it works for you, and you think it
1539 4c5f7207 Diego Biurrun
   should work for others, then commit. If your code has problems
1540
   (portability, triggers compiler bugs, unusual environment etc) they will be
1541 7a57b90c Michael Niedermayer
   reported and eventually fixed.
1542 115329f1 Diego Biurrun
@item
1543 7a57b90c Michael Niedermayer
   Do not commit unrelated changes together, split them into self-contained
1544 ce10ff8e Diego Biurrun
   pieces. Also do not forget that if part B depends on part A, but A does not
1545
   depend on B, then A can and should be committed first and separate from B.
1546
   Keeping changes well split into self-contained parts makes reviewing and
1547
   understanding them on the commit log mailing list easier. This also helps
1548
   in case of debugging later on.
1549
   Also if you have doubts about splitting or not splitting, do not hesitate to
1550 442d1598 Reimar Döffinger
   ask/discuss it on the developer mailing list.
1551 7a57b90c Michael Niedermayer
@item
1552
   Do not change behavior of the program (renaming options etc) without
1553 019c8838 Diego Biurrun
   first discussing it on the ffmpeg-devel mailing list. Do not remove
1554 7a57b90c Michael Niedermayer
   functionality from the code. Just improve!
1555 115329f1 Diego Biurrun
1556 4c5f7207 Diego Biurrun
   Note: Redundant code can be removed.
1557 7a57b90c Michael Niedermayer
@item
1558
   Do not commit changes to the build system (Makefiles, configure script)
1559 019c8838 Diego Biurrun
   which change behavior, defaults etc, without asking first. The same
1560 7a57b90c Michael Niedermayer
   applies to compiler warning fixes, trivial looking fixes and to code
1561
   maintained by other developers. We usually have a reason for doing things
1562 019c8838 Diego Biurrun
   the way we do. Send your changes as patches to the ffmpeg-devel mailing
1563 7a57b90c Michael Niedermayer
   list, and if the code maintainers say OK, you may commit. This does not
1564
   apply to files you wrote and/or maintain.
1565
@item
1566
   We refuse source indentation and other cosmetic changes if they are mixed
1567
   with functional changes, such commits will be rejected and removed. Every
1568
   developer has his own indentation style, you should not change it. Of course
1569
   if you (re)write something, you can use your own style, even though we would
1570 4c5f7207 Diego Biurrun
   prefer if the indentation throughout FFmpeg was consistent (Many projects
1571 ce10ff8e Diego Biurrun
   force a given indentation style - we do not.). If you really need to make
1572 7a57b90c Michael Niedermayer
   indentation changes (try to avoid this), separate them strictly from real
1573
   changes.
1574
1575 114afa9c Diego Biurrun
   NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code,
1576 ce10ff8e Diego Biurrun
   then either do NOT change the indentation of the inner part within (do not
1577 019c8838 Diego Biurrun
   move it to the right)! or do so in a separate commit
1578 7a57b90c Michael Niedermayer
@item
1579
   Always fill out the commit log message. Describe in a few lines what you
1580
   changed and why. You can refer to mailing list postings if you fix a
1581
   particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
1582
@item
1583
   If you apply a patch by someone else, include the name and email address in
1584 1c1b5a40 Diego Biurrun
   the log message. Since the ffmpeg-cvslog mailing list is publicly
1585 019c8838 Diego Biurrun
   archived you should add some SPAM protection to the email address. Send an
1586
   answer to ffmpeg-devel (or wherever you got the patch from) saying that
1587 7a57b90c Michael Niedermayer
   you applied the patch.
1588
@item
1589 b092d033 Benoit Fouet
   When applying patches that have been discussed (at length) on the mailing
1590
   list, reference the thread in the log message.
1591
@item
1592 5ab0f204 Diego Biurrun
    Do NOT commit to code actively maintained by others without permission.
1593
    Send a patch to ffmpeg-devel instead. If noone answers within a reasonable
1594
    timeframe (12h for build failures and security fixes, 3 days small changes,
1595 ce10ff8e Diego Biurrun
    1 week for big patches) then commit your patch if you think it is OK.
1596 5ab0f204 Diego Biurrun
    Also note, the maintainer can simply ask for more time to review!
1597 7a57b90c Michael Niedermayer
@item
1598 1c1b5a40 Diego Biurrun
    Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits
1599 7a57b90c Michael Niedermayer
    are sent there and reviewed by all the other developers. Bugs and possible
1600
    improvements or general questions regarding commits are discussed there. We
1601
    expect you to react if problems with your code are uncovered.
1602
@item
1603
    Update the documentation if you change behavior or add features. If you are
1604 019c8838 Diego Biurrun
    unsure how best to do this, send a patch to ffmpeg-devel, the documentation
1605 7a57b90c Michael Niedermayer
    maintainer(s) will review and commit your stuff.
1606
@item
1607 0541f2c4 Michael Niedermayer
    Try to keep important discussions and requests (also) on the public
1608
    developer mailing list, so that all developers can benefit from them.
1609
@item
1610 4c5f7207 Diego Biurrun
    Never write to unallocated memory, never write over the end of arrays,
1611
    always check values read from some untrusted source before using them
1612
    as array index or other risky things.
1613 76bec1d8 Alexander Strasser
@item
1614
    Remember to check if you need to bump versions for the specific libav
1615 f0efbde7 Diego Biurrun
    parts (libavutil, libavcodec, libavformat) you are changing. You need
1616 76bec1d8 Alexander Strasser
    to change the version integer and the version string.
1617
    Incrementing the first component means no backward compatibility to
1618 a940b428 Michael Niedermayer
    previous versions (e.g. removal of a function from the public API).
1619 76bec1d8 Alexander Strasser
    Incrementing the second component means backward compatible change
1620 a940b428 Michael Niedermayer
    (e.g. addition of a function to the public API).
1621 76bec1d8 Alexander Strasser
    Incrementing the third component means a noteworthy binary compatible
1622
    change (e.g. encoder bug fix that matters for the decoder).
1623 ebd32fd7 Diego Biurrun
@item
1624 3f1965c4 Diego Biurrun
    If you add a new codec, remember to update the changelog, add it to
1625
    the supported codecs table in the documentation and bump the second
1626
    component of the @file{libavcodec} version number appropriately. If
1627
    it has a fourcc, add it to @file{libavformat/avienc.c}, even if it
1628
    is only a decoder.
1629 65d0bea8 Michael Niedermayer
@item
1630 ce10ff8e Diego Biurrun
    Do not change code to hide warnings without ensuring that the underlying
1631
    logic is correct and thus the warning was inappropriate.
1632 bca098f5 Diego Biurrun
@item
1633
    If you add a new file, give it a proper license header. Do not copy and
1634
    paste it from a random place, use an existing file as template.
1635 114afa9c Diego Biurrun
@end enumerate
1636 7a57b90c Michael Niedermayer
1637
We think our rules are not too hard. If you have comments, contact us.
1638
1639
Note, these rules are mostly borrowed from the MPlayer project.
1640
1641 9181577c Fabrice Bellard
@section Submitting patches
1642
1643 ce10ff8e Diego Biurrun
First, (@pxref{Coding Rules}) above if you did not yet.
1644 80d1c272 Michael Niedermayer
1645 6a6810b1 Michael Niedermayer
When you submit your patch, try to send a unified diff (diff '-up'
1646 9181577c Fabrice Bellard
option). I cannot read other diffs :-)
1647
1648 6e5c1877 Michael Niedermayer
Also please do not submit patches which contain several unrelated changes.
1649 115329f1 Diego Biurrun
Split them into individual self-contained patches; this makes reviewing
1650 7885603a Michael Niedermayer
them much easier.
1651
1652 9181577c Fabrice Bellard
Run the regression tests before submitting a patch so that you can
1653 6bf40f39 Philip Gladstone
verify that there are no big problems.
1654 9181577c Fabrice Bellard
1655
Patches should be posted as base64 encoded attachments (or any other
1656 ce10ff8e Diego Biurrun
encoding which ensures that the patch will not be trashed during
1657 115329f1 Diego Biurrun
transmission) to the ffmpeg-devel mailing list, see
1658 2b165e29 Diego Biurrun
@url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel}
1659 9181577c Fabrice Bellard
1660 54fcf429 Michael Niedermayer
It also helps quite a bit if you tell us what the patch does (for example
1661 4c5f7207 Diego Biurrun
'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant
1662 54fcf429 Michael Niedermayer
and has no lrint()')
1663
1664 442d1598 Reimar Döffinger
Also please if you send several patches, send each patch as separate mail,
1665
do not attach several unrelated patches to the same mail.
1666 a15bcf70 Michael Niedermayer
1667 dd597cd7 Michael Niedermayer
@section patch submission checklist
1668
1669
@enumerate
1670
@item
1671
    Do the regression tests pass with the patch applied?
1672
@item
1673
    Is the patch a unified diff?
1674
@item
1675 4a7a0908 Diego Biurrun
    Is the patch against latest FFmpeg SVN?
1676 dd597cd7 Michael Niedermayer
@item
1677
    Are you subscribed to ffmpeg-dev?
1678
    (the list is subscribers only due to spam)
1679
@item
1680
    Have you checked that the changes are minimal, so that the same cannot be
1681 442d1598 Reimar Döffinger
    achieved with a smaller patch and/or simpler final code?
1682 dd597cd7 Michael Niedermayer
@item
1683 4a7a0908 Diego Biurrun
    If the change is to speed critical code, did you benchmark it?
1684 dd597cd7 Michael Niedermayer
@item
1685 b0fee7c5 Diego Biurrun
    If you did any benchmarks, did you provide them in the mail?
1686
@item
1687 442d1598 Reimar Döffinger
    Have you checked that the patch does not introduce buffer overflows or
1688 dd597cd7 Michael Niedermayer
    other security issues?
1689
@item
1690 4a7a0908 Diego Biurrun
    Is the patch created from the root of the source tree, so it can be
1691
    applied with @code{patch -p0}?
1692 dd597cd7 Michael Niedermayer
@item
1693
    Does the patch not mix functional and cosmetic changes?
1694
@item
1695 e300ab4e Diego Biurrun
    Did you add tabs or trailing whitespace to the code? Both are forbidden.
1696
@item
1697 dd597cd7 Michael Niedermayer
    Is the patch attached to the email you send?
1698
@item
1699 4a7a0908 Diego Biurrun
    Is the mime type of the patch correct? It should be text/x-diff or
1700
    text/x-patch or at least text/plain and not application/octet-stream.
1701 dd597cd7 Michael Niedermayer
@item
1702 4a7a0908 Diego Biurrun
    If the patch fixes a bug, did you provide a verbose analysis of the bug?
1703 dd597cd7 Michael Niedermayer
@item
1704 4a7a0908 Diego Biurrun
    If the patch fixes a bug, did you provide enough information, including
1705 dd597cd7 Michael Niedermayer
    a sample, so the bug can be reproduced and the fix can be verified?
1706
@item
1707
    Did you provide a verbose summary about what the patch does change?
1708
@item
1709
    Did you provide a verbose explanation why it changes things like it does?
1710
@item
1711 442d1598 Reimar Döffinger
    Did you provide a verbose summary of the user visible advantages and
1712 dd597cd7 Michael Niedermayer
    disadvantages if the patch is applied?
1713
@item
1714
    Did you provide an example so we can verify the new feature added by the
1715
    patch easily?
1716
@item
1717 bbe94afb Diego Biurrun
    If you added a new file, did you insert a license header? It should be
1718 6baa2943 Diego Biurrun
    taken from FFmpeg, not randomly copied and pasted from somewhere else.
1719 2f954ef2 Michael Niedermayer
@item
1720
    Did you provide a suggestion for a clear commit log message?
1721 dd597cd7 Michael Niedermayer
@end enumerate
1722
1723 f5f11d71 Michael Niedermayer
@section Patch review process
1724
1725
All patches posted to ffmpeg-devel will be reviewed, unless they contain a
1726
clear note that the patch is not for SVN.
1727
Reviews and comments will be posted as replies to the patch on the
1728 ce10ff8e Diego Biurrun
mailing list. The patch submitter then has to take care of every comment,
1729 442d1598 Reimar Döffinger
that can be by resubmitting a changed patch or by discussion. Resubmitted
1730 ce10ff8e Diego Biurrun
patches will themselves be reviewed like any other patch. If at some point
1731 f5f11d71 Michael Niedermayer
a patch passes review with no comments then it is approved, that can for
1732 ce10ff8e Diego Biurrun
simple and small patches happen immediately while large patches will generally
1733 f5f11d71 Michael Niedermayer
have to be changed and reviewed many times before they are approved.
1734 ce10ff8e Diego Biurrun
After a patch is approved it will be committed to the repository.
1735 f5f11d71 Michael Niedermayer
1736
We will review all submitted patches, but sometimes we are quite busy so
1737
especially for large patches this can take several weeks.
1738
1739
When resubmitting patches, please do not make any significant changes
1740 ce10ff8e Diego Biurrun
not related to the comments received during review. Such patches will
1741
be rejected. Instead, submit  significant changes or new features as
1742
separate patches.
1743 cf7f2b16 Michael Niedermayer
1744 9181577c Fabrice Bellard
@section Regression tests
1745
1746 1c1b5a40 Diego Biurrun
Before submitting a patch (or committing to the repository), you should at least
1747 9181577c Fabrice Bellard
test that you did not break anything.
1748
1749 4c5f7207 Diego Biurrun
The regression tests build a synthetic video stream and a synthetic
1750
audio stream. These are then encoded and decoded with all codecs or
1751 9181577c Fabrice Bellard
formats. The CRC (or MD5) of each generated file is recorded in a
1752 4c5f7207 Diego Biurrun
result file. A 'diff' is launched to compare the reference results and
1753 9181577c Fabrice Bellard
the result file.
1754
1755 4c5f7207 Diego Biurrun
The regression tests then go on to test the FFserver code with a
1756 6bf40f39 Philip Gladstone
limited set of streams. It is important that this step runs correctly
1757
as well.
1758
1759 36d9b4e8 Michael Niedermayer
Run 'make test' to test all the codecs and formats.
1760 9181577c Fabrice Bellard
1761 4c5f7207 Diego Biurrun
Run 'make fulltest' to test all the codecs, formats and FFserver.
1762 9181577c Fabrice Bellard
1763 4c5f7207 Diego Biurrun
[Of course, some patches may change the results of the regression tests. In
1764
this case, the reference results of the regression tests shall be modified
1765 9181577c Fabrice Bellard
accordingly].
1766
1767
@bye