Statistics
| Branch: | Revision:

ffmpeg / doc / ffmpeg-doc.texi @ 12b6d7c0

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 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 d58bbf81 Ivo van Poorten
@item PTX          @tab   @tab X @tab V.Flash PTX format
968 0699d2fe Fabrice Bellard
@end multitable
969
970 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
971 0699d2fe Fabrice Bellard
972 9181577c Fabrice Bellard
@section Video Codecs
973
974 3fc9e78f Diego Biurrun
@multitable @columnfractions .4 .1 .1 .4
975 9181577c Fabrice Bellard
@item Supported Codec @tab Encoding @tab Decoding @tab Comments
976 4c5f7207 Diego Biurrun
@item MPEG-1 video           @tab  X  @tab  X
977
@item MPEG-2 video           @tab  X  @tab  X
978 2bc5da7b Michael Niedermayer
@item MPEG-4                 @tab  X  @tab  X
979 9181577c Fabrice Bellard
@item MSMPEG4 V1             @tab  X  @tab  X
980
@item MSMPEG4 V2             @tab  X  @tab  X
981 2bc5da7b Michael Niedermayer
@item MSMPEG4 V3             @tab  X  @tab  X
982 9181577c Fabrice Bellard
@item WMV7                   @tab  X  @tab  X
983 4c5f7207 Diego Biurrun
@item WMV8                   @tab  X  @tab  X @tab not completely working
984 17a21f3c Diego Biurrun
@item WMV9                   @tab     @tab  X @tab not completely working
985
@item VC1                    @tab     @tab  X
986 b06b45c4 Mike Melanson
@item H.261                  @tab  X  @tab  X
987 4c5f7207 Diego Biurrun
@item H.263(+)               @tab  X  @tab  X @tab also known as RealVideo 1.0
988 b06b45c4 Mike Melanson
@item H.264                  @tab     @tab  X
989 e839a994 Diego Biurrun
@item RealVideo 1.0          @tab  X  @tab  X
990
@item RealVideo 2.0          @tab  X  @tab  X
991 115329f1 Diego Biurrun
@item MJPEG                  @tab  X  @tab  X
992 4c5f7207 Diego Biurrun
@item lossless MJPEG         @tab  X  @tab  X
993 26d6d032 Benjamin Larsson
@item JPEG-LS                @tab  X  @tab  X @tab fourcc: MJLS, lossless and near-lossless is supported
994 d6896c49 Alex Beregszaszi
@item Apple MJPEG-B          @tab     @tab  X
995
@item Sunplus MJPEG          @tab     @tab  X @tab fourcc: SP5X
996 115329f1 Diego Biurrun
@item DV                     @tab  X  @tab  X
997 4c5f7207 Diego Biurrun
@item HuffYUV                @tab  X  @tab  X
998
@item FFmpeg Video 1         @tab  X  @tab  X @tab experimental lossless codec (fourcc: FFV1)
999
@item FFmpeg Snow            @tab  X  @tab  X @tab experimental wavelet codec (fourcc: SNOW)
1000 701b603d Mike Melanson
@item Asus v1                @tab  X  @tab  X @tab fourcc: ASV1
1001 4d3b1f8d Mike Melanson
@item Asus v2                @tab  X  @tab  X @tab fourcc: ASV2
1002 701b603d Mike Melanson
@item Creative YUV           @tab     @tab  X @tab fourcc: CYUV
1003 d2bfadc0 Mike Melanson
@item Sorenson Video 1       @tab  X  @tab  X @tab fourcc: SVQ1
1004 701b603d Mike Melanson
@item Sorenson Video 3       @tab     @tab  X @tab fourcc: SVQ3
1005
@item On2 VP3                @tab     @tab  X @tab still experimental
1006 5ce117c3 Aurelien Jacobs
@item On2 VP5                @tab     @tab  X @tab fourcc: VP50
1007 9110a0e3 Aurelien Jacobs
@item On2 VP6                @tab     @tab  X @tab fourcc: VP60,VP61,VP62
1008 150d2772 Diego Biurrun
@item Theora                 @tab  X  @tab  X @tab still experimental
1009 cdb2c1ca Sebastian Jedruszkiewicz
@item Intel Indeo 3          @tab     @tab  X
1010 9303d49c Alex Beregszaszi
@item FLV                    @tab  X  @tab  X @tab Sorenson H.263 used in Flash
1011 15419468 Benjamin Larsson
@item Flash Screen Video     @tab  X  @tab  X @tab fourcc: FSV1
1012 4d3b1f8d Mike Melanson
@item ATI VCR1               @tab     @tab  X @tab fourcc: VCR1
1013 7fe4c823 Alex Beregszaszi
@item ATI VCR2               @tab     @tab  X @tab fourcc: VCR2
1014 4d3b1f8d Mike Melanson
@item Cirrus Logic AccuPak   @tab     @tab  X @tab fourcc: CLJR
1015 4c5f7207 Diego Biurrun
@item 4X Video               @tab     @tab  X @tab Used in certain computer games.
1016 115329f1 Diego Biurrun
@item Sony Playstation MDEC  @tab     @tab  X
1017 4c5f7207 Diego Biurrun
@item Id RoQ                 @tab     @tab  X @tab Used in Quake III, Jedi Knight 2, other computer games.
1018
@item Xan/WC3                @tab     @tab  X @tab Used in Wing Commander III .MVE files.
1019
@item Interplay Video        @tab     @tab  X @tab Used in Interplay .MVE files.
1020 070ed1bc Mike Melanson
@item Apple Animation        @tab     @tab  X @tab fourcc: 'rle '
1021 42cad81a Mike Melanson
@item Apple Graphics         @tab     @tab  X @tab fourcc: 'smc '
1022 2fdf638b Mike Melanson
@item Apple Video            @tab     @tab  X @tab fourcc: rpza
1023 d08d7142 Mike Melanson
@item Apple QuickDraw        @tab     @tab  X @tab fourcc: qdrw
1024 2fdf638b Mike Melanson
@item Cinepak                @tab     @tab  X
1025
@item Microsoft RLE          @tab     @tab  X
1026
@item Microsoft Video-1      @tab     @tab  X
1027 4120a53a Mike Melanson
@item Westwood VQA           @tab     @tab  X
1028 4c5f7207 Diego Biurrun
@item Id Cinematic Video     @tab     @tab  X @tab Used in Quake II.
1029 1dc1ed99 Roberto Togni
@item Planar RGB             @tab     @tab  X @tab fourcc: 8BPS
1030 42cad81a Mike Melanson
@item FLIC video             @tab     @tab  X
1031 9a4117d5 Mike Melanson
@item Duck TrueMotion v1     @tab     @tab  X @tab fourcc: DUCK
1032 dce76c20 Mike Melanson
@item Duck TrueMotion v2     @tab     @tab  X @tab fourcc: TM20
1033 4c5f7207 Diego Biurrun
@item VMD Video              @tab     @tab  X @tab Used in Sierra VMD files.
1034 a273bbfb Roberto Togni
@item MSZH                   @tab     @tab  X @tab Part of LCL
1035
@item ZLIB                   @tab  X  @tab  X @tab Part of LCL, encoder experimental
1036 9d53d58e Mike Melanson
@item TechSmith Camtasia     @tab     @tab  X @tab fourcc: TSCC
1037 d0a0bbd2 Mike Melanson
@item IBM Ultimotion         @tab     @tab  X @tab fourcc: ULTI
1038 ab711b3c Mike Melanson
@item Miro VideoXL           @tab     @tab  X @tab fourcc: VIXL
1039 acfd8f0f Mike Melanson
@item QPEG                   @tab     @tab  X @tab fourccs: QPEG, Q1.0, Q1.1
1040 115329f1 Diego Biurrun
@item LOCO                   @tab     @tab  X @tab
1041
@item Winnov WNV1            @tab     @tab  X @tab
1042 589f8220 Mike Melanson
@item Autodesk Animator Studio Codec  @tab     @tab  X @tab fourcc: AASC
1043 115329f1 Diego Biurrun
@item Fraps FPS1             @tab     @tab  X @tab
1044 2b6c1d80 Diego Biurrun
@item CamStudio              @tab     @tab  X @tab fourcc: CSCD
1045 4e114829 Mike Melanson
@item American Laser Games Video  @tab    @tab X @tab Used in games like Mad Dog McCree
1046 f48d6e1b Kostya Shishkov
@item ZMBV                   @tab   X @tab  X @tab Encoder works only on PAL8
1047 26376701 Mike Melanson
@item AVS Video              @tab     @tab  X @tab Video encoding used by the Creature Shock game.
1048 348efc18 Kostya Shishkov
@item Smacker Video          @tab     @tab  X @tab Video encoding used in Smacker.
1049 dfca23e3 Reimar Döffinger
@item RTjpeg                 @tab     @tab  X @tab Video encoding used in NuppelVideo files.
1050 fd7b1991 Kostya Shishkov
@item KMVC                   @tab     @tab  X @tab Codec used in Worms games.
1051 eb57c889 Kostya Shishkov
@item VMware Video           @tab     @tab  X @tab Codec used in videos captured by VMware.
1052 dc56e0de Baptiste Coudurier
@item Cin Video              @tab     @tab  X @tab Codec used in Delphine Software games.
1053 29f86228 Baptiste Coudurier
@item Tiertex Seq Video      @tab     @tab  X @tab Codec used in DOS CDROM FlashBack game.
1054 33a0dd37 Kostya Shishkov
@item DXA Video              @tab     @tab  X @tab Codec originally used in Feeble Files game.
1055 52b6bad2 Baptiste Coudurier
@item AVID DNxHD             @tab     @tab  X @tab aka SMPTE VC3
1056 9a0ddd09 Anssi Hannula
@item C93 Video              @tab     @tab  X @tab Codec used in Cyberia game.
1057 8845202e Diego Biurrun
@item THP                    @tab     @tab  X @tab Used on the Nintendo GameCube.
1058 1e6c6759 Nicholas Tung
@item Bethsoft VID           @tab     @tab  X @tab Used in some games from Bethesda Softworks.
1059 12b6d7c0 Ivo van Poorten
@item Renderware TXD         @tab     @tab  X @tab Texture dictionaries used by the Renderware Engine.
1060 9181577c Fabrice Bellard
@end multitable
1061
1062 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
1063 9181577c Fabrice Bellard
1064
@section Audio Codecs
1065
1066
@multitable @columnfractions .4 .1 .1 .1 .7
1067
@item Supported Codec @tab Encoding @tab Decoding @tab Comments
1068 115329f1 Diego Biurrun
@item MPEG audio layer 2     @tab  IX  @tab  IX
1069 9181577c Fabrice Bellard
@item MPEG audio layer 1/3   @tab IX   @tab  IX
1070 4c5f7207 Diego Biurrun
@tab MP3 encoding is supported through the external library LAME.
1071 37776c3b Benjamin Larsson
@item AC3                    @tab  IX  @tab  IX
1072 4c5f7207 Diego Biurrun
@tab liba52 is used internally for decoding.
1073 34d7008d Philip Gladstone
@item Vorbis                 @tab  X   @tab  X
1074 74882049 Diego Biurrun
@item WMA V1/V2              @tab X    @tab X
1075 f6fa7a6c Benjamin Larsson
@item AAC                    @tab X    @tab X
1076 4c5f7207 Diego Biurrun
@tab Supported through the external library libfaac/libfaad.
1077 d4c3c5a6 Michael Niedermayer
@item Microsoft ADPCM        @tab X    @tab X
1078 4d3b1f8d Mike Melanson
@item MS IMA ADPCM           @tab X    @tab X
1079
@item QT IMA ADPCM           @tab      @tab X
1080
@item 4X IMA ADPCM           @tab      @tab X
1081 d4e437df Roman Shaposhnik
@item G.726  ADPCM           @tab X    @tab X
1082 b17e9c99 Mike Melanson
@item Duck DK3 IMA ADPCM     @tab      @tab X
1083 4c5f7207 Diego Biurrun
@tab Used in some Sega Saturn console games.
1084 b17e9c99 Mike Melanson
@item Duck DK4 IMA ADPCM     @tab      @tab X
1085 4c5f7207 Diego Biurrun
@tab Used in some Sega Saturn console games.
1086 2fdf638b Mike Melanson
@item Westwood Studios IMA ADPCM @tab      @tab X
1087 4c5f7207 Diego Biurrun
@tab Used in Westwood Studios games like Command and Conquer.
1088 7d8379f2 Mike Melanson
@item SMJPEG IMA ADPCM       @tab      @tab X
1089 4c5f7207 Diego Biurrun
@tab Used in certain Loki game ports.
1090 42cad81a Mike Melanson
@item CD-ROM XA ADPCM        @tab      @tab X
1091
@item CRI ADX ADPCM          @tab X    @tab X
1092 4c5f7207 Diego Biurrun
@tab Used in Sega Dreamcast games.
1093 7d8379f2 Mike Melanson
@item Electronic Arts ADPCM  @tab      @tab X
1094 4c5f7207 Diego Biurrun
@tab Used in various EA titles.
1095 b3bfb299 Mike Melanson
@item Creative ADPCM         @tab      @tab X
1096 2433f24f Aurelien Jacobs
@tab 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
1097 8845202e Diego Biurrun
@item THP ADPCM              @tab      @tab X
1098
@tab Used on the Nintendo GameCube.
1099 2eb5d024 Fabrice Bellard
@item RA144                  @tab      @tab X
1100
@tab Real 14400 bit/s codec
1101
@item RA288                  @tab      @tab X
1102
@tab Real 28800 bit/s codec
1103 37776c3b Benjamin Larsson
@item RADnet                 @tab X    @tab IX
1104 4c5f7207 Diego Biurrun
@tab Real low bitrate AC3 codec, liba52 is used for decoding.
1105 2eb5d024 Fabrice Bellard
@item AMR-NB                 @tab X    @tab X
1106 4c5f7207 Diego Biurrun
@tab Supported through an external library.
1107 d663a1fd Michael Niedermayer
@item AMR-WB                 @tab X    @tab X
1108 4c5f7207 Diego Biurrun
@tab Supported through an external library.
1109 2eb5d024 Fabrice Bellard
@item DV audio               @tab      @tab X
1110 b09432ad Diego Biurrun
@item Id RoQ DPCM            @tab X    @tab X
1111 4c5f7207 Diego Biurrun
@tab Used in Quake III, Jedi Knight 2, other computer games.
1112 4d3b1f8d Mike Melanson
@item Interplay MVE DPCM     @tab      @tab X
1113 4c5f7207 Diego Biurrun
@tab Used in various Interplay computer games.
1114 b17e9c99 Mike Melanson
@item Xan DPCM               @tab      @tab X
1115 4c5f7207 Diego Biurrun
@tab Used in Origin's Wing Commander IV AVI files.
1116 d08d7142 Mike Melanson
@item Sierra Online DPCM     @tab      @tab X
1117 4c5f7207 Diego Biurrun
@tab Used in Sierra Online game audio files.
1118 d6896c49 Alex Beregszaszi
@item Apple MACE 3           @tab      @tab X
1119
@item Apple MACE 6           @tab      @tab X
1120 bfd9a00f Justin Ruggles
@item FLAC lossless audio    @tab X    @tab X
1121 13dfd2b9 Mike Melanson
@item Shorten lossless audio @tab      @tab X
1122 f770ee03 Mike Melanson
@item Apple lossless audio   @tab      @tab X
1123
@tab QuickTime fourcc 'alac'
1124 33a4d8b1 Alex Beregszaszi
@item FFmpeg Sonic           @tab X    @tab X
1125 4c5f7207 Diego Biurrun
@tab experimental lossy/lossless codec
1126 d9b1c197 Roberto Togni
@item Qdesign QDM2           @tab      @tab X
1127
@tab there are still some distortions
1128 440e7988 Roberto Togni
@item Real COOK              @tab      @tab X
1129
@tab All versions except 5.1 are supported
1130 e839a994 Diego Biurrun
@item DSP Group TrueSpeech   @tab      @tab X
1131 3dc411c0 Alex Beregszaszi
@item True Audio (TTA)       @tab      @tab X
1132 348efc18 Kostya Shishkov
@item Smacker Audio          @tab      @tab X
1133 730581f3 Kostya Shishkov
@item WavPack Audio          @tab      @tab X
1134 dc56e0de Baptiste Coudurier
@item Cin Audio              @tab      @tab X
1135
@tab Codec used in Delphine Software games.
1136 84ed36da Kostya Shishkov
@item Intel Music Coder      @tab      @tab X
1137 185c7b6b Kostya Shishkov
@item Musepack               @tab      @tab X
1138
@tab Only SV7 is supported
1139 01ca9ac3 Kostya Shishkov
@item DT$ Coherent Audio     @tab      @tab X
1140 10e26bc7 Benjamin Larsson
@item ATRAC 3                @tab      @tab X
1141 9181577c Fabrice Bellard
@end multitable
1142
1143 4c5f7207 Diego Biurrun
@code{X} means that encoding (resp. decoding) is supported.
1144 9181577c Fabrice Bellard
1145 4c5f7207 Diego Biurrun
@code{I} means that an integer-only version is available, too (ensures high
1146
performance on systems without hardware floating point support).
1147 9181577c Fabrice Bellard
1148 47d944d2 Fabrice Bellard
@chapter Platform Specific information
1149
1150
@section BSD
1151
1152 21d1cb12 Diego Biurrun
BSD make will not build FFmpeg, you need to install and use GNU Make
1153
(@file{gmake}).
1154
1155 47d944d2 Fabrice Bellard
@section Windows
1156
1157 e2ef53fc Diego Biurrun
To get help and instructions for using FFmpeg under Windows, check out
1158
the FFmpeg Windows Help Forum at
1159
@url{http://arrozcru.no-ip.org/ffmpeg/}.
1160
1161 b030b284 Fabrice Bellard
@subsection Native Windows compilation
1162
1163
@itemize
1164
@item Install the current versions of MSYS and MinGW from
1165
@url{http://www.mingw.org/}. You can find detailed installation
1166
instructions in the download section and the FAQ.
1167
1168 f2d64c19 Alex Beregszaszi
NOTE: Use at least bash 3.1. Older versions are known to be failing on the
1169
configure script.
1170
1171 4c5f7207 Diego Biurrun
@item If you want to test the FFplay, also download
1172 50f52fcd Fabrice Bellard
the MinGW development library of SDL 1.2.x
1173
(@file{SDL-devel-1.2.x-mingw32.tar.gz}) from
1174 4c5f7207 Diego Biurrun
@url{http://www.libsdl.org}. Unpack it in a temporary directory, and
1175 50f52fcd Fabrice Bellard
unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool
1176 988a9f9e Fabrice Bellard
directory. Edit the @file{sdl-config} script so that it gives the
1177
correct SDL directory when invoked.
1178 50f52fcd Fabrice Bellard
1179 e926e391 Diego Biurrun
@item Extract the current version of FFmpeg.
1180 115329f1 Diego Biurrun
1181 b030b284 Fabrice Bellard
@item Start the MSYS shell (file @file{msys.bat}).
1182
1183 4c5f7207 Diego Biurrun
@item Change to the FFmpeg directory and follow
1184
 the instructions of how to compile FFmpeg (file
1185 50f52fcd Fabrice Bellard
@file{INSTALL}). Usually, launching @file{./configure} and @file{make}
1186
suffices. If you have problems using SDL, verify that
1187
@file{sdl-config} can be launched from the MSYS command line.
1188
1189 4c5f7207 Diego Biurrun
@item You can install FFmpeg in @file{Program Files/FFmpeg} by typing
1190 ce10ff8e Diego Biurrun
@file{make install}. Do not forget to copy @file{SDL.dll} to the place
1191 4c5f7207 Diego Biurrun
you launch @file{ffplay} from.
1192 50f52fcd Fabrice Bellard
1193 b030b284 Fabrice Bellard
@end itemize
1194
1195 115329f1 Diego Biurrun
Notes:
1196 988a9f9e Fabrice Bellard
@itemize
1197 50f52fcd Fabrice Bellard
1198 988a9f9e Fabrice Bellard
@item The target @file{make wininstaller} can be used to create a
1199
Nullsoft based Windows installer for FFmpeg and FFplay. @file{SDL.dll}
1200 4c5f7207 Diego Biurrun
must be copied to the FFmpeg directory in order to build the
1201 988a9f9e Fabrice Bellard
installer.
1202
1203 4c5f7207 Diego Biurrun
@item By using @code{./configure --enable-shared} when configuring FFmpeg,
1204 988a9f9e Fabrice Bellard
you can build @file{avcodec.dll} and @file{avformat.dll}. With
1205
@code{make install} you install the FFmpeg DLLs and the associated
1206 115329f1 Diego Biurrun
headers in @file{Program Files/FFmpeg}.
1207 988a9f9e Fabrice Bellard
1208 4c5f7207 Diego Biurrun
@item Visual C++ compatibility: If you used @code{./configure --enable-shared}
1209
when configuring FFmpeg, FFmpeg tries to use the Microsoft Visual
1210 988a9f9e Fabrice Bellard
C++ @code{lib} tool to build @code{avcodec.lib} and
1211 4c5f7207 Diego Biurrun
@code{avformat.lib}. With these libraries you can link your Visual C++
1212 be0efc0c Martin Boehme
code directly with the FFmpeg DLLs (see below).
1213 988a9f9e Fabrice Bellard
1214
@end itemize
1215 b030b284 Fabrice Bellard
1216 be0efc0c Martin Boehme
@subsection Visual C++ compatibility
1217
1218
FFmpeg will not compile under Visual C++ -- and it has too many
1219
dependencies on the GCC compiler to make a port viable. However,
1220
if you want to use the FFmpeg libraries in your own applications,
1221
you can still compile those applications using Visual C++. An
1222
important restriction to this is that you have to use the
1223
dynamically linked versions of the FFmpeg libraries (i.e. the
1224
DLLs), and you have to make sure that Visual-C++-compatible
1225
import libraries are created during the FFmpeg build process.
1226
1227
This description of how to use the FFmpeg libraries with Visual C++ is
1228
based on Visual C++ 2005 Express Edition Beta 2. If you have a different
1229
version, you might have to modify the procedures slightly.
1230
1231
Here are the step-by-step instructions for building the FFmpeg libraries
1232
so they can be used with Visual C++:
1233
1234
@enumerate
1235
1236 ce10ff8e Diego Biurrun
@item Install Visual C++ (if you have not done so already).
1237 be0efc0c Martin Boehme
1238
@item Install MinGW and MSYS as described above.
1239
1240
@item Add a call to @file{vcvars32.bat} (which sets up the environment
1241
variables for the Visual C++ tools) as the first line of
1242
@file{msys.bat}. The standard location for @file{vcvars32.bat} is
1243
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat},
1244
and the standard location for @file{msys.bat} is
1245
@file{C:\msys\1.0\msys.bat}. If this corresponds to your setup, add the
1246
following line as the first line of @file{msys.bat}:
1247
1248
@code{call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"}
1249
1250
@item Start the MSYS shell (file @file{msys.bat}) and type @code{link.exe}.
1251
If you get a help message with the command line options of @code{link.exe},
1252
this means your environment variables are set up correctly, the
1253
Microsoft linker is on the path and will be used by FFmpeg to
1254
create Visual-C++-compatible import libraries.
1255
1256 e926e391 Diego Biurrun
@item Extract the current version of FFmpeg and change to the FFmpeg directory.
1257 be0efc0c Martin Boehme
1258
@item Type the command
1259 51d8321d Diego Biurrun
@code{./configure --enable-shared --disable-static --enable-memalign-hack}
1260 ce10ff8e Diego Biurrun
to configure and, if that did not produce any errors,
1261 51d8321d Diego Biurrun
type @code{make} to build FFmpeg.
1262 be0efc0c Martin Boehme
1263
@item The subdirectories @file{libavformat}, @file{libavcodec}, and
1264
@file{libavutil} should now contain the files @file{avformat.dll},
1265
@file{avformat.lib}, @file{avcodec.dll}, @file{avcodec.lib},
1266
@file{avutil.dll}, and @file{avutil.lib}, respectively. Copy the three
1267
DLLs to your System32 directory (typically @file{C:\Windows\System32}).
1268
1269
@end enumerate
1270
1271
And here is how to use these libraries with Visual C++:
1272
1273
@enumerate
1274
1275
@item Create a new console application ("File / New / Project") and then
1276
select "Win32 Console Application". On the appropriate page of the
1277
Application Wizard, uncheck the "Precompiled headers" option.
1278
1279
@item Write the source code for your application, or, for testing, just
1280
copy the code from an existing sample application into the source file
1281
that Visual C++ has already created for you. (Note that your source
1282 ce10ff8e Diego Biurrun
filehas to have a @code{.cpp} extension; otherwise, Visual C++ will not
1283
compile the FFmpeg headers correctly because in C mode, it does not
1284 be0efc0c Martin Boehme
recognize the @code{inline} keyword.)  For example, you can copy
1285
@file{output_example.c} from the FFmpeg distribution (but you will
1286
have to make minor modifications so the code will compile under
1287
C++, see below).
1288
1289
@item Open the "Project / Properties" dialog box. In the "Configuration"
1290
combo box, select "All Configurations" so that the changes you make will
1291
affect both debug and release builds. In the tree view on the left hand
1292
side, select "C/C++ / General", then edit the "Additional Include
1293
Directories" setting to contain the complete paths to the
1294
@file{libavformat}, @file{libavcodec}, and @file{libavutil}
1295
subdirectories of your FFmpeg directory. Note that the directories have
1296
to be separated using semicolons. Now select "Linker / General" from the
1297
tree view and edit the "Additional Library Directories" setting to
1298
contain the same three directories.
1299
1300
@item Still in the "Project / Properties" dialog box, select "Linker / Input"
1301
from the tree view, then add the files @file{avformat.lib},
1302
@file{avcodec.lib}, and @file{avutil.lib} to the end of the "Additional
1303
Dependencies". Note that the names of the libraries have to be separated
1304
using spaces.
1305
1306 765c3440 Fredrik Orderud
@item Now, select "C/C++ / Code Generation" from the tree view. Select
1307 be0efc0c Martin Boehme
"Debug" in the "Configuration" combo box. Make sure that "Runtime
1308
Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in
1309
the "Configuration" combo box and make sure that "Runtime Library" is
1310
set to "Multi-threaded DLL".
1311
1312
@item Click "OK" to close the "Project / Properties" dialog box and build
1313
the application. Hopefully, it should compile and run cleanly. If you
1314
used @file{output_example.c} as your sample application, you will get a
1315
few compiler errors, but they are easy to fix. The first type of error
1316 ce10ff8e Diego Biurrun
occurs because Visual C++ does not allow an @code{int} to be converted to
1317 be0efc0c Martin Boehme
an @code{enum} without a cast. To solve the problem, insert the required
1318
casts (this error occurs once for a @code{CodecID} and once for a
1319
@code{CodecType}).  The second type of error occurs because C++ requires
1320
the return value of @code{malloc} to be cast to the exact type of the
1321
pointer it is being assigned to. Visual C++ will complain that, for
1322
example, @code{(void *)} is being assigned to @code{(uint8_t *)} without
1323
an explicit cast. So insert an explicit cast in these places to silence
1324
the compiler. The third type of error occurs because the @code{snprintf}
1325
library function is called @code{_snprintf} under Visual C++.  So just
1326
add an underscore to fix the problem. With these changes,
1327
@file{output_example.c} should compile under Visual C++, and the
1328
resulting executable should produce valid video files.
1329
1330
@end enumerate
1331
1332 b030b284 Fabrice Bellard
@subsection Cross compilation for Windows with Linux
1333
1334
You must use the MinGW cross compilation tools available at
1335
@url{http://www.mingw.org/}.
1336
1337 4c5f7207 Diego Biurrun
Then configure FFmpeg with the following options:
1338 b030b284 Fabrice Bellard
@example
1339 6b74787b Víctor Paesa
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
1340 b030b284 Fabrice Bellard
@end example
1341 019c8838 Diego Biurrun
(you can change the cross-prefix according to the prefix chosen for the
1342 b030b284 Fabrice Bellard
MinGW tools).
1343
1344 4c5f7207 Diego Biurrun
Then you can easily test FFmpeg with Wine
1345 b030b284 Fabrice Bellard
(@url{http://www.winehq.com/}).
1346
1347 30aee296 Diego Biurrun
@subsection Compilation under Cygwin
1348
1349
Cygwin works very much like Unix.
1350
1351
Just install your Cygwin with all the "Base" packages, plus the
1352
following "Devel" ones:
1353
@example
1354
binutils, gcc-core, make, subversion
1355
@end example
1356
1357
Do not install binutils-20060709-1 (they are buggy on shared builds);
1358
use binutils-20050610-1 instead.
1359
1360
Then run
1361
1362
@example
1363
./configure --enable-static --disable-shared
1364
@end example
1365
1366
to make a static build or
1367
1368
@example
1369
./configure --enable-shared --disable-static
1370
@end example
1371
1372
to build shared libraries.
1373
1374
If you want to build FFmpeg with additional libraries, download Cygwin
1375
"Devel" packages for Ogg and Vorbis from any Cygwin packages repository
1376
and/or SDL, xvid, faac, faad2 packages from Cygwin Ports,
1377
(@url{http://cygwinports.dotsrc.org/}).
1378
1379
@subsection Crosscompilation for Windows under Cygwin
1380
1381 ce10ff8e Diego Biurrun
With Cygwin you can create Windows binaries that do not need the cygwin1.dll.
1382 30aee296 Diego Biurrun
1383
Just install your Cygwin as explained before, plus these additional
1384
"Devel" packages:
1385
@example
1386
gcc-mingw-core, mingw-runtime, mingw-zlib
1387
@end example
1388
1389
and add some special flags to your configure invocation.
1390
1391
For a static build run
1392
@example
1393 6b74787b Víctor Paesa
./configure --target-os=mingw32 --enable-memalign-hack --enable-static --disable-shared --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
1394 30aee296 Diego Biurrun
@end example
1395
1396
and for a build with shared libraries
1397
@example
1398 6b74787b Víctor Paesa
./configure --target-os=mingw32 --enable-memalign-hack --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
1399 30aee296 Diego Biurrun
@end example
1400
1401 47d944d2 Fabrice Bellard
@section BeOS
1402
1403
The configure script should guess the configuration itself.
1404
Networking support is currently not finished.
1405
errno issues fixed by Andrew Bachmann.
1406
1407
Old stuff:
1408
1409 7dd611c9 François Revol
François Revol - revol at free dot fr - April 2002
1410 47d944d2 Fabrice Bellard
1411 115329f1 Diego Biurrun
The configure script should guess the configuration itself,
1412 ce10ff8e Diego Biurrun
however I still did not test building on the net_server version of BeOS.
1413 47d944d2 Fabrice Bellard
1414 4c5f7207 Diego Biurrun
FFserver is broken (needs poll() implementation).
1415 47d944d2 Fabrice Bellard
1416 4c5f7207 Diego Biurrun
There are still issues with errno codes, which are negative in BeOS, and
1417 115329f1 Diego Biurrun
that FFmpeg negates when returning. This ends up turning errors into
1418 47d944d2 Fabrice Bellard
valid results, then crashes.
1419
(To be fixed)
1420
1421 34d7008d Philip Gladstone
@chapter Developers Guide
1422 9181577c Fabrice Bellard
1423
@section API
1424 a0b72f90 Diego Biurrun
@itemize @bullet
1425 9181577c Fabrice Bellard
@item libavcodec is the library containing the codecs (both encoding and
1426 4c5f7207 Diego Biurrun
decoding). Look at @file{libavcodec/apiexample.c} to see how to use it.
1427 9181577c Fabrice Bellard
1428 4c5f7207 Diego Biurrun
@item libavformat is the library containing the file format handling (mux and
1429
demux code for several formats). Look at @file{ffplay.c} to use it in a
1430 a93b9dba Fabrice Bellard
player. See @file{output_example.c} to use it to generate audio or video
1431
streams.
1432
1433 9181577c Fabrice Bellard
@end itemize
1434
1435
@section Integrating libavcodec or libavformat in your program
1436
1437
You can integrate all the source code of the libraries to link them
1438
statically to avoid any version problem. All you need is to provide a
1439
'config.mak' and a 'config.h' in the parent directory. See the defines
1440
generated by ./configure to understand what is needed.
1441
1442
You can use libavcodec or libavformat in your commercial program, but
1443
@emph{any patch you make must be published}. The best way to proceed is
1444 4c5f7207 Diego Biurrun
to send your patches to the FFmpeg mailing list.
1445 9181577c Fabrice Bellard
1446 80d1c272 Michael Niedermayer
@node Coding Rules
1447 9181577c Fabrice Bellard
@section Coding Rules
1448
1449 4c5f7207 Diego Biurrun
FFmpeg is programmed in the ISO C90 language with a few additional
1450 cb6e87c1 Falk Hüffner
features from ISO C99, namely:
1451
@itemize @bullet
1452
@item
1453
the @samp{inline} keyword;
1454
@item
1455
@samp{//} comments;
1456
@item
1457
designated struct initializers (@samp{struct s x = @{ .i = 17 @};})
1458
@item
1459 114afa9c Diego Biurrun
compound literals (@samp{x = (struct s) @{ 17, 23 @};})
1460 cb6e87c1 Falk Hüffner
@end itemize
1461
1462 ce10ff8e Diego Biurrun
These features are supported by all compilers we care about, so we will not
1463
accept patches to remove their use unless they absolutely do not impair
1464 cb6e87c1 Falk Hüffner
clarity and performance.
1465
1466 4c5f7207 Diego Biurrun
All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also
1467 cb6e87c1 Falk Hüffner
compiles with several other compilers, such as the Compaq ccc compiler
1468
or Sun Studio 9, and we would like to keep it that way unless it would
1469 ce10ff8e Diego Biurrun
be exceedingly involved. To ensure compatibility, please do not use any
1470 4c5f7207 Diego Biurrun
additional C99 features or GCC extensions. Especially watch out for:
1471 cb6e87c1 Falk Hüffner
@itemize @bullet
1472
@item
1473
mixing statements and declarations;
1474
@item
1475
@samp{long long} (use @samp{int64_t} instead);
1476
@item
1477
@samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar;
1478
@item
1479 019c8838 Diego Biurrun
GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}).
1480 cb6e87c1 Falk Hüffner
@end itemize
1481 9181577c Fabrice Bellard
1482 53862e0f Diego Biurrun
Indent size is 4.
1483 b86e38a0 Aurelien Jacobs
The presentation is the one specified by 'indent -i4 -kr -nut'.
1484 53862e0f Diego Biurrun
The TAB character is forbidden outside of Makefiles as is any
1485
form of trailing whitespace. Commits containing either will be
1486 1c1b5a40 Diego Biurrun
rejected by the Subversion repository.
1487 9181577c Fabrice Bellard
1488 4c5f7207 Diego Biurrun
Main priority in FFmpeg is simplicity and small code size (=less
1489 9181577c Fabrice Bellard
bugs).
1490
1491 4c5f7207 Diego Biurrun
Comments: Use the JavaDoc/Doxygen
1492
format (see examples below) so that code documentation
1493
can be generated automatically. All nontrivial functions should have a comment
1494 ce10ff8e Diego Biurrun
above them explaining what the function does, even if it is just one sentence.
1495 4c5f7207 Diego Biurrun
All structures and their member variables should be documented, too.
1496 f4888b83 Michael Niedermayer
@example
1497
/**
1498 2185824b Måns Rullgård
 * @@file mpeg.c
1499
 * MPEG codec.
1500
 * @@author ...
1501
 */
1502 f4888b83 Michael Niedermayer
1503
/**
1504 2185824b Måns Rullgård
 * Summary sentence.
1505
 * more text ...
1506
 * ...
1507
 */
1508 114afa9c Diego Biurrun
typedef struct Foobar@{
1509 2185824b Måns Rullgård
    int var1; /**< var1 description */
1510
    int var2; ///< var2 description
1511
    /** var3 description */
1512
    int var3;
1513 114afa9c Diego Biurrun
@} Foobar;
1514 f4888b83 Michael Niedermayer
1515
/**
1516 2185824b Måns Rullgård
 * Summary sentence.
1517
 * more text ...
1518
 * ...
1519
 * @@param my_parameter description of my_parameter
1520
 * @@return return value description
1521
 */
1522 f4888b83 Michael Niedermayer
int myfunc(int my_parameter)
1523
...
1524
@end example
1525 9181577c Fabrice Bellard
1526 115329f1 Diego Biurrun
fprintf and printf are forbidden in libavformat and libavcodec,
1527 36d9b4e8 Michael Niedermayer
please use av_log() instead.
1528
1529 1c1b5a40 Diego Biurrun
@section Development Policy
1530 7a57b90c Michael Niedermayer
1531
@enumerate
1532 115329f1 Diego Biurrun
@item
1533 7a57b90c Michael Niedermayer
   You must not commit code which breaks FFmpeg! (Meaning unfinished but
1534 4c5f7207 Diego Biurrun
   enabled code which breaks compilation or compiles but does not work or
1535 7a57b90c Michael Niedermayer
   breaks the regression tests)
1536
   You can commit unfinished stuff (for testing etc), but it must be disabled
1537
   (#ifdef etc) by default so it does not interfere with other developers'
1538
   work.
1539 115329f1 Diego Biurrun
@item
1540 ce10ff8e Diego Biurrun
   You do not have to over-test things. If it works for you, and you think it
1541 4c5f7207 Diego Biurrun
   should work for others, then commit. If your code has problems
1542
   (portability, triggers compiler bugs, unusual environment etc) they will be
1543 7a57b90c Michael Niedermayer
   reported and eventually fixed.
1544 115329f1 Diego Biurrun
@item
1545 7a57b90c Michael Niedermayer
   Do not commit unrelated changes together, split them into self-contained
1546 ce10ff8e Diego Biurrun
   pieces. Also do not forget that if part B depends on part A, but A does not
1547
   depend on B, then A can and should be committed first and separate from B.
1548
   Keeping changes well split into self-contained parts makes reviewing and
1549
   understanding them on the commit log mailing list easier. This also helps
1550
   in case of debugging later on.
1551
   Also if you have doubts about splitting or not splitting, do not hesitate to
1552 442d1598 Reimar Döffinger
   ask/discuss it on the developer mailing list.
1553 7a57b90c Michael Niedermayer
@item
1554
   Do not change behavior of the program (renaming options etc) without
1555 019c8838 Diego Biurrun
   first discussing it on the ffmpeg-devel mailing list. Do not remove
1556 7a57b90c Michael Niedermayer
   functionality from the code. Just improve!
1557 115329f1 Diego Biurrun
1558 4c5f7207 Diego Biurrun
   Note: Redundant code can be removed.
1559 7a57b90c Michael Niedermayer
@item
1560
   Do not commit changes to the build system (Makefiles, configure script)
1561 019c8838 Diego Biurrun
   which change behavior, defaults etc, without asking first. The same
1562 7a57b90c Michael Niedermayer
   applies to compiler warning fixes, trivial looking fixes and to code
1563
   maintained by other developers. We usually have a reason for doing things
1564 019c8838 Diego Biurrun
   the way we do. Send your changes as patches to the ffmpeg-devel mailing
1565 7a57b90c Michael Niedermayer
   list, and if the code maintainers say OK, you may commit. This does not
1566
   apply to files you wrote and/or maintain.
1567
@item
1568
   We refuse source indentation and other cosmetic changes if they are mixed
1569
   with functional changes, such commits will be rejected and removed. Every
1570
   developer has his own indentation style, you should not change it. Of course
1571
   if you (re)write something, you can use your own style, even though we would
1572 4c5f7207 Diego Biurrun
   prefer if the indentation throughout FFmpeg was consistent (Many projects
1573 ce10ff8e Diego Biurrun
   force a given indentation style - we do not.). If you really need to make
1574 7a57b90c Michael Niedermayer
   indentation changes (try to avoid this), separate them strictly from real
1575
   changes.
1576
1577 114afa9c Diego Biurrun
   NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code,
1578 ce10ff8e Diego Biurrun
   then either do NOT change the indentation of the inner part within (do not
1579 019c8838 Diego Biurrun
   move it to the right)! or do so in a separate commit
1580 7a57b90c Michael Niedermayer
@item
1581
   Always fill out the commit log message. Describe in a few lines what you
1582
   changed and why. You can refer to mailing list postings if you fix a
1583
   particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
1584
@item
1585
   If you apply a patch by someone else, include the name and email address in
1586 1c1b5a40 Diego Biurrun
   the log message. Since the ffmpeg-cvslog mailing list is publicly
1587 019c8838 Diego Biurrun
   archived you should add some SPAM protection to the email address. Send an
1588
   answer to ffmpeg-devel (or wherever you got the patch from) saying that
1589 7a57b90c Michael Niedermayer
   you applied the patch.
1590
@item
1591 b092d033 Benoit Fouet
   When applying patches that have been discussed (at length) on the mailing
1592
   list, reference the thread in the log message.
1593
@item
1594 5ab0f204 Diego Biurrun
    Do NOT commit to code actively maintained by others without permission.
1595
    Send a patch to ffmpeg-devel instead. If noone answers within a reasonable
1596
    timeframe (12h for build failures and security fixes, 3 days small changes,
1597 ce10ff8e Diego Biurrun
    1 week for big patches) then commit your patch if you think it is OK.
1598 5ab0f204 Diego Biurrun
    Also note, the maintainer can simply ask for more time to review!
1599 7a57b90c Michael Niedermayer
@item
1600 1c1b5a40 Diego Biurrun
    Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits
1601 7a57b90c Michael Niedermayer
    are sent there and reviewed by all the other developers. Bugs and possible
1602
    improvements or general questions regarding commits are discussed there. We
1603
    expect you to react if problems with your code are uncovered.
1604
@item
1605
    Update the documentation if you change behavior or add features. If you are
1606 019c8838 Diego Biurrun
    unsure how best to do this, send a patch to ffmpeg-devel, the documentation
1607 7a57b90c Michael Niedermayer
    maintainer(s) will review and commit your stuff.
1608
@item
1609 0541f2c4 Michael Niedermayer
    Try to keep important discussions and requests (also) on the public
1610
    developer mailing list, so that all developers can benefit from them.
1611
@item
1612 4c5f7207 Diego Biurrun
    Never write to unallocated memory, never write over the end of arrays,
1613
    always check values read from some untrusted source before using them
1614
    as array index or other risky things.
1615 76bec1d8 Alexander Strasser
@item
1616
    Remember to check if you need to bump versions for the specific libav
1617 f0efbde7 Diego Biurrun
    parts (libavutil, libavcodec, libavformat) you are changing. You need
1618 76bec1d8 Alexander Strasser
    to change the version integer and the version string.
1619
    Incrementing the first component means no backward compatibility to
1620 a940b428 Michael Niedermayer
    previous versions (e.g. removal of a function from the public API).
1621 76bec1d8 Alexander Strasser
    Incrementing the second component means backward compatible change
1622 a940b428 Michael Niedermayer
    (e.g. addition of a function to the public API).
1623 76bec1d8 Alexander Strasser
    Incrementing the third component means a noteworthy binary compatible
1624
    change (e.g. encoder bug fix that matters for the decoder).
1625 ebd32fd7 Diego Biurrun
@item
1626 3f1965c4 Diego Biurrun
    If you add a new codec, remember to update the changelog, add it to
1627
    the supported codecs table in the documentation and bump the second
1628
    component of the @file{libavcodec} version number appropriately. If
1629
    it has a fourcc, add it to @file{libavformat/avienc.c}, even if it
1630
    is only a decoder.
1631 65d0bea8 Michael Niedermayer
@item
1632 ce10ff8e Diego Biurrun
    Do not change code to hide warnings without ensuring that the underlying
1633
    logic is correct and thus the warning was inappropriate.
1634 bca098f5 Diego Biurrun
@item
1635
    If you add a new file, give it a proper license header. Do not copy and
1636
    paste it from a random place, use an existing file as template.
1637 114afa9c Diego Biurrun
@end enumerate
1638 7a57b90c Michael Niedermayer
1639
We think our rules are not too hard. If you have comments, contact us.
1640
1641
Note, these rules are mostly borrowed from the MPlayer project.
1642
1643 9181577c Fabrice Bellard
@section Submitting patches
1644
1645 ce10ff8e Diego Biurrun
First, (@pxref{Coding Rules}) above if you did not yet.
1646 80d1c272 Michael Niedermayer
1647 6a6810b1 Michael Niedermayer
When you submit your patch, try to send a unified diff (diff '-up'
1648 9181577c Fabrice Bellard
option). I cannot read other diffs :-)
1649
1650 6e5c1877 Michael Niedermayer
Also please do not submit patches which contain several unrelated changes.
1651 115329f1 Diego Biurrun
Split them into individual self-contained patches; this makes reviewing
1652 7885603a Michael Niedermayer
them much easier.
1653
1654 9181577c Fabrice Bellard
Run the regression tests before submitting a patch so that you can
1655 6bf40f39 Philip Gladstone
verify that there are no big problems.
1656 9181577c Fabrice Bellard
1657
Patches should be posted as base64 encoded attachments (or any other
1658 ce10ff8e Diego Biurrun
encoding which ensures that the patch will not be trashed during
1659 115329f1 Diego Biurrun
transmission) to the ffmpeg-devel mailing list, see
1660 2b165e29 Diego Biurrun
@url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel}
1661 9181577c Fabrice Bellard
1662 54fcf429 Michael Niedermayer
It also helps quite a bit if you tell us what the patch does (for example
1663 4c5f7207 Diego Biurrun
'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant
1664 54fcf429 Michael Niedermayer
and has no lrint()')
1665
1666 442d1598 Reimar Döffinger
Also please if you send several patches, send each patch as separate mail,
1667
do not attach several unrelated patches to the same mail.
1668 a15bcf70 Michael Niedermayer
1669 dd597cd7 Michael Niedermayer
@section patch submission checklist
1670
1671
@enumerate
1672
@item
1673
    Do the regression tests pass with the patch applied?
1674
@item
1675
    Is the patch a unified diff?
1676
@item
1677 4a7a0908 Diego Biurrun
    Is the patch against latest FFmpeg SVN?
1678 dd597cd7 Michael Niedermayer
@item
1679
    Are you subscribed to ffmpeg-dev?
1680
    (the list is subscribers only due to spam)
1681
@item
1682
    Have you checked that the changes are minimal, so that the same cannot be
1683 442d1598 Reimar Döffinger
    achieved with a smaller patch and/or simpler final code?
1684 dd597cd7 Michael Niedermayer
@item
1685 4a7a0908 Diego Biurrun
    If the change is to speed critical code, did you benchmark it?
1686 dd597cd7 Michael Niedermayer
@item
1687 b0fee7c5 Diego Biurrun
    If you did any benchmarks, did you provide them in the mail?
1688
@item
1689 442d1598 Reimar Döffinger
    Have you checked that the patch does not introduce buffer overflows or
1690 dd597cd7 Michael Niedermayer
    other security issues?
1691
@item
1692 4a7a0908 Diego Biurrun
    Is the patch created from the root of the source tree, so it can be
1693
    applied with @code{patch -p0}?
1694 dd597cd7 Michael Niedermayer
@item
1695
    Does the patch not mix functional and cosmetic changes?
1696
@item
1697 e300ab4e Diego Biurrun
    Did you add tabs or trailing whitespace to the code? Both are forbidden.
1698
@item
1699 dd597cd7 Michael Niedermayer
    Is the patch attached to the email you send?
1700
@item
1701 4a7a0908 Diego Biurrun
    Is the mime type of the patch correct? It should be text/x-diff or
1702
    text/x-patch or at least text/plain and not application/octet-stream.
1703 dd597cd7 Michael Niedermayer
@item
1704 4a7a0908 Diego Biurrun
    If the patch fixes a bug, did you provide a verbose analysis of the bug?
1705 dd597cd7 Michael Niedermayer
@item
1706 4a7a0908 Diego Biurrun
    If the patch fixes a bug, did you provide enough information, including
1707 dd597cd7 Michael Niedermayer
    a sample, so the bug can be reproduced and the fix can be verified?
1708
@item
1709
    Did you provide a verbose summary about what the patch does change?
1710
@item
1711
    Did you provide a verbose explanation why it changes things like it does?
1712
@item
1713 442d1598 Reimar Döffinger
    Did you provide a verbose summary of the user visible advantages and
1714 dd597cd7 Michael Niedermayer
    disadvantages if the patch is applied?
1715
@item
1716
    Did you provide an example so we can verify the new feature added by the
1717
    patch easily?
1718
@item
1719 bbe94afb Diego Biurrun
    If you added a new file, did you insert a license header? It should be
1720 6baa2943 Diego Biurrun
    taken from FFmpeg, not randomly copied and pasted from somewhere else.
1721 6e4bc6ee Diego Biurrun
@item
1722 d9a3c855 Michael Niedermayer
    You should maintain alphabetical order in alphabetically ordered lists as
1723
    long as doing so does not break API/ABI compatibility.
1724 2f954ef2 Michael Niedermayer
@item
1725
    Did you provide a suggestion for a clear commit log message?
1726 dd597cd7 Michael Niedermayer
@end enumerate
1727
1728 f5f11d71 Michael Niedermayer
@section Patch review process
1729
1730
All patches posted to ffmpeg-devel will be reviewed, unless they contain a
1731
clear note that the patch is not for SVN.
1732
Reviews and comments will be posted as replies to the patch on the
1733 ce10ff8e Diego Biurrun
mailing list. The patch submitter then has to take care of every comment,
1734 442d1598 Reimar Döffinger
that can be by resubmitting a changed patch or by discussion. Resubmitted
1735 ce10ff8e Diego Biurrun
patches will themselves be reviewed like any other patch. If at some point
1736 f5f11d71 Michael Niedermayer
a patch passes review with no comments then it is approved, that can for
1737 ce10ff8e Diego Biurrun
simple and small patches happen immediately while large patches will generally
1738 f5f11d71 Michael Niedermayer
have to be changed and reviewed many times before they are approved.
1739 ce10ff8e Diego Biurrun
After a patch is approved it will be committed to the repository.
1740 f5f11d71 Michael Niedermayer
1741
We will review all submitted patches, but sometimes we are quite busy so
1742
especially for large patches this can take several weeks.
1743
1744
When resubmitting patches, please do not make any significant changes
1745 ce10ff8e Diego Biurrun
not related to the comments received during review. Such patches will
1746
be rejected. Instead, submit  significant changes or new features as
1747
separate patches.
1748 cf7f2b16 Michael Niedermayer
1749 9181577c Fabrice Bellard
@section Regression tests
1750
1751 1c1b5a40 Diego Biurrun
Before submitting a patch (or committing to the repository), you should at least
1752 9181577c Fabrice Bellard
test that you did not break anything.
1753
1754 4c5f7207 Diego Biurrun
The regression tests build a synthetic video stream and a synthetic
1755
audio stream. These are then encoded and decoded with all codecs or
1756 9181577c Fabrice Bellard
formats. The CRC (or MD5) of each generated file is recorded in a
1757 4c5f7207 Diego Biurrun
result file. A 'diff' is launched to compare the reference results and
1758 9181577c Fabrice Bellard
the result file.
1759
1760 4c5f7207 Diego Biurrun
The regression tests then go on to test the FFserver code with a
1761 6bf40f39 Philip Gladstone
limited set of streams. It is important that this step runs correctly
1762
as well.
1763
1764 36d9b4e8 Michael Niedermayer
Run 'make test' to test all the codecs and formats.
1765 9181577c Fabrice Bellard
1766 4c5f7207 Diego Biurrun
Run 'make fulltest' to test all the codecs, formats and FFserver.
1767 9181577c Fabrice Bellard
1768 4c5f7207 Diego Biurrun
[Of course, some patches may change the results of the regression tests. In
1769
this case, the reference results of the regression tests shall be modified
1770 9181577c Fabrice Bellard
accordingly].
1771
1772
@bye