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