Compare commits
239 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1014e20492 | ||
![]() |
431cf16963 | ||
![]() |
e85296beae | ||
![]() |
62c4739348 | ||
![]() |
7efa13b4b4 | ||
![]() |
a5e0afe3c9 | ||
![]() |
42f0a66968 | ||
![]() |
f1c9dbe40b | ||
![]() |
b945f558c7 | ||
![]() |
90a4a46747 | ||
![]() |
6d6254ba9f | ||
![]() |
ae24b5ce3a | ||
![]() |
c9c7db0af2 | ||
![]() |
e1a2bcbec8 | ||
![]() |
d32ea79ea2 | ||
![]() |
6b156c4563 | ||
![]() |
57eb787ed3 | ||
![]() |
dbe7e209df | ||
![]() |
cfb9b47a1e | ||
![]() |
b26c1a8b7e | ||
![]() |
ccd2ca0246 | ||
![]() |
92b964969b | ||
![]() |
ca87ec53e9 | ||
![]() |
bd071de29a | ||
![]() |
8ddc0b491d | ||
![]() |
94aacaf508 | ||
![]() |
8d68083298 | ||
![]() |
e28bb18fdc | ||
![]() |
a62779d986 | ||
![]() |
201fcfb894 | ||
![]() |
8856c4c5c9 | ||
![]() |
0f7bf1786e | ||
![]() |
b99366faef | ||
![]() |
da0900e8bb | ||
![]() |
d5551d7884 | ||
![]() |
35f1888585 | ||
![]() |
7cd7461ec8 | ||
![]() |
23f622de60 | ||
![]() |
19a99b6e6b | ||
![]() |
117e04cdfa | ||
![]() |
5d6fe49ac9 | ||
![]() |
9f28eede5e | ||
![]() |
6f70111e81 | ||
![]() |
4492523938 | ||
![]() |
a97e82c487 | ||
![]() |
f79f3a946f | ||
![]() |
5394cdf775 | ||
![]() |
7f163e5a87 | ||
![]() |
23999c45bc | ||
![]() |
14fae6eab0 | ||
![]() |
f5a8c4242e | ||
![]() |
1edc513bcf | ||
![]() |
9864518544 | ||
![]() |
4ccb8f5b7b | ||
![]() |
01b9a6e447 | ||
![]() |
34d2fe6860 | ||
![]() |
e7746f834a | ||
![]() |
973bdafe05 | ||
![]() |
f4a5a730d8 | ||
![]() |
603a282f8f | ||
![]() |
36c196bca4 | ||
![]() |
7b733e4b7f | ||
![]() |
e07086d8ae | ||
![]() |
d2411412f1 | ||
![]() |
0facc63ff6 | ||
![]() |
5ed9457260 | ||
![]() |
002e6d185c | ||
![]() |
81d5ceff04 | ||
![]() |
86849f0976 | ||
![]() |
84fce203bd | ||
![]() |
572e94bc51 | ||
![]() |
7487d53d01 | ||
![]() |
21ad6e08e4 | ||
![]() |
feca20021c | ||
![]() |
394c3e78d5 | ||
![]() |
2fc39af1de | ||
![]() |
973d752dfb | ||
![]() |
3cc3f351a6 | ||
![]() |
222d18ab20 | ||
![]() |
7a6bba627d | ||
![]() |
9f95d7aab3 | ||
![]() |
fe4a355805 | ||
![]() |
88ea7ca627 | ||
![]() |
03ef9828b5 | ||
![]() |
2ad6e14457 | ||
![]() |
39c8434bce | ||
![]() |
701dd6eab0 | ||
![]() |
f5d14a92cb | ||
![]() |
b5c3b18bfc | ||
![]() |
8539ea3265 | ||
![]() |
9848e1be2d | ||
![]() |
66ebf37c73 | ||
![]() |
036fefebb9 | ||
![]() |
1916656641 | ||
![]() |
ace432f62c | ||
![]() |
f8969f8ea9 | ||
![]() |
36f3244ec8 | ||
![]() |
553ae88b2e | ||
![]() |
9b919571e5 | ||
![]() |
99d3772ef4 | ||
![]() |
15cfc6c97d | ||
![]() |
b4eafa8b04 | ||
![]() |
2b2856bac2 | ||
![]() |
52f9b632b5 | ||
![]() |
79e0cbae33 | ||
![]() |
7fc5bffb54 | ||
![]() |
4940d1c0ae | ||
![]() |
b0f8fdc411 | ||
![]() |
ba1927dda9 | ||
![]() |
dda2062c31 | ||
![]() |
5d01cd8429 | ||
![]() |
f9bf2a4ab1 | ||
![]() |
cf69619141 | ||
![]() |
2d782b9646 | ||
![]() |
5e3d023702 | ||
![]() |
4ac56bf7dc | ||
![]() |
a38489c0d8 | ||
![]() |
a5200fac2c | ||
![]() |
32b0876fb5 | ||
![]() |
e33f58af5a | ||
![]() |
540c6cca6e | ||
![]() |
08f5b2464d | ||
![]() |
79a16f0cac | ||
![]() |
9ad774ff33 | ||
![]() |
84149812a6 | ||
![]() |
d41187cb9e | ||
![]() |
094e849f32 | ||
![]() |
ba90f93852 | ||
![]() |
93883b0c39 | ||
![]() |
61eb165514 | ||
9d1213912f | |||
![]() |
edf5072fea | ||
![]() |
32fa7cecd7 | ||
![]() |
b9ebd7dc7d | ||
![]() |
55b6e09e5e | ||
![]() |
aa48d9e64c | ||
![]() |
d7e98ea6ac | ||
![]() |
8182bcae90 | ||
![]() |
522f1861ca | ||
![]() |
44f91788a5 | ||
![]() |
03b47bb8d7 | ||
![]() |
05b4e4fe49 | ||
![]() |
3229bf8573 | ||
![]() |
db06ddf8c6 | ||
![]() |
eb4b8b96fc | ||
![]() |
373010971e | ||
![]() |
c3cd8890fe | ||
![]() |
20d4a1f020 | ||
![]() |
e5880b3f24 | ||
![]() |
4b51239df3 | ||
![]() |
4979362ae4 | ||
![]() |
0546386dff | ||
![]() |
70ea5176a5 | ||
![]() |
661092004f | ||
![]() |
f7f9f18f83 | ||
![]() |
55291e37f5 | ||
![]() |
1f1d2fa75c | ||
![]() |
2a546cecbf | ||
![]() |
8f3504c3ca | ||
![]() |
bf20d5e4bb | ||
![]() |
3fa19f6828 | ||
![]() |
4e62a67389 | ||
![]() |
46ac6315fd | ||
9052b5b73b | |||
![]() |
9181adff9c | ||
![]() |
8261cce1f0 | ||
![]() |
df62b0d9f5 | ||
![]() |
e63d03e7e2 | ||
![]() |
7920dc8802 | ||
![]() |
057287c9cd | ||
![]() |
1746657479 | ||
![]() |
0ff244dea2 | ||
![]() |
0078216f07 | ||
![]() |
12ca60ec15 | ||
![]() |
2c3439b008 | ||
![]() |
cdfe333493 | ||
![]() |
5f1a8c5e80 | ||
![]() |
b5afece607 | ||
![]() |
6ae05f541a | ||
![]() |
9d3bb3501d | ||
![]() |
0b374e40b1 | ||
![]() |
a2a26d108b | ||
![]() |
49aa53f2d7 | ||
![]() |
fb2fc3a4f0 | ||
![]() |
36edfb558b | ||
![]() |
4a7c99d6f3 | ||
![]() |
327afd42b4 | ||
![]() |
a22222dadb | ||
![]() |
28631e9393 | ||
![]() |
f8a6c707a5 | ||
![]() |
c9b841c2b1 | ||
![]() |
15b20ef6f9 | ||
![]() |
1dea5cfbb0 | ||
![]() |
d48539fb85 | ||
![]() |
a14f86aac7 | ||
![]() |
6438cb834c | ||
![]() |
ed2b1f80fa | ||
![]() |
3d24c2ce02 | ||
![]() |
7d8b893b7e | ||
![]() |
e6ef35bc22 | ||
![]() |
3588e6b7c5 | ||
![]() |
34a0dee17e | ||
![]() |
b9a35435a5 | ||
![]() |
85ed859e6b | ||
![]() |
fcaba83909 | ||
![]() |
daf864016d | ||
![]() |
7454142424 | ||
![]() |
a7216204eb | ||
![]() |
cff1f85c3f | ||
![]() |
dd92ff49c9 | ||
![]() |
b12045c8c7 | ||
![]() |
a70e7cc928 | ||
![]() |
6f8fbbf8d7 | ||
![]() |
b68d9df427 | ||
![]() |
26fe0ec7d6 | ||
![]() |
7590718414 | ||
![]() |
37a0852009 | ||
![]() |
b50601e882 | ||
![]() |
d1026ab506 | ||
![]() |
08a441d4ad | ||
![]() |
369e37e900 | ||
![]() |
40630a90ed | ||
![]() |
dc04fb36d7 | ||
![]() |
8740ed496c | ||
![]() |
77a023f422 | ||
![]() |
ba9cecf5e5 | ||
![]() |
8ab1409a59 | ||
![]() |
3589ac6334 | ||
![]() |
dd68bb3cab | ||
![]() |
50dab63690 | ||
![]() |
da8e4f5f79 | ||
![]() |
e0e0283778 | ||
![]() |
1673bf86d6 | ||
![]() |
0db6f6cfed | ||
![]() |
9d08b20fea | ||
![]() |
a03dcb9682 | ||
![]() |
26899578f1 | ||
![]() |
eb9df4ac33 | ||
![]() |
64c2076bfc |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -7,10 +7,6 @@
|
|||||||
*-example
|
*-example
|
||||||
*-test
|
*-test
|
||||||
*_g
|
*_g
|
||||||
*.def
|
|
||||||
*.dll
|
|
||||||
*.lib
|
|
||||||
*.exp
|
|
||||||
config.*
|
config.*
|
||||||
doc/*.1
|
doc/*.1
|
||||||
doc/*.html
|
doc/*.html
|
||||||
@@ -20,9 +16,6 @@ ffmpeg
|
|||||||
ffplay
|
ffplay
|
||||||
ffprobe
|
ffprobe
|
||||||
ffserver
|
ffserver
|
||||||
libavcodec/*_tablegen
|
|
||||||
libavcodec/*_tables.c
|
|
||||||
libavcodec/*_tables.h
|
|
||||||
libavcodec/libavcodec*
|
libavcodec/libavcodec*
|
||||||
libavcore/libavcore*
|
libavcore/libavcore*
|
||||||
libavdevice/libavdevice*
|
libavdevice/libavdevice*
|
||||||
@@ -36,6 +29,7 @@ tests/audiogen
|
|||||||
tests/base64
|
tests/base64
|
||||||
tests/data
|
tests/data
|
||||||
tests/rotozoom
|
tests/rotozoom
|
||||||
|
tests/seek_test
|
||||||
tests/tiny_psnr
|
tests/tiny_psnr
|
||||||
tests/videogen
|
tests/videogen
|
||||||
tests/vsynth1
|
tests/vsynth1
|
||||||
@@ -47,4 +41,5 @@ tools/pktdumper
|
|||||||
tools/probetest
|
tools/probetest
|
||||||
tools/qt-faststart
|
tools/qt-faststart
|
||||||
tools/trasher
|
tools/trasher
|
||||||
|
tools/trasher*.d
|
||||||
version.h
|
version.h
|
||||||
|
6
CREDITS
6
CREDITS
@@ -1,7 +1,5 @@
|
|||||||
This file contains the names of some of the people who have contributed to
|
This file contains the name of the people who have contributed to
|
||||||
FFmpeg. The names are sorted alphabetically by last name. As this file is
|
FFmpeg. The names are sorted alphabetically by last name.
|
||||||
currently quite outdated and git serves as a much better tool for determining
|
|
||||||
authorship, it remains here for historical reasons only.
|
|
||||||
|
|
||||||
Dénes Balatoni
|
Dénes Balatoni
|
||||||
Michel Bardiaux
|
Michel Bardiaux
|
||||||
|
706
Changelog
Normal file
706
Changelog
Normal file
@@ -0,0 +1,706 @@
|
|||||||
|
Entries are sorted chronologically from oldest to youngest within each release,
|
||||||
|
releases are sorted from youngest to oldest.
|
||||||
|
|
||||||
|
version 0.6.5:
|
||||||
|
- vorbis: An additional defense in the Vorbis codec. (CVE-2011-3895)
|
||||||
|
- vorbisdec: Fix decoding bug with channel handling.
|
||||||
|
- matroskadec: Fix a bug where a pointer was cached to an array that might
|
||||||
|
later move due to a realloc(). (CVE-2011-3893)
|
||||||
|
- vorbis: Avoid some out-of-bounds reads. (CVE-2011-3893)
|
||||||
|
- vp3: fix oob read for negative tokens and memleaks on error, (CVE-2011-3892)
|
||||||
|
- vp3: fix streams with non-zero last coefficient.
|
||||||
|
|
||||||
|
|
||||||
|
version 0.6.4:
|
||||||
|
- 4xm: Add a check in decode_i_frame to prevent buffer overreads
|
||||||
|
- wma: initialize prev_block_len_bits, next_block_len_bits, and block_len_bits.
|
||||||
|
- swscale: #include "libavutil/mathematics.h"
|
||||||
|
- vp3dec: Check coefficient index in vp3_dequant() (CVE-2011-4352)
|
||||||
|
- svq1dec: call avcodec_set_dimensions() after dimensions changed. (CVE-2011-4579)
|
||||||
|
- commits related to CVE-2011-4353:
|
||||||
|
- vp6: Fix illegal read.
|
||||||
|
- vp6: Reset the internal state when aborting key frames header parsing
|
||||||
|
- vp6: Check for huffman tree build errors
|
||||||
|
- vp6: partially propagate huffman tree building errors during coeff model parsing and fix misspelling
|
||||||
|
- commits related to CVE-2011-4351:
|
||||||
|
- qdm2: check output buffer size before decoding
|
||||||
|
- Fix qdm2 decoder packet handling to match the api
|
||||||
|
- Fix out of bound reads in the QDM2 decoder.
|
||||||
|
- Check for out of bound writes in the QDM2 decoder.
|
||||||
|
- vmd: fix segfaults on corruped streams (CVE-2011-4364)
|
||||||
|
- rv34: Check for invalid slice offsets
|
||||||
|
- rv34: Fix potential overreads
|
||||||
|
- rv34: Avoid NULL dereference on corrupted bitstream
|
||||||
|
- rv10: Reject slices that does not have the same type as the first one
|
||||||
|
- oggdec: fix out of bound write in the ogg demuxer
|
||||||
|
- smacker: fix a few off by 1 errors
|
||||||
|
- Check for invalid VLC value in smacker decoder.
|
||||||
|
- Check and propagate errors when VLC trees cannot be built in smacker decoder.
|
||||||
|
- Fixed off by one packet size allocation in the smacker demuxer.
|
||||||
|
- Check for invalid packet size in the smacker demuxer.
|
||||||
|
- ape demuxer: fix segfault on memory allocation failure.
|
||||||
|
- Fixed size given to init_get_bits() in xan decoder.
|
||||||
|
- smacker demuxer: handle possible av_realloc() failure.
|
||||||
|
- Fixed segfault with wavpack decoder on corrupted decorrelation terms sub-blocks.
|
||||||
|
- indeo2: fail if input buffer too small
|
||||||
|
- indeo2: init_get_bits size in bits instead of bytes
|
||||||
|
- wavpack: Check error codes rather than working around error conditions.
|
||||||
|
- Fixed invalid writes and reads in wavpack decoder on corrupted bitstreams.
|
||||||
|
- cpu detection: avoid a signed overflow
|
||||||
|
- h264: correct implicit weight table computation for long ref pics
|
||||||
|
- h264: correct the check for invalid long term frame index in MMCO decode
|
||||||
|
- rv10/20: tell decoder to use edge emulation
|
||||||
|
- flvenc: use int64_t to store offsets
|
||||||
|
- VC-1: fix reading of custom PAR.
|
||||||
|
- h264: notice memory allocation failure
|
||||||
|
- libx264: do not set pic quality if no frame is output
|
||||||
|
- mxfdec: Include FF_INPUT_BUFFER_PADDING_SIZE when allocating extradata.
|
||||||
|
- rv30: return AVERROR(EINVAL) instead of EINVAL
|
||||||
|
- Do not decode RV30 files if the extradata is too small
|
||||||
|
- aacps: skip some memcpy() if src and dst would be equal
|
||||||
|
- mpegts: fix Continuity Counter error detection
|
||||||
|
- alsa: fallback to buffer_size/4 for period_size.
|
||||||
|
- mxfenc: fix ignored drop flag in binary timecode representation.
|
||||||
|
- dca: set AVCodecContext frame_size for DTS audio
|
||||||
|
- H.264: fix overreads of qscale_table
|
||||||
|
- postprocess.c: filter name needs to be double 0 terminated
|
||||||
|
- Replace strncpy() with av_strlcpy() in libpostproc.
|
||||||
|
- jpegdec: actually search for and parse RSTn
|
||||||
|
- riff: Add mpgv MPEG-2 fourcc
|
||||||
|
- Added M701 codec_tag for mpeg2video
|
||||||
|
|
||||||
|
|
||||||
|
version 0.6.3:
|
||||||
|
|
||||||
|
- fix compilation with --enable-hardcoded-tables
|
||||||
|
- mjpeg: Detect overreads in mjpeg_decode_scan() and error out.
|
||||||
|
- aac: add headers needed for log2f()
|
||||||
|
- lavf: inspect more frames for fps when container time base is coarse
|
||||||
|
- AMV: disable DR1 and don't override EMU_EDGE
|
||||||
|
(addresses http://seclists.org/bugtraq/2011/Apr/257)
|
||||||
|
- Fix memory (re)allocation in matroskadec.c (MSVR11-011/CVE-2011-3504)
|
||||||
|
- Fix some crashes with invalid bitstreams in the CAVS decoder
|
||||||
|
(CVE-2011-3362, CVE-2011-3973, CVE-2011-3974)
|
||||||
|
- Compilation fixes for gcc-4.6, testsuite now passes again
|
||||||
|
- Fix a heap corruption issue in the OGG decoder
|
||||||
|
- Backported the Android VisualOn AAC encoder wrapper from 0.7.2
|
||||||
|
|
||||||
|
|
||||||
|
version 0.6.3:
|
||||||
|
|
||||||
|
- AMV: Fix possibly exploitable crash.
|
||||||
|
- Fix apparently exploitable race condition.
|
||||||
|
(addresses http://seclists.org/bugtraq/2011/Apr/257)
|
||||||
|
|
||||||
|
version 0.6.2:
|
||||||
|
|
||||||
|
- fix compilation with --enable-hardcoded-tables
|
||||||
|
- Fix invalid reads in VC-1 decoding (related to CVE-2011-0723)
|
||||||
|
- Do not attempt to decode APE file with no frames
|
||||||
|
(adresses http://packetstorm.linuxsecurity.com/1103-exploits/vlc105-dos.txt)
|
||||||
|
|
||||||
|
|
||||||
|
version 0.6.1:
|
||||||
|
|
||||||
|
- fix autodetection of E-AC-3 substream samples
|
||||||
|
- performance fix for seekable HTTP
|
||||||
|
- backport AAC-HE v2 from trunk
|
||||||
|
- add missing VP80 fourcc code for the VP8 codec
|
||||||
|
- small documentation fixes
|
||||||
|
- fix several potentially exploitable issues in the FLIC decoder
|
||||||
|
(addresses CVE-2010-3429)
|
||||||
|
|
||||||
|
|
||||||
|
version 0.6:
|
||||||
|
|
||||||
|
- PB-frame decoding for H.263
|
||||||
|
- deprecated vhook subsystem removed
|
||||||
|
- deprecated old scaler removed
|
||||||
|
- VQF demuxer
|
||||||
|
- alpha channel scaler
|
||||||
|
- PCX encoder
|
||||||
|
- RTP packetization of H.263
|
||||||
|
- RTP packetization of AMR
|
||||||
|
- RTP depacketization of Vorbis
|
||||||
|
- CorePNG decoding support
|
||||||
|
- Cook multichannel decoding support
|
||||||
|
- introduced avlanguage helpers in libavformat
|
||||||
|
- 8088flex TMV demuxer and decoder
|
||||||
|
- per-stream language-tags extraction in asfdec
|
||||||
|
- V210 decoder and encoder
|
||||||
|
- remaining GPL parts in AC-3 decoder converted to LGPL
|
||||||
|
- QCP demuxer
|
||||||
|
- SoX native format muxer and demuxer
|
||||||
|
- AMR-NB decoding/encoding, AMR-WB decoding via OpenCORE libraries
|
||||||
|
- DPX image decoder
|
||||||
|
- Electronic Arts Madcow decoder
|
||||||
|
- DivX (XSUB) subtitle encoder
|
||||||
|
- nonfree libamr support for AMR-NB/WB decoding/encoding removed
|
||||||
|
- experimental AAC encoder
|
||||||
|
- RTP depacketization of ASF and RTSP from WMS servers
|
||||||
|
- RTMP support in libavformat
|
||||||
|
- noX handling for OPT_BOOL X options
|
||||||
|
- Wave64 demuxer
|
||||||
|
- IEC-61937 compatible Muxer
|
||||||
|
- TwinVQ decoder
|
||||||
|
- Bluray (PGS) subtitle decoder
|
||||||
|
- LPCM support in MPEG-TS (HDMV RID as found on Blu-ray disks)
|
||||||
|
- WMA Pro decoder
|
||||||
|
- Core Audio Format demuxer
|
||||||
|
- Atrac1 decoder
|
||||||
|
- MD STUDIO audio demuxer
|
||||||
|
- RF64 support in WAV demuxer
|
||||||
|
- MPEG-4 Audio Lossless Coding (ALS) decoder
|
||||||
|
- -formats option split into -formats, -codecs, -bsfs, and -protocols
|
||||||
|
- IV8 demuxer
|
||||||
|
- CDG demuxer and decoder
|
||||||
|
- R210 decoder
|
||||||
|
- Auravision Aura 1 and 2 decoders
|
||||||
|
- Deluxe Paint Animation playback system
|
||||||
|
- SIPR decoder
|
||||||
|
- Adobe Filmstrip muxer and demuxer
|
||||||
|
- RTP depacketization of H.263
|
||||||
|
- Bink demuxer and audio/video decoders
|
||||||
|
- enable symbol versioning by default for linkers that support it
|
||||||
|
- IFF PBM/ILBM bitmap decoder
|
||||||
|
- concat protocol
|
||||||
|
- Indeo 5 decoder
|
||||||
|
- RTP depacketization of AMR
|
||||||
|
- WMA Voice decoder
|
||||||
|
- ffprobe tool
|
||||||
|
- AMR-NB decoder
|
||||||
|
- RTSP muxer
|
||||||
|
- HE-AAC v1 decoder
|
||||||
|
- Kega Game Video (KGV1) decoder
|
||||||
|
- VorbisComment writing for FLAC, Ogg FLAC and Ogg Speex files
|
||||||
|
- RTP depacketization of Theora
|
||||||
|
- HTTP Digest authentication
|
||||||
|
- RTMP/RTMPT/RTMPS/RTMPE/RTMPTE protocol support via librtmp
|
||||||
|
- Psygnosis YOP demuxer and video decoder
|
||||||
|
- spectral extension support in the E-AC-3 decoder
|
||||||
|
- unsharp video filter
|
||||||
|
- RTP hinting in the mov/3gp/mp4 muxer
|
||||||
|
- Dirac in Ogg demuxing
|
||||||
|
- seek to keyframes in Ogg
|
||||||
|
- 4:2:2 and 4:4:4 Theora decoding
|
||||||
|
- 35% faster VP3/Theora decoding
|
||||||
|
- faster AAC decoding
|
||||||
|
- faster H.264 decoding
|
||||||
|
- WebM support in Matroska de/muxer
|
||||||
|
- low overhead Ogg muxing
|
||||||
|
- VP8 de/encoding via libvpx
|
||||||
|
- CODEC_CAP_EXPERIMENTAL added
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.5:
|
||||||
|
|
||||||
|
- DV50 AKA DVCPRO50 encoder, decoder, muxer and demuxer
|
||||||
|
- TechSmith Camtasia (TSCC) video decoder
|
||||||
|
- IBM Ultimotion (ULTI) video decoder
|
||||||
|
- Sierra Online audio file demuxer and decoder
|
||||||
|
- Apple QuickDraw (qdrw) video decoder
|
||||||
|
- Creative ADPCM audio decoder (16 bits as well as 8 bits schemes)
|
||||||
|
- Electronic Arts Multimedia (WVE/UV2/etc.) file demuxer
|
||||||
|
- Miro VideoXL (VIXL) video decoder
|
||||||
|
- H.261 video encoder
|
||||||
|
- QPEG video decoder
|
||||||
|
- Nullsoft Video (NSV) file demuxer
|
||||||
|
- Shorten audio decoder
|
||||||
|
- LOCO video decoder
|
||||||
|
- Apple Lossless Audio Codec (ALAC) decoder
|
||||||
|
- Winnov WNV1 video decoder
|
||||||
|
- Autodesk Animator Studio Codec (AASC) decoder
|
||||||
|
- Indeo 2 video decoder
|
||||||
|
- Fraps FPS1 video decoder
|
||||||
|
- Snow video encoder/decoder
|
||||||
|
- Sonic audio encoder/decoder
|
||||||
|
- Vorbis audio decoder
|
||||||
|
- Macromedia ADPCM decoder
|
||||||
|
- Duck TrueMotion 2 video decoder
|
||||||
|
- support for decoding FLX and DTA extensions in FLIC files
|
||||||
|
- H.264 custom quantization matrices support
|
||||||
|
- ffserver fixed, it should now be usable again
|
||||||
|
- QDM2 audio decoder
|
||||||
|
- Real Cooker audio decoder
|
||||||
|
- TrueSpeech audio decoder
|
||||||
|
- WMA2 audio decoder fixed, now all files should play correctly
|
||||||
|
- RealAudio 14.4 and 28.8 decoders fixed
|
||||||
|
- JPEG-LS decoder
|
||||||
|
- build system improvements
|
||||||
|
- tabs and trailing whitespace removed from the codebase
|
||||||
|
- CamStudio video decoder
|
||||||
|
- AIFF/AIFF-C audio format, encoding and decoding
|
||||||
|
- ADTS AAC file reading and writing
|
||||||
|
- Creative VOC file reading and writing
|
||||||
|
- American Laser Games multimedia (*.mm) playback system
|
||||||
|
- Zip Motion Blocks Video decoder
|
||||||
|
- improved Theora/VP3 decoder
|
||||||
|
- True Audio (TTA) decoder
|
||||||
|
- AVS demuxer and video decoder
|
||||||
|
- JPEG-LS encoder
|
||||||
|
- Smacker demuxer and decoder
|
||||||
|
- NuppelVideo/MythTV demuxer and RTjpeg decoder
|
||||||
|
- KMVC decoder
|
||||||
|
- MPEG-2 intra VLC support
|
||||||
|
- MPEG-2 4:2:2 encoder
|
||||||
|
- Flash Screen Video decoder
|
||||||
|
- GXF demuxer
|
||||||
|
- Chinese AVS decoder
|
||||||
|
- GXF muxer
|
||||||
|
- MXF demuxer
|
||||||
|
- VC-1/WMV3/WMV9 video decoder
|
||||||
|
- MacIntel support
|
||||||
|
- AVISynth support
|
||||||
|
- VMware video decoder
|
||||||
|
- VP5 video decoder
|
||||||
|
- VP6 video decoder
|
||||||
|
- WavPack lossless audio decoder
|
||||||
|
- Targa (.TGA) picture decoder
|
||||||
|
- Vorbis audio encoder
|
||||||
|
- Delphine Software .cin demuxer/audio and video decoder
|
||||||
|
- Tiertex .seq demuxer/video decoder
|
||||||
|
- MTV demuxer
|
||||||
|
- TIFF picture encoder and decoder
|
||||||
|
- GIF picture decoder
|
||||||
|
- Intel Music Coder decoder
|
||||||
|
- Zip Motion Blocks Video encoder
|
||||||
|
- Musepack decoder
|
||||||
|
- Flash Screen Video encoder
|
||||||
|
- Theora encoding via libtheora
|
||||||
|
- BMP encoder
|
||||||
|
- WMA encoder
|
||||||
|
- GSM-MS encoder and decoder
|
||||||
|
- DCA decoder
|
||||||
|
- DXA demuxer and decoder
|
||||||
|
- DNxHD decoder
|
||||||
|
- Gamecube movie (.THP) playback system
|
||||||
|
- Blackfin optimizations
|
||||||
|
- Interplay C93 demuxer and video decoder
|
||||||
|
- Bethsoft VID demuxer and video decoder
|
||||||
|
- CRYO APC demuxer
|
||||||
|
- Atrac3 decoder
|
||||||
|
- V.Flash PTX decoder
|
||||||
|
- RoQ muxer, RoQ audio encoder
|
||||||
|
- Renderware TXD demuxer and decoder
|
||||||
|
- extern C declarations for C++ removed from headers
|
||||||
|
- sws_flags command line option
|
||||||
|
- codebook generator
|
||||||
|
- RoQ video encoder
|
||||||
|
- QTRLE encoder
|
||||||
|
- OS/2 support removed and restored again
|
||||||
|
- AC-3 decoder
|
||||||
|
- NUT muxer
|
||||||
|
- additional SPARC (VIS) optimizations
|
||||||
|
- Matroska muxer
|
||||||
|
- slice-based parallel H.264 decoding
|
||||||
|
- Monkey's Audio demuxer and decoder
|
||||||
|
- AMV audio and video decoder
|
||||||
|
- DNxHD encoder
|
||||||
|
- H.264 PAFF decoding
|
||||||
|
- Nellymoser ASAO decoder
|
||||||
|
- Beam Software SIFF demuxer and decoder
|
||||||
|
- libvorbis Vorbis decoding removed in favor of native decoder
|
||||||
|
- IntraX8 (J-Frame) subdecoder for WMV2 and VC-1
|
||||||
|
- Ogg (Theora, Vorbis and FLAC) muxer
|
||||||
|
- The "device" muxers and demuxers are now in a new libavdevice library
|
||||||
|
- PC Paintbrush PCX decoder
|
||||||
|
- Sun Rasterfile decoder
|
||||||
|
- TechnoTrend PVA demuxer
|
||||||
|
- Linux Media Labs MPEG-4 (LMLM4) demuxer
|
||||||
|
- AVM2 (Flash 9) SWF muxer
|
||||||
|
- QT variant of IMA ADPCM encoder
|
||||||
|
- VFW grabber
|
||||||
|
- iPod/iPhone compatible mp4 muxer
|
||||||
|
- Mimic decoder
|
||||||
|
- MSN TCP Webcam stream demuxer
|
||||||
|
- RL2 demuxer / decoder
|
||||||
|
- IFF demuxer
|
||||||
|
- 8SVX audio decoder
|
||||||
|
- non-recursive Makefiles
|
||||||
|
- BFI demuxer
|
||||||
|
- MAXIS EA XA (.xa) demuxer / decoder
|
||||||
|
- BFI video decoder
|
||||||
|
- OMA demuxer
|
||||||
|
- MLP/TrueHD decoder
|
||||||
|
- Electronic Arts CMV decoder
|
||||||
|
- Motion Pixels Video decoder
|
||||||
|
- Motion Pixels MVI demuxer
|
||||||
|
- removed animated GIF decoder/demuxer
|
||||||
|
- D-Cinema audio muxer
|
||||||
|
- Electronic Arts TGV decoder
|
||||||
|
- Apple Lossless Audio Codec (ALAC) encoder
|
||||||
|
- AAC decoder
|
||||||
|
- floating point PCM encoder/decoder
|
||||||
|
- MXF muxer
|
||||||
|
- DV100 AKA DVCPRO HD decoder and demuxer
|
||||||
|
- E-AC-3 support added to AC-3 decoder
|
||||||
|
- Nellymoser ASAO encoder
|
||||||
|
- ASS and SSA demuxer and muxer
|
||||||
|
- liba52 wrapper removed
|
||||||
|
- SVQ3 watermark decoding support
|
||||||
|
- Speex decoding via libspeex
|
||||||
|
- Electronic Arts TGQ decoder
|
||||||
|
- RV40 decoder
|
||||||
|
- QCELP / PureVoice decoder
|
||||||
|
- RV30 decoder
|
||||||
|
- hybrid WavPack support
|
||||||
|
- R3D REDCODE demuxer
|
||||||
|
- ALSA support for playback and record
|
||||||
|
- Electronic Arts TQI decoder
|
||||||
|
- OpenJPEG based JPEG 2000 decoder
|
||||||
|
- NC (NC4600) camera file demuxer
|
||||||
|
- Gopher client support
|
||||||
|
- MXF D-10 muxer
|
||||||
|
- generic metadata API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.9-pre1:
|
||||||
|
|
||||||
|
- DV encoder, DV muxer
|
||||||
|
- Microsoft RLE video decoder
|
||||||
|
- Microsoft Video-1 decoder
|
||||||
|
- Apple Animation (RLE) decoder
|
||||||
|
- Apple Graphics (SMC) decoder
|
||||||
|
- Apple Video (RPZA) decoder
|
||||||
|
- Cinepak decoder
|
||||||
|
- Sega FILM (CPK) file demuxer
|
||||||
|
- Westwood multimedia support (VQA & AUD files)
|
||||||
|
- Id Quake II CIN playback support
|
||||||
|
- 8BPS video decoder
|
||||||
|
- FLIC playback support
|
||||||
|
- RealVideo 2.0 (RV20) decoder
|
||||||
|
- Duck TrueMotion v1 (DUCK) video decoder
|
||||||
|
- Sierra VMD demuxer and video decoder
|
||||||
|
- MSZH and ZLIB decoder support
|
||||||
|
- SVQ1 video encoder
|
||||||
|
- AMR-WB support
|
||||||
|
- PPC optimizations
|
||||||
|
- rate distortion optimal cbp support
|
||||||
|
- rate distorted optimal ac prediction for MPEG-4
|
||||||
|
- rate distorted optimal lambda->qp support
|
||||||
|
- AAC encoding with libfaac
|
||||||
|
- Sunplus JPEG codec (SP5X) support
|
||||||
|
- use Lagrange multipler instead of QP for ratecontrol
|
||||||
|
- Theora/VP3 decoding support
|
||||||
|
- XA and ADX ADPCM codecs
|
||||||
|
- export MPEG-2 active display area / pan scan
|
||||||
|
- Add support for configuring with IBM XLC
|
||||||
|
- floating point AAN DCT
|
||||||
|
- initial support for zygo video (not complete)
|
||||||
|
- RGB ffv1 support
|
||||||
|
- new audio/video parser API
|
||||||
|
- av_log() system
|
||||||
|
- av_read_frame() and av_seek_frame() support
|
||||||
|
- missing last frame fixes
|
||||||
|
- seek by mouse in ffplay
|
||||||
|
- noise reduction of DCT coefficients
|
||||||
|
- H.263 OBMC & 4MV support
|
||||||
|
- H.263 alternative inter vlc support
|
||||||
|
- H.263 loop filter
|
||||||
|
- H.263 slice structured mode
|
||||||
|
- interlaced DCT support for MPEG-2 encoding
|
||||||
|
- stuffing to stay above min_bitrate
|
||||||
|
- MB type & QP visualization
|
||||||
|
- frame stepping for ffplay
|
||||||
|
- interlaced motion estimation
|
||||||
|
- alternate scantable support
|
||||||
|
- SVCD scan offset support
|
||||||
|
- closed GOP support
|
||||||
|
- SSE2 FDCT
|
||||||
|
- quantizer noise shaping
|
||||||
|
- G.726 ADPCM audio codec
|
||||||
|
- MS ADPCM encoding
|
||||||
|
- multithreaded/SMP motion estimation
|
||||||
|
- multithreaded/SMP encoding for MPEG-1/MPEG-2/MPEG-4/H.263
|
||||||
|
- multithreaded/SMP decoding for MPEG-2
|
||||||
|
- FLAC decoder
|
||||||
|
- Metrowerks CodeWarrior suppport
|
||||||
|
- H.263+ custom pcf support
|
||||||
|
- nicer output for 'ffmpeg -formats'
|
||||||
|
- Matroska demuxer
|
||||||
|
- SGI image format, encoding and decoding
|
||||||
|
- H.264 loop filter support
|
||||||
|
- H.264 CABAC support
|
||||||
|
- nicer looking arrows for the motion vector visualization
|
||||||
|
- improved VCD support
|
||||||
|
- audio timestamp drift compensation
|
||||||
|
- MPEG-2 YUV 422/444 support
|
||||||
|
- polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample
|
||||||
|
- better image scaling
|
||||||
|
- H.261 support
|
||||||
|
- correctly interleave packets during encoding
|
||||||
|
- VIS optimized motion compensation
|
||||||
|
- intra_dc_precision>0 encoding support
|
||||||
|
- support reuse of motion vectors/MB types/field select values of the source video
|
||||||
|
- more accurate deblock filter
|
||||||
|
- padding support
|
||||||
|
- many optimizations and bugfixes
|
||||||
|
- FunCom ISS audio file demuxer and according ADPCM decoding
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.8:
|
||||||
|
|
||||||
|
- MPEG-2 video encoding (Michael)
|
||||||
|
- Id RoQ playback subsystem (Mike Melanson and Tim Ferguson)
|
||||||
|
- Wing Commander III Movie (.mve) file playback subsystem (Mike Melanson
|
||||||
|
and Mario Brito)
|
||||||
|
- Xan DPCM audio decoder (Mario Brito)
|
||||||
|
- Interplay MVE playback subsystem (Mike Melanson)
|
||||||
|
- Duck DK3 and DK4 ADPCM audio decoders (Mike Melanson)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.7:
|
||||||
|
|
||||||
|
- RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from mplayerhq
|
||||||
|
(originally from public domain player for Amiga at http://www.honeypot.net/audio)
|
||||||
|
- current version now also compiles with older GCC (Fabrice)
|
||||||
|
- 4X multimedia playback system including 4xm file demuxer (Mike
|
||||||
|
Melanson), and 4X video and audio codecs (Michael)
|
||||||
|
- Creative YUV (CYUV) decoder (Mike Melanson)
|
||||||
|
- FFV1 codec (our very simple lossless intra only codec, compresses much better
|
||||||
|
than HuffYUV) (Michael)
|
||||||
|
- ASV1 (Asus), H.264, Intel indeo3 codecs have been added (various)
|
||||||
|
- tiny PNG encoder and decoder, tiny GIF decoder, PAM decoder (PPM with
|
||||||
|
alpha support), JPEG YUV colorspace support. (Fabrice Bellard)
|
||||||
|
- ffplay has been replaced with a newer version which uses SDL (optionally)
|
||||||
|
for multiplatform support (Fabrice)
|
||||||
|
- Sorenson Version 3 codec (SVQ3) support has been added (decoding only) - donated
|
||||||
|
by anonymous
|
||||||
|
- AMR format has been added (Johannes Carlsson)
|
||||||
|
- 3GP support has been added (Johannes Carlsson)
|
||||||
|
- VP3 codec has been added (Mike Melanson)
|
||||||
|
- more MPEG-1/2 fixes
|
||||||
|
- better multiplatform support, MS Visual Studio fixes (various)
|
||||||
|
- AltiVec optimizations (Magnus Damn and others)
|
||||||
|
- SH4 processor support has been added (BERO)
|
||||||
|
- new public interfaces (avcodec_get_pix_fmt) (Roman Shaposhnick)
|
||||||
|
- VOB streaming support (Brian Foley)
|
||||||
|
- better MP3 autodetection (Andriy Rysin)
|
||||||
|
- qpel encoding (Michael)
|
||||||
|
- 4mv+b frames encoding finally fixed (Michael)
|
||||||
|
- chroma ME (Michael)
|
||||||
|
- 5 comparison functions for ME (Michael)
|
||||||
|
- B-frame encoding speedup (Michael)
|
||||||
|
- WMV2 codec (unfinished - Michael)
|
||||||
|
- user specified diamond size for EPZS (Michael)
|
||||||
|
- Playstation STR playback subsystem, still experimental (Mike and Michael)
|
||||||
|
- ASV2 codec (Michael)
|
||||||
|
- CLJR decoder (Alex)
|
||||||
|
|
||||||
|
.. And lots more new enhancements and fixes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.6:
|
||||||
|
|
||||||
|
- completely new integer only MPEG audio layer 1/2/3 decoder rewritten
|
||||||
|
from scratch
|
||||||
|
- Recoded DCT and motion vector search with gcc (no longer depends on nasm)
|
||||||
|
- fix quantization bug in AC3 encoder
|
||||||
|
- added PCM codecs and format. Corrected WAV/AVI/ASF PCM issues
|
||||||
|
- added prototype ffplay program
|
||||||
|
- added GOB header parsing on H.263/H.263+ decoder (Juanjo)
|
||||||
|
- bug fix on MCBPC tables of H.263 (Juanjo)
|
||||||
|
- bug fix on DC coefficients of H.263 (Juanjo)
|
||||||
|
- added Advanced Prediction Mode on H.263/H.263+ decoder (Juanjo)
|
||||||
|
- now we can decode H.263 streams found in QuickTime files (Juanjo)
|
||||||
|
- now we can decode H.263 streams found in VIVO v1 files(Juanjo)
|
||||||
|
- preliminary RTP "friendly" mode for H.263/H.263+ coding. (Juanjo)
|
||||||
|
- added GOB header for H.263/H.263+ coding on RTP mode (Juanjo)
|
||||||
|
- now H.263 picture size is returned on the first decoded frame (Juanjo)
|
||||||
|
- added first regression tests
|
||||||
|
- added MPEG-2 TS demuxer
|
||||||
|
- new demux API for libav
|
||||||
|
- more accurate and faster IDCT (Michael)
|
||||||
|
- faster and entropy-controlled motion search (Michael)
|
||||||
|
- two pass video encoding (Michael)
|
||||||
|
- new video rate control (Michael)
|
||||||
|
- added MSMPEG4V1, MSMPEGV2 and WMV1 support (Michael)
|
||||||
|
- great performance improvement of video encoders and decoders (Michael)
|
||||||
|
- new and faster bit readers and vlc parsers (Michael)
|
||||||
|
- high quality encoding mode: tries all macroblock/VLC types (Michael)
|
||||||
|
- added DV video decoder
|
||||||
|
- preliminary RTP/RTSP support in ffserver and libavformat
|
||||||
|
- H.263+ AIC decoding/encoding support (Juanjo)
|
||||||
|
- VCD MPEG-PS mode (Juanjo)
|
||||||
|
- PSNR stuff (Juanjo)
|
||||||
|
- simple stats output (Juanjo)
|
||||||
|
- 16-bit and 15-bit RGB/BGR/GBR support (Bisqwit)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.5:
|
||||||
|
|
||||||
|
- some header fixes (Zdenek Kabelac <kabi at informatics.muni.cz>)
|
||||||
|
- many MMX optimizations (Nick Kurshev <nickols_k at mail.ru>)
|
||||||
|
- added configure system (actually a small shell script)
|
||||||
|
- added MPEG audio layer 1/2/3 decoding using LGPL'ed mpglib by
|
||||||
|
Michael Hipp (temporary solution - waiting for integer only
|
||||||
|
decoder)
|
||||||
|
- fixed VIDIOCSYNC interrupt
|
||||||
|
- added Intel H.263 decoding support ('I263' AVI fourCC)
|
||||||
|
- added Real Video 1.0 decoding (needs further testing)
|
||||||
|
- simplified image formats again. Added PGM format (=grey
|
||||||
|
pgm). Renamed old PGM to PGMYUV.
|
||||||
|
- fixed msmpeg4 slice issues (tell me if you still find problems)
|
||||||
|
- fixed OpenDivX bugs with newer versions (added VOL header decoding)
|
||||||
|
- added support for MPlayer interface
|
||||||
|
- added macroblock skip optimization
|
||||||
|
- added MJPEG decoder
|
||||||
|
- added mmx/mmxext IDCT from libmpeg2
|
||||||
|
- added pgmyuvpipe, ppm, and ppm_pipe formats (original patch by Celer
|
||||||
|
<celer at shell.scrypt.net>)
|
||||||
|
- added pixel format conversion layer (e.g. for MJPEG or PPM)
|
||||||
|
- added deinterlacing option
|
||||||
|
- MPEG-1/2 fixes
|
||||||
|
- MPEG-4 vol header fixes (Jonathan Marsden <snmjbm at pacbell.net>)
|
||||||
|
- ARM optimizations (Lionel Ulmer <lionel.ulmer at free.fr>).
|
||||||
|
- Windows porting of file converter
|
||||||
|
- added MJPEG raw format (input/ouput)
|
||||||
|
- added JPEG image format support (input/output)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.4:
|
||||||
|
|
||||||
|
- fixed some std header definitions (Bjorn Lindgren
|
||||||
|
<bjorn.e.lindgren at telia.com>).
|
||||||
|
- added MPEG demuxer (MPEG-1 and 2 compatible).
|
||||||
|
- added ASF demuxer
|
||||||
|
- added prototype RM demuxer
|
||||||
|
- added AC3 decoding (done with libac3 by Aaron Holtzman)
|
||||||
|
- added decoding codec parameter guessing (.e.g. for MPEG, because the
|
||||||
|
header does not include them)
|
||||||
|
- fixed header generation in MPEG-1, AVI and ASF muxer: wmplayer can now
|
||||||
|
play them (only tested video)
|
||||||
|
- fixed H.263 white bug
|
||||||
|
- fixed phase rounding in img resample filter
|
||||||
|
- add MMX code for polyphase img resample filter
|
||||||
|
- added CPU autodetection
|
||||||
|
- added generic title/author/copyright/comment string handling (ASF and RM
|
||||||
|
use them)
|
||||||
|
- added SWF demux to extract MP3 track (not usable yet because no MP3
|
||||||
|
decoder)
|
||||||
|
- added fractional frame rate support
|
||||||
|
- codecs are no longer searched by read_header() (should fix ffserver
|
||||||
|
segfault)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.3:
|
||||||
|
|
||||||
|
- BGR24 patch (initial patch by Jeroen Vreeken <pe1rxq at amsat.org>)
|
||||||
|
- fixed raw yuv output
|
||||||
|
- added motion rounding support in MPEG-4
|
||||||
|
- fixed motion bug rounding in MSMPEG4
|
||||||
|
- added B-frame handling in video core
|
||||||
|
- added full MPEG-1 decoding support
|
||||||
|
- added partial (frame only) MPEG-2 support
|
||||||
|
- changed the FOURCC code for H.263 to "U263" to be able to see the
|
||||||
|
+AVI/H.263 file with the UB Video H.263+ decoder. MPlayer works with
|
||||||
|
this +codec ;) (JuanJo).
|
||||||
|
- Halfpel motion estimation after MB type selection (JuanJo)
|
||||||
|
- added pgm and .Y.U.V output format
|
||||||
|
- suppressed 'img:' protocol. Simply use: /tmp/test%d.[pgm|Y] as input or
|
||||||
|
output.
|
||||||
|
- added pgmpipe I/O format (original patch from Martin Aumueller
|
||||||
|
<lists at reserv.at>, but changed completely since we use a format
|
||||||
|
instead of a protocol)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.2:
|
||||||
|
|
||||||
|
- added H.263/MPEG-4/MSMPEG4 decoding support. MPEG-4 decoding support
|
||||||
|
(for OpenDivX) is almost complete: 8x8 MVs and rounding are
|
||||||
|
missing. MSMPEG4 support is complete.
|
||||||
|
- added prototype MPEG-1 decoder. Only I- and P-frames handled yet (it
|
||||||
|
can decode ffmpeg MPEGs :-)).
|
||||||
|
- added libavcodec API documentation (see apiexample.c).
|
||||||
|
- fixed image polyphase bug (the bottom of some images could be
|
||||||
|
greenish)
|
||||||
|
- added support for non clipped motion vectors (decoding only)
|
||||||
|
and image sizes non-multiple of 16
|
||||||
|
- added support for AC prediction (decoding only)
|
||||||
|
- added file overwrite confirmation (can be disabled with -y)
|
||||||
|
- added custom size picture to H.263 using H.263+ (Juanjo)
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.1:
|
||||||
|
|
||||||
|
- added MSMPEG4 (aka DivX) compatible encoder. Changed default codec
|
||||||
|
of AVI and ASF to DIV3.
|
||||||
|
- added -me option to set motion estimation method
|
||||||
|
(default=log). suppressed redundant -hq option.
|
||||||
|
- added options -acodec and -vcodec to force a given codec (useful for
|
||||||
|
AVI for example)
|
||||||
|
- fixed -an option
|
||||||
|
- improved dct_quantize speed
|
||||||
|
- factorized some motion estimation code
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.4.0:
|
||||||
|
|
||||||
|
- removing grab code from ffserver and moved it to ffmpeg. Added
|
||||||
|
multistream support to ffmpeg.
|
||||||
|
- added timeshifting support for live feeds (option ?date=xxx in the
|
||||||
|
URL)
|
||||||
|
- added high quality image resize code with polyphase filter (need
|
||||||
|
mmx/see optimization). Enable multiple image size support in ffserver.
|
||||||
|
- added multi live feed support in ffserver
|
||||||
|
- suppressed master feature from ffserver (it should be done with an
|
||||||
|
external program which opens the .ffm url and writes it to another
|
||||||
|
ffserver)
|
||||||
|
- added preliminary support for video stream parsing (WAV and AVI half
|
||||||
|
done). Added proper support for audio/video file conversion in
|
||||||
|
ffmpeg.
|
||||||
|
- added preliminary support for video file sending from ffserver
|
||||||
|
- redesigning I/O subsystem: now using URL based input and output
|
||||||
|
(see avio.h)
|
||||||
|
- added WAV format support
|
||||||
|
- added "tty user interface" to ffmpeg to stop grabbing gracefully
|
||||||
|
- added MMX/SSE optimizations to SAD (Sums of Absolutes Differences)
|
||||||
|
(Juan J. Sierralta P. a.k.a. "Juanjo" <juanjo at atmlab.utfsm.cl>)
|
||||||
|
- added MMX DCT from mpeg2_movie 1.5 (Juanjo)
|
||||||
|
- added new motion estimation algorithms, log and phods (Juanjo)
|
||||||
|
- changed directories: libav for format handling, libavcodec for
|
||||||
|
codecs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.3.4:
|
||||||
|
|
||||||
|
- added stereo in MPEG audio encoder
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.3.3:
|
||||||
|
|
||||||
|
- added 'high quality' mode which use motion vectors. It can be used in
|
||||||
|
real time at low resolution.
|
||||||
|
- fixed rounding problems which caused quality problems at high
|
||||||
|
bitrates and large GOP size
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.3.2: small fixes
|
||||||
|
|
||||||
|
- ASF fixes
|
||||||
|
- put_seek bug fix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.3.1: added avi/divx support
|
||||||
|
|
||||||
|
- added AVI support
|
||||||
|
- added MPEG-4 codec compatible with OpenDivX. It is based on the H.263 codec
|
||||||
|
- added sound for flash format (not tested)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
version 0.3: initial public release
|
4
INSTALL
4
INSTALL
@@ -9,7 +9,3 @@ path when launching 'configure', e.g. '/ffmpegdir/ffmpeg/configure'.
|
|||||||
2) Then type 'make' to build FFmpeg. GNU Make 3.81 or later is required.
|
2) Then type 'make' to build FFmpeg. GNU Make 3.81 or later is required.
|
||||||
|
|
||||||
3) Type 'make install' to install all binaries and libraries you built.
|
3) Type 'make install' to install all binaries and libraries you built.
|
||||||
|
|
||||||
NOTICE
|
|
||||||
|
|
||||||
- Non system dependencies (e.g. libx264, libvpx) are disabled by default.
|
|
||||||
|
10
LICENSE
10
LICENSE
@@ -14,7 +14,11 @@ configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
|
|||||||
Specifically, the GPL parts of FFmpeg are
|
Specifically, the GPL parts of FFmpeg are
|
||||||
|
|
||||||
- libpostproc
|
- libpostproc
|
||||||
|
- optional MMX optimizations for YUV to RGB colorspace conversion in
|
||||||
|
libswscale/x86/yuv2rgb_template.c
|
||||||
- optional x86 optimizations in the files
|
- optional x86 optimizations in the files
|
||||||
|
libavcodec/x86/h264_deblock_sse2.asm
|
||||||
|
libavcodec/x86/h264_idct_sse2.asm
|
||||||
libavcodec/x86/idct_mmx.c
|
libavcodec/x86/idct_mmx.c
|
||||||
- the X11 grabber in libavdevice/x11grab.c
|
- the X11 grabber in libavdevice/x11grab.c
|
||||||
|
|
||||||
@@ -41,6 +45,6 @@ is incompatible with the LGPL v2.1 and the GPL v2, but not with version 3 of
|
|||||||
those licenses. So to combine the OpenCORE libraries with FFmpeg, the license
|
those licenses. So to combine the OpenCORE libraries with FFmpeg, the license
|
||||||
version needs to be upgraded by passing --enable-version3 to configure.
|
version needs to be upgraded by passing --enable-version3 to configure.
|
||||||
|
|
||||||
The nonfree external libraries libfaac and libaacplus can be hooked up in FFmpeg.
|
The nonfree external library libfaac can be hooked up in FFmpeg. You need to
|
||||||
You need to pass --enable-nonfree to configure to enable it. Employ this option
|
pass --enable-nonfree to configure to enable it. Employ this option with care
|
||||||
with care as FFmpeg then becomes nonfree and unredistributable.
|
as FFmpeg then becomes nonfree and unredistributable.
|
||||||
|
61
MAINTAINERS
61
MAINTAINERS
@@ -19,10 +19,7 @@ ffmpeg:
|
|||||||
ffmpeg.c Michael Niedermayer
|
ffmpeg.c Michael Niedermayer
|
||||||
|
|
||||||
ffplay:
|
ffplay:
|
||||||
ffplay.c Marton Balint
|
ffplay.c Michael Niedermayer
|
||||||
|
|
||||||
ffprobe:
|
|
||||||
ffprobe.c Stefano Sabatini
|
|
||||||
|
|
||||||
ffserver:
|
ffserver:
|
||||||
ffserver.c, ffserver.h Baptiste Coudurier
|
ffserver.c, ffserver.h Baptiste Coudurier
|
||||||
@@ -37,7 +34,7 @@ QuickTime faststart:
|
|||||||
Miscellaneous Areas
|
Miscellaneous Areas
|
||||||
===================
|
===================
|
||||||
|
|
||||||
documentation Mike Melanson
|
documentation Mike Melanson, Diego Biurrun
|
||||||
website Robert Swain
|
website Robert Swain
|
||||||
build system (configure,Makefiles) Diego Biurrun, Mans Rullgard
|
build system (configure,Makefiles) Diego Biurrun, Mans Rullgard
|
||||||
project server Diego Biurrun, Mans Rullgard
|
project server Diego Biurrun, Mans Rullgard
|
||||||
@@ -101,19 +98,17 @@ Generic Parts:
|
|||||||
simple_idct.c, simple_idct.h Michael Niedermayer
|
simple_idct.c, simple_idct.h Michael Niedermayer
|
||||||
postprocessing:
|
postprocessing:
|
||||||
libpostproc/* Michael Niedermayer
|
libpostproc/* Michael Niedermayer
|
||||||
table generation:
|
|
||||||
tableprint.c, tableprint.h Reimar Doeffinger
|
|
||||||
|
|
||||||
Codecs:
|
Codecs:
|
||||||
4xm.c Michael Niedermayer
|
4xm.c Michael Niedermayer
|
||||||
8bps.c Roberto Togni
|
8bps.c Roberto Togni
|
||||||
8svx.c Jaikrishnan Menon
|
8svx.c Jaikrishnan Menon
|
||||||
aasc.c Kostya Shishkov
|
aasc.c Kostya Shishkov
|
||||||
|
aac*, sbr.h Alex Converse
|
||||||
ac3* Justin Ruggles
|
ac3* Justin Ruggles
|
||||||
alacenc.c Jaikrishnan Menon
|
alacenc.c Jaikrishnan Menon
|
||||||
alsdec.c Thilo Borgmann
|
alsdec.c Thilo Borgmann
|
||||||
apedec.c Kostya Shishkov
|
apedec.c Kostya Shishkov
|
||||||
ass* Aurelien Jacobs
|
|
||||||
asv* Michael Niedermayer
|
asv* Michael Niedermayer
|
||||||
atrac3* Benjamin Larsson
|
atrac3* Benjamin Larsson
|
||||||
bgmc.c, bgmc.h Thilo Borgmann
|
bgmc.c, bgmc.h Thilo Borgmann
|
||||||
@@ -125,7 +120,6 @@ Codecs:
|
|||||||
cinepak.c Roberto Togni
|
cinepak.c Roberto Togni
|
||||||
cljr Alex Beregszaszi
|
cljr Alex Beregszaszi
|
||||||
cook.c, cookdata.h Benjamin Larsson
|
cook.c, cookdata.h Benjamin Larsson
|
||||||
crystalhd.c Philip Langdale
|
|
||||||
cscd.c Reimar Doeffinger
|
cscd.c Reimar Doeffinger
|
||||||
dca.c Kostya Shishkov, Benjamin Larsson
|
dca.c Kostya Shishkov, Benjamin Larsson
|
||||||
dnxhd* Baptiste Coudurier
|
dnxhd* Baptiste Coudurier
|
||||||
@@ -137,7 +131,6 @@ Codecs:
|
|||||||
flac* Justin Ruggles
|
flac* Justin Ruggles
|
||||||
flashsv* Benjamin Larsson
|
flashsv* Benjamin Larsson
|
||||||
flicvideo.c Mike Melanson
|
flicvideo.c Mike Melanson
|
||||||
g722.c Martin Storsjo
|
|
||||||
g726.c Roman Shaposhnik
|
g726.c Roman Shaposhnik
|
||||||
gifdec.c Baptiste Coudurier
|
gifdec.c Baptiste Coudurier
|
||||||
h264* Loren Merritt, Michael Niedermayer
|
h264* Loren Merritt, Michael Niedermayer
|
||||||
@@ -151,7 +144,6 @@ Codecs:
|
|||||||
interplayvideo.c Mike Melanson
|
interplayvideo.c Mike Melanson
|
||||||
ivi* Kostya Shishkov
|
ivi* Kostya Shishkov
|
||||||
jpeg_ls.c Kostya Shishkov
|
jpeg_ls.c Kostya Shishkov
|
||||||
jvdec.c Peter Ross
|
|
||||||
kmvc.c Kostya Shishkov
|
kmvc.c Kostya Shishkov
|
||||||
lcl*.c Roberto Togni, Reimar Doeffinger
|
lcl*.c Roberto Togni, Reimar Doeffinger
|
||||||
libgsm.c Michel Bardiaux
|
libgsm.c Michel Bardiaux
|
||||||
@@ -160,8 +152,6 @@ Codecs:
|
|||||||
libschroedinger* David Conrad
|
libschroedinger* David Conrad
|
||||||
libspeexdec.c Justin Ruggles
|
libspeexdec.c Justin Ruggles
|
||||||
libtheoraenc.c David Conrad
|
libtheoraenc.c David Conrad
|
||||||
libvorbis.c David Conrad
|
|
||||||
libxavs.c Stefan Gehrer
|
|
||||||
libx264.c Mans Rullgard, Jason Garrett-Glaser
|
libx264.c Mans Rullgard, Jason Garrett-Glaser
|
||||||
loco.c Kostya Shishkov
|
loco.c Kostya Shishkov
|
||||||
lzo.h, lzo.c Reimar Doeffinger
|
lzo.h, lzo.c Reimar Doeffinger
|
||||||
@@ -179,7 +169,6 @@ Codecs:
|
|||||||
nellymoserdec.c Benjamin Larsson
|
nellymoserdec.c Benjamin Larsson
|
||||||
nuv.c Reimar Doeffinger
|
nuv.c Reimar Doeffinger
|
||||||
pcx.c Ivo van Poorten
|
pcx.c Ivo van Poorten
|
||||||
pgssubdec.c Reimar Doeffinger
|
|
||||||
ptx.c Ivo van Poorten
|
ptx.c Ivo van Poorten
|
||||||
qcelp* Reynaldo H. Verdejo Pinochet
|
qcelp* Reynaldo H. Verdejo Pinochet
|
||||||
qdm2.c, qdm2data.h Roberto Togni, Benjamin Larsson
|
qdm2.c, qdm2data.h Roberto Togni, Benjamin Larsson
|
||||||
@@ -199,7 +188,6 @@ Codecs:
|
|||||||
smc.c Mike Melanson
|
smc.c Mike Melanson
|
||||||
snow.c Michael Niedermayer, Loren Merritt
|
snow.c Michael Niedermayer, Loren Merritt
|
||||||
sonic.c Alex Beregszaszi
|
sonic.c Alex Beregszaszi
|
||||||
srt* Aurelien Jacobs
|
|
||||||
sunrast.c Ivo van Poorten
|
sunrast.c Ivo van Poorten
|
||||||
svq3.c Michael Niedermayer
|
svq3.c Michael Niedermayer
|
||||||
targa.c Kostya Shishkov
|
targa.c Kostya Shishkov
|
||||||
@@ -216,11 +204,10 @@ Codecs:
|
|||||||
vcr1.c Michael Niedermayer
|
vcr1.c Michael Niedermayer
|
||||||
vmnc.c Kostya Shishkov
|
vmnc.c Kostya Shishkov
|
||||||
vorbis_enc.c Oded Shimon
|
vorbis_enc.c Oded Shimon
|
||||||
vorbis_dec.c Denes Balatoni, David Conrad
|
vorbis_dec.c Denes Balatoni
|
||||||
vp3* Mike Melanson
|
vp3* Mike Melanson
|
||||||
vp5 Aurelien Jacobs
|
vp5 Aurelien Jacobs
|
||||||
vp6 Aurelien Jacobs
|
vp6 Aurelien Jacobs
|
||||||
vp8 David Conrad, Jason Garrett-Glaser, Ronald Bultje
|
|
||||||
vqavideo.c Mike Melanson
|
vqavideo.c Mike Melanson
|
||||||
wavpack.c Kostya Shishkov
|
wavpack.c Kostya Shishkov
|
||||||
wmaprodec.c Sascha Sommer
|
wmaprodec.c Sascha Sommer
|
||||||
@@ -233,7 +220,6 @@ Codecs:
|
|||||||
zmbv* Kostya Shishkov
|
zmbv* Kostya Shishkov
|
||||||
|
|
||||||
Hardware acceleration:
|
Hardware acceleration:
|
||||||
crystalhd.c Philip Langdale
|
|
||||||
dxva2* Laurent Aimar
|
dxva2* Laurent Aimar
|
||||||
vaapi* Gwenole Beauchesne
|
vaapi* Gwenole Beauchesne
|
||||||
vdpau* Carl Eugen Hoyos
|
vdpau* Carl Eugen Hoyos
|
||||||
@@ -265,10 +251,8 @@ Muxers/Demuxers:
|
|||||||
adtsenc.c Robert Swain
|
adtsenc.c Robert Swain
|
||||||
aiff.c Baptiste Coudurier
|
aiff.c Baptiste Coudurier
|
||||||
ape.c Kostya Shishkov
|
ape.c Kostya Shishkov
|
||||||
ass* Aurelien Jacobs
|
|
||||||
avi* Michael Niedermayer
|
avi* Michael Niedermayer
|
||||||
bink.c Peter Ross
|
bink.c Peter Ross
|
||||||
caf* Peter Ross
|
|
||||||
crc.c Michael Niedermayer
|
crc.c Michael Niedermayer
|
||||||
daud.c Reimar Doeffinger
|
daud.c Reimar Doeffinger
|
||||||
dv.c Roman Shaposhnik
|
dv.c Roman Shaposhnik
|
||||||
@@ -281,20 +265,17 @@ Muxers/Demuxers:
|
|||||||
gxf.c Reimar Doeffinger
|
gxf.c Reimar Doeffinger
|
||||||
gxfenc.c Baptiste Coudurier
|
gxfenc.c Baptiste Coudurier
|
||||||
idcin.c Mike Melanson
|
idcin.c Mike Melanson
|
||||||
idroqdec.c Mike Melanson
|
idroq.c Mike Melanson
|
||||||
iff.c Jaikrishnan Menon
|
iff.c Jaikrishnan Menon
|
||||||
ipmovie.c Mike Melanson
|
ipmovie.c Mike Melanson
|
||||||
img2.c Michael Niedermayer
|
img2.c Michael Niedermayer
|
||||||
iss.c Stefan Gehrer
|
iss.c Stefan Gehrer
|
||||||
jvdec.c Peter Ross
|
|
||||||
libnut.c Oded Shimon
|
libnut.c Oded Shimon
|
||||||
lmlm4.c Ivo van Poorten
|
lmlm4.c Ivo van Poorten
|
||||||
lxfdec.c Tomas Härdin
|
|
||||||
matroska.c Aurelien Jacobs
|
matroska.c Aurelien Jacobs
|
||||||
matroskadec.c Aurelien Jacobs
|
matroskadec.c Aurelien Jacobs
|
||||||
matroskaenc.c David Conrad
|
matroskaenc.c David Conrad
|
||||||
metadata* Aurelien Jacobs
|
metadata* Aurelien Jacobs
|
||||||
microdvd* Aurelien Jacobs
|
|
||||||
mm.c Peter Ross
|
mm.c Peter Ross
|
||||||
mov.c Michael Niedermayer, Baptiste Coudurier
|
mov.c Michael Niedermayer, Baptiste Coudurier
|
||||||
movenc.c Michael Niedermayer, Baptiste Coudurier
|
movenc.c Michael Niedermayer, Baptiste Coudurier
|
||||||
@@ -311,7 +292,6 @@ Muxers/Demuxers:
|
|||||||
oggdec.c, oggdec.h David Conrad
|
oggdec.c, oggdec.h David Conrad
|
||||||
oggenc.c Baptiste Coudurier
|
oggenc.c Baptiste Coudurier
|
||||||
oggparse*.c David Conrad
|
oggparse*.c David Conrad
|
||||||
oma.c Maxim Poliakovski
|
|
||||||
psxstr.c Mike Melanson
|
psxstr.c Mike Melanson
|
||||||
pva.c Ivo van Poorten
|
pva.c Ivo van Poorten
|
||||||
r3d.c Baptiste Coudurier
|
r3d.c Baptiste Coudurier
|
||||||
@@ -320,15 +300,14 @@ Muxers/Demuxers:
|
|||||||
rl2.c Sascha Sommer
|
rl2.c Sascha Sommer
|
||||||
rmdec.c, rmenc.c Ronald S. Bultje, Kostya Shishkov
|
rmdec.c, rmenc.c Ronald S. Bultje, Kostya Shishkov
|
||||||
rtmp* Kostya Shishkov
|
rtmp* Kostya Shishkov
|
||||||
rtp.c, rtpenc.c Martin Storsjo
|
rtp.c, rtpenc.c Luca Abeni
|
||||||
rtpdec_asf.* Ronald S. Bultje
|
rtp_asf.* Ronald S. Bultje
|
||||||
rtpenc_mpv.*, rtpenc_aac.* Martin Storsjo
|
rtp_mpv.*, rtp_aac.* Luca Abeni
|
||||||
rtsp.c Luca Barbato
|
rtsp.c Luca Barbato
|
||||||
sdp.c Martin Storsjo
|
sdp.c Luca Abeni
|
||||||
segafilm.c Mike Melanson
|
segafilm.c Mike Melanson
|
||||||
siff.c Kostya Shishkov
|
siff.c Kostya Shishkov
|
||||||
smacker.c Kostya Shishkov
|
smacker.c Kostya Shishkov
|
||||||
srtdec.c Aurelien Jacobs
|
|
||||||
swf.c Baptiste Coudurier
|
swf.c Baptiste Coudurier
|
||||||
tta.c Alex Beregszaszi
|
tta.c Alex Beregszaszi
|
||||||
txd.c Ivo van Poorten
|
txd.c Ivo van Poorten
|
||||||
@@ -336,12 +315,10 @@ Muxers/Demuxers:
|
|||||||
wav.c Michael Niedermayer
|
wav.c Michael Niedermayer
|
||||||
wc3movie.c Mike Melanson
|
wc3movie.c Mike Melanson
|
||||||
westwood.c Mike Melanson
|
westwood.c Mike Melanson
|
||||||
wtv.c Peter Ross
|
|
||||||
wv.c Kostya Shishkov
|
wv.c Kostya Shishkov
|
||||||
|
|
||||||
Protocols:
|
Protocols:
|
||||||
http.c Ronald S. Bultje
|
http.c Ronald S. Bultje
|
||||||
mms*.c Ronald S. Bultje
|
|
||||||
udp.c Luca Abeni
|
udp.c Luca Abeni
|
||||||
|
|
||||||
|
|
||||||
@@ -352,6 +329,7 @@ Alpha Mans Rullgard, Falk Hueffner
|
|||||||
ARM Mans Rullgard
|
ARM Mans Rullgard
|
||||||
AVR32 Mans Rullgard
|
AVR32 Mans Rullgard
|
||||||
MIPS Mans Rullgard
|
MIPS Mans Rullgard
|
||||||
|
BeOS Francois Revol
|
||||||
Mac OS X / PowerPC Romain Dolbeau, Guillaume Poirier
|
Mac OS X / PowerPC Romain Dolbeau, Guillaume Poirier
|
||||||
Amiga / PowerPC Colin Ward
|
Amiga / PowerPC Colin Ward
|
||||||
Linux / PowerPC Luca Barbato
|
Linux / PowerPC Luca Barbato
|
||||||
@@ -362,39 +340,20 @@ Sparc Roman Shaposhnik
|
|||||||
x86 Michael Niedermayer
|
x86 Michael Niedermayer
|
||||||
|
|
||||||
|
|
||||||
Releases
|
|
||||||
========
|
|
||||||
|
|
||||||
0.5 *Deprecated/Unmaintained*
|
|
||||||
0.6 Stefano Sabatini
|
|
||||||
0.7 Michael Niedermayer
|
|
||||||
0.8 Michael Niedermayer
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GnuPG Fingerprints of maintainers and others who have svn write access
|
GnuPG Fingerprints of maintainers and others who have svn write access
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
Anssi Hannula 1A92 FF42 2DD9 8D2E 8AF7 65A9 4278 C520 513D F3CB
|
|
||||||
Anton Khirnov 6D0C 6625 56F8 65D1 E5F5 814B B50A 1241 C067 07AB
|
|
||||||
Attila Kinali 11F0 F9A6 A1D2 11F6 C745 D10C 6520 BCDD F2DF E765
|
Attila Kinali 11F0 F9A6 A1D2 11F6 C745 D10C 6520 BCDD F2DF E765
|
||||||
Baptiste Coudurier 8D77 134D 20CC 9220 201F C5DB 0AC9 325C 5C1A BAAA
|
Baptiste Coudurier 8D77 134D 20CC 9220 201F C5DB 0AC9 325C 5C1A BAAA
|
||||||
Ben Littler 3EE3 3723 E560 3214 A8CD 4DEB 2CDB FCE7 768C 8D2C
|
|
||||||
Benoit Fouet B22A 4F4F 43EF 636B BB66 FCDC 0023 AE1E 2985 49C8
|
Benoit Fouet B22A 4F4F 43EF 636B BB66 FCDC 0023 AE1E 2985 49C8
|
||||||
Daniel Verkamp 78A6 07ED 782C 653E C628 B8B9 F0EB 8DD8 2F0E 21C7
|
Daniel Verkamp 78A6 07ED 782C 653E C628 B8B9 F0EB 8DD8 2F0E 21C7
|
||||||
Diego Biurrun 8227 1E31 B6D9 4994 7427 E220 9CAE D6CC 4757 FCC5
|
Diego Biurrun 8227 1E31 B6D9 4994 7427 E220 9CAE D6CC 4757 FCC5
|
||||||
Gwenole Beauchesne 2E63 B3A6 3E44 37E2 017D 2704 53C7 6266 B153 99C4
|
|
||||||
Jaikrishnan Menon 61A1 F09F 01C9 2D45 78E1 C862 25DC 8831 AF70 D368
|
Jaikrishnan Menon 61A1 F09F 01C9 2D45 78E1 C862 25DC 8831 AF70 D368
|
||||||
Justin Ruggles 3136 ECC0 C10D 6C04 5F43 CA29 FCBE CD2A 3787 1EBF
|
|
||||||
Loren Merritt ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE
|
Loren Merritt ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE
|
||||||
Luca Barbato 6677 4209 213C 8843 5B67 29E7 E84C 78C2 84E9 0E34
|
|
||||||
Michael Niedermayer 9FF2 128B 147E F673 0BAD F133 611E C787 040B 0FAB
|
Michael Niedermayer 9FF2 128B 147E F673 0BAD F133 611E C787 040B 0FAB
|
||||||
Panagiotis Issaris 515C E262 10A8 FDCE 5481 7B9C 3AD7 D9A5 071D B3A9
|
Panagiotis Issaris 515C E262 10A8 FDCE 5481 7B9C 3AD7 D9A5 071D B3A9
|
||||||
Peter Ross A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B
|
Peter Ross A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B
|
||||||
Reimar Döffinger C61D 16E5 9E2C D10C 8958 38A4 0899 A2B9 06D4 D9C7
|
Reimar Döffinger C61D 16E5 9E2C D10C 8958 38A4 0899 A2B9 06D4 D9C7
|
||||||
Reinhard Tartler 9300 5DC2 7E87 6C37 ED7B CA9A 9808 3544 9453 48A4
|
Reinhard Tartler 9300 5DC2 7E87 6C37 ED7B CA9A 9808 3544 9453 48A4
|
||||||
Reynaldo H. Verdejo Pinochet 6E27 CD34 170C C78E 4D4F 5F40 C18E 077F 3114 452A
|
Reynaldo H. Verdejo Pinochet 6E27 CD34 170C C78E 4D4F 5F40 C18E 077F 3114 452A
|
||||||
Robert Swain EE7A 56EA 4A81 A7B5 2001 A521 67FA 362D A2FC 3E71
|
|
||||||
Sascha Sommer 38A0 F88B 868E 9D3A 97D4 D6A0 E823 706F 1E07 0D3C
|
Sascha Sommer 38A0 F88B 868E 9D3A 97D4 D6A0 E823 706F 1E07 0D3C
|
||||||
Stefano Sabatini 9A43 10F8 D32C D33C 48E7 C52C 5DF2 8E4D B2EE 066B
|
|
||||||
Tomas Härdin D133 29CA 4EEC 9DB4 7076 F697 B04B 7403 3313 41FD
|
|
||||||
|
322
Makefile
322
Makefile
@@ -1,31 +1,25 @@
|
|||||||
MAIN_MAKEFILE=1
|
|
||||||
include config.mak
|
include config.mak
|
||||||
|
|
||||||
vpath %.c $(SRC_PATH)
|
SRC_DIR = $(SRC_PATH_BARE)
|
||||||
vpath %.h $(SRC_PATH)
|
|
||||||
vpath %.S $(SRC_PATH)
|
|
||||||
vpath %.asm $(SRC_PATH)
|
|
||||||
vpath %.v $(SRC_PATH)
|
|
||||||
vpath %.texi $(SRC_PATH)
|
|
||||||
|
|
||||||
|
vpath %.texi $(SRC_PATH_BARE)
|
||||||
|
|
||||||
PROGS-$(CONFIG_FFMPEG) += ffmpeg
|
PROGS-$(CONFIG_FFMPEG) += ffmpeg
|
||||||
PROGS-$(CONFIG_FFPLAY) += ffplay
|
PROGS-$(CONFIG_FFPLAY) += ffplay
|
||||||
PROGS-$(CONFIG_FFPROBE) += ffprobe
|
PROGS-$(CONFIG_FFPROBE) += ffprobe
|
||||||
PROGS-$(CONFIG_FFSERVER) += ffserver
|
PROGS-$(CONFIG_FFSERVER) += ffserver
|
||||||
|
|
||||||
PROGS := $(PROGS-yes:%=%$(EXESUF))
|
PROGS := $(addsuffix $(EXESUF), $(PROGS-yes))
|
||||||
PROGS_G = $(PROGS-yes:%=%_g$(EXESUF))
|
PROGS_G = $(addsuffix _g$(EXESUF), $(PROGS-yes))
|
||||||
OBJS = $(PROGS-yes:%=%.o) cmdutils.o
|
OBJS = $(addsuffix .o, $(PROGS-yes)) cmdutils.o
|
||||||
TESTTOOLS = audiogen videogen rotozoom tiny_psnr base64
|
MANPAGES = $(addprefix doc/, $(addsuffix .1, $(PROGS-yes)))
|
||||||
HOSTPROGS := $(TESTTOOLS:%=tests/%)
|
TOOLS = $(addprefix tools/, $(addsuffix $(EXESUF), cws2fws pktdumper probetest qt-faststart trasher))
|
||||||
TOOLS = qt-faststart trasher
|
HOSTPROGS = $(addprefix tests/, audiogen videogen rotozoom tiny_psnr)
|
||||||
TOOLS-$(CONFIG_ZLIB) += cws2fws
|
|
||||||
|
|
||||||
BASENAMES = ffmpeg ffplay ffprobe ffserver
|
BASENAMES = ffmpeg ffplay ffprobe ffserver
|
||||||
ALLPROGS = $(BASENAMES:%=%$(EXESUF))
|
ALLPROGS = $(addsuffix $(EXESUF), $(BASENAMES))
|
||||||
ALLPROGS_G = $(BASENAMES:%=%_g$(EXESUF))
|
ALLPROGS_G = $(addsuffix _g$(EXESUF), $(BASENAMES))
|
||||||
ALLMANPAGES = $(BASENAMES:%=%.1)
|
ALLMANPAGES = $(addsuffix .1, $(BASENAMES))
|
||||||
|
|
||||||
FFLIBS-$(CONFIG_AVDEVICE) += avdevice
|
FFLIBS-$(CONFIG_AVDEVICE) += avdevice
|
||||||
FFLIBS-$(CONFIG_AVFILTER) += avfilter
|
FFLIBS-$(CONFIG_AVFILTER) += avfilter
|
||||||
@@ -36,35 +30,33 @@ FFLIBS-$(CONFIG_SWSCALE) += swscale
|
|||||||
|
|
||||||
FFLIBS := avutil
|
FFLIBS := avutil
|
||||||
|
|
||||||
DATA_FILES := $(wildcard $(SRC_PATH)/ffpresets/*.ffpreset)
|
DATA_FILES := $(wildcard $(SRC_DIR)/ffpresets/*.ffpreset)
|
||||||
|
|
||||||
SKIPHEADERS = cmdutils_common_opts.h
|
SKIPHEADERS = cmdutils_common_opts.h
|
||||||
|
|
||||||
include $(SRC_PATH)/common.mak
|
include common.mak
|
||||||
|
|
||||||
|
FF_LDFLAGS := $(FFLDFLAGS)
|
||||||
FF_EXTRALIBS := $(FFEXTRALIBS)
|
FF_EXTRALIBS := $(FFEXTRALIBS)
|
||||||
FF_DEP_LIBS := $(DEP_LIBS)
|
FF_DEP_LIBS := $(DEP_LIBS)
|
||||||
|
|
||||||
all: $(PROGS)
|
ALL_TARGETS-$(CONFIG_DOC) += documentation
|
||||||
|
|
||||||
|
ifdef PROGS
|
||||||
|
INSTALL_TARGETS-yes += install-progs install-data
|
||||||
|
INSTALL_TARGETS-$(CONFIG_DOC) += install-man
|
||||||
|
endif
|
||||||
|
INSTALL_PROGS_TARGETS-$(CONFIG_SHARED) = install-libs
|
||||||
|
|
||||||
|
all: $(FF_DEP_LIBS) $(PROGS) $(ALL_TARGETS-yes)
|
||||||
|
|
||||||
$(PROGS): %$(EXESUF): %_g$(EXESUF)
|
$(PROGS): %$(EXESUF): %_g$(EXESUF)
|
||||||
$(CP) $< $@
|
$(CP) $< $@
|
||||||
$(STRIP) $@
|
$(STRIP) $@
|
||||||
|
|
||||||
$(TOOLS): %$(EXESUF): %.o
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $< $(ELIBS)
|
|
||||||
|
|
||||||
tools/cws2fws$(EXESUF): ELIBS = -lz
|
|
||||||
|
|
||||||
config.h: .config
|
|
||||||
.config: $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c))
|
|
||||||
@-tput bold 2>/dev/null
|
|
||||||
@-printf '\nWARNING: $(?F) newer than config.h, rerun configure\n\n'
|
|
||||||
@-tput sgr0 2>/dev/null
|
|
||||||
|
|
||||||
SUBDIR_VARS := OBJS FFLIBS CLEANFILES DIRS TESTPROGS EXAMPLES SKIPHEADERS \
|
SUBDIR_VARS := OBJS FFLIBS CLEANFILES DIRS TESTPROGS EXAMPLES SKIPHEADERS \
|
||||||
ALTIVEC-OBJS MMX-OBJS NEON-OBJS X86-OBJS YASM-OBJS-FFT YASM-OBJS \
|
ALTIVEC-OBJS MMX-OBJS NEON-OBJS X86-OBJS YASM-OBJS-FFT YASM-OBJS \
|
||||||
HOSTPROGS BUILT_HEADERS TESTOBJS ARCH_HEADERS ARMV6-OBJS TOOLS
|
HOSTPROGS BUILT_HEADERS TESTOBJS ARCH_HEADERS
|
||||||
|
|
||||||
define RESET
|
define RESET
|
||||||
$(1) :=
|
$(1) :=
|
||||||
@@ -74,26 +66,30 @@ endef
|
|||||||
define DOSUBDIR
|
define DOSUBDIR
|
||||||
$(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V))))
|
$(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V))))
|
||||||
SUBDIR := $(1)/
|
SUBDIR := $(1)/
|
||||||
include $(SRC_PATH)/$(1)/Makefile
|
include $(1)/Makefile
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D))))
|
$(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D))))
|
||||||
|
|
||||||
ffplay.o: CFLAGS += $(SDL_CFLAGS)
|
|
||||||
ffplay_g$(EXESUF): FF_EXTRALIBS += $(SDL_LIBS)
|
ffplay_g$(EXESUF): FF_EXTRALIBS += $(SDL_LIBS)
|
||||||
ffserver_g$(EXESUF): LDFLAGS += $(FFSERVERLDFLAGS)
|
ffserver_g$(EXESUF): FF_LDFLAGS += $(FFSERVERLDFLAGS)
|
||||||
|
|
||||||
%_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
|
%_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
|
||||||
$(LD) $(LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
|
$(LD) $(FF_LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
|
||||||
|
|
||||||
OBJDIRS += tools
|
tools/%$(EXESUF): tools/%.o
|
||||||
|
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
|
||||||
|
|
||||||
-include $(wildcard tools/*.d)
|
tools/%.o: tools/%.c
|
||||||
|
$(CC) $(CPPFLAGS) $(CFLAGS) $(CC_O) $<
|
||||||
|
|
||||||
VERSION_SH = $(SRC_PATH)/version.sh
|
ffplay.o ffplay.d: CFLAGS += $(SDL_CFLAGS)
|
||||||
GIT_LOG = $(SRC_PATH)/.git/logs/HEAD
|
|
||||||
|
|
||||||
.version: $(wildcard $(GIT_LOG)) $(VERSION_SH) config.mak
|
VERSION_SH = $(SRC_PATH_BARE)/version.sh
|
||||||
|
GIT_LOG = $(SRC_PATH_BARE)/.git/logs/HEAD
|
||||||
|
SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries
|
||||||
|
|
||||||
|
.version: $(wildcard $(GIT_LOG) $(SVN_ENTRIES)) $(VERSION_SH) config.mak
|
||||||
.version: M=@
|
.version: M=@
|
||||||
|
|
||||||
version.h .version:
|
version.h .version:
|
||||||
@@ -103,18 +99,27 @@ version.h .version:
|
|||||||
# force version.sh to run whenever version might have changed
|
# force version.sh to run whenever version might have changed
|
||||||
-include .version
|
-include .version
|
||||||
|
|
||||||
ifdef PROGS
|
alltools: $(TOOLS)
|
||||||
install: install-progs install-data
|
|
||||||
endif
|
|
||||||
|
|
||||||
install: install-libs install-headers
|
documentation: $(addprefix doc/, developer.html faq.html ffmpeg-doc.html \
|
||||||
|
ffplay-doc.html ffprobe-doc.html ffserver-doc.html \
|
||||||
|
general.html libavfilter.html $(ALLMANPAGES))
|
||||||
|
|
||||||
install-libs: install-libs-yes
|
doc/%.html: TAG = HTML
|
||||||
|
doc/%.html: doc/%.texi
|
||||||
|
$(M)cd doc && texi2html -monolithic -number $(<:doc/%=%)
|
||||||
|
|
||||||
install-progs-yes:
|
doc/%.pod: TAG = POD
|
||||||
install-progs-$(CONFIG_SHARED): install-libs
|
doc/%.pod: doc/%-doc.texi
|
||||||
|
$(M)doc/texi2pod.pl $< $@
|
||||||
|
|
||||||
install-progs: install-progs-yes $(PROGS)
|
doc/%.1: TAG = MAN
|
||||||
|
doc/%.1: doc/%.pod
|
||||||
|
$(M)pod2man --section=1 --center=" " --release=" " $< > $@
|
||||||
|
|
||||||
|
install: $(INSTALL_TARGETS-yes)
|
||||||
|
|
||||||
|
install-progs: $(PROGS) $(INSTALL_PROGS_TARGETS-yes)
|
||||||
$(Q)mkdir -p "$(BINDIR)"
|
$(Q)mkdir -p "$(BINDIR)"
|
||||||
$(INSTALL) -c -m 755 $(PROGS) "$(BINDIR)"
|
$(INSTALL) -c -m 755 $(PROGS) "$(BINDIR)"
|
||||||
|
|
||||||
@@ -122,7 +127,11 @@ install-data: $(DATA_FILES)
|
|||||||
$(Q)mkdir -p "$(DATADIR)"
|
$(Q)mkdir -p "$(DATADIR)"
|
||||||
$(INSTALL) -m 644 $(DATA_FILES) "$(DATADIR)"
|
$(INSTALL) -m 644 $(DATA_FILES) "$(DATADIR)"
|
||||||
|
|
||||||
uninstall: uninstall-libs uninstall-headers uninstall-progs uninstall-data
|
install-man: $(MANPAGES)
|
||||||
|
$(Q)mkdir -p "$(MANDIR)/man1"
|
||||||
|
$(INSTALL) -m 644 $(MANPAGES) "$(MANDIR)/man1"
|
||||||
|
|
||||||
|
uninstall: uninstall-progs uninstall-data uninstall-man
|
||||||
|
|
||||||
uninstall-progs:
|
uninstall-progs:
|
||||||
$(RM) $(addprefix "$(BINDIR)/", $(ALLPROGS))
|
$(RM) $(addprefix "$(BINDIR)/", $(ALLPROGS))
|
||||||
@@ -130,32 +139,215 @@ uninstall-progs:
|
|||||||
uninstall-data:
|
uninstall-data:
|
||||||
$(RM) -r "$(DATADIR)"
|
$(RM) -r "$(DATADIR)"
|
||||||
|
|
||||||
clean::
|
uninstall-man:
|
||||||
|
$(RM) $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
|
||||||
|
|
||||||
|
testclean:
|
||||||
|
$(RM) -r tests/vsynth1 tests/vsynth2 tests/data
|
||||||
|
$(RM) $(addprefix tests/,$(CLEANSUFFIXES))
|
||||||
|
$(RM) tests/seek_test$(EXESUF) tests/seek_test.o
|
||||||
|
$(RM) $(addprefix tests/,$(addsuffix $(HOSTEXESUF),audiogen videogen rotozoom tiny_psnr))
|
||||||
|
|
||||||
|
clean:: testclean
|
||||||
$(RM) $(ALLPROGS) $(ALLPROGS_G)
|
$(RM) $(ALLPROGS) $(ALLPROGS_G)
|
||||||
$(RM) $(CLEANSUFFIXES)
|
$(RM) $(CLEANSUFFIXES)
|
||||||
|
$(RM) doc/*.html doc/*.pod doc/*.1
|
||||||
$(RM) $(TOOLS)
|
$(RM) $(TOOLS)
|
||||||
$(RM) $(CLEANSUFFIXES:%=tools/%)
|
|
||||||
|
|
||||||
distclean::
|
distclean::
|
||||||
$(RM) $(DISTCLEANSUFFIXES)
|
$(RM) $(DISTCLEANSUFFIXES)
|
||||||
$(RM) config.* .version version.h libavutil/avconfig.h
|
$(RM) version.h config.* libavutil/avconfig.h
|
||||||
|
|
||||||
config:
|
config:
|
||||||
$(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)
|
$(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)
|
||||||
|
|
||||||
include $(SRC_PATH)/doc/Makefile
|
# regression tests
|
||||||
include $(SRC_PATH)/tests/Makefile
|
|
||||||
|
|
||||||
$(sort $(OBJDIRS)):
|
check: test checkheaders
|
||||||
$(Q)mkdir -p $@
|
|
||||||
|
|
||||||
# Dummy rule to stop make trying to rebuild removed or renamed headers
|
fulltest test: codectest lavftest seektest
|
||||||
%.h:
|
|
||||||
@:
|
|
||||||
|
|
||||||
# Disable suffix rules. Most of the builtin rules are suffix rules,
|
FFSERVER_REFFILE = $(SRC_PATH)/tests/ffserver.regression.ref
|
||||||
# so this saves some time on slow systems.
|
SEEK_REFFILE = $(SRC_PATH)/tests/seek.regression.ref
|
||||||
.SUFFIXES:
|
|
||||||
|
|
||||||
.PHONY: all all-yes alltools *clean config examples install*
|
ENCDEC = $(and $(CONFIG_$(1)_ENCODER),$(CONFIG_$(1)_DECODER))
|
||||||
.PHONY: testprogs uninstall*
|
MUXDEM = $(and $(CONFIG_$(1)_MUXER),$(CONFIG_$(or $(2),$(1))_DEMUXER))
|
||||||
|
|
||||||
|
VCODEC_TESTS =
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,ASV1) += asv1
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,ASV2) += asv2
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,DNXHD) += dnxhd_1080i dnxhd_720p dnxhd_720p_rd
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,DVVIDEO) += dv dv50
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,FFV1) += ffv1
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,FLASHSV) += flashsv
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,FLV) += flv
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,H261) += h261
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,H263) += h263 h263p
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,HUFFYUV) += huffyuv
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,JPEGLS) += jpegls
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,MJPEG) += mjpeg ljpeg
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,MPEG1VIDEO) += mpeg mpeg1b
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,MPEG2VIDEO) += mpeg2 mpeg2thread
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,MPEG4) += mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,MSMPEG4V1) += msmpeg4
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,MSMPEG4V2) += msmpeg4v2
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,ROQ) += roq
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,RV10) += rv10
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,RV20) += rv20
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,SNOW) += snow snowll
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,SVQ1) += svq1
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,WMV1) += wmv1
|
||||||
|
VCODEC_TESTS-$(call ENCDEC,WMV2) += wmv2
|
||||||
|
|
||||||
|
ACODEC_TESTS =
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,AC3) += ac3
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,ADPCM_G726) += g726
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,ADPCM_IMA_QT) += adpcm_ima_qt
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,ADPCM_IMA_WAV) += adpcm_ima_wav
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,ADPCM_MS) += adpcm_ms
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,ADPCM_SWF) += adpcm_swf
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,ADPCM_YAMAHA) += adpcm_yam
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,ALAC) += alac
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,FLAC) += flac
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,MP2) += mp2
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,PCM_S16LE) += pcm # fixme
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,WMAV1) += wmav1
|
||||||
|
ACODEC_TESTS-$(call ENCDEC,WMAV1) += wmav2
|
||||||
|
|
||||||
|
LAVF_TESTS =
|
||||||
|
LAVF_TESTS-$(call MUXDEM,AIFF) += aiff
|
||||||
|
LAVF_TESTS-$(call MUXDEM,PCM_ALAW) += alaw
|
||||||
|
LAVF_TESTS-$(call MUXDEM,ASF) += asf
|
||||||
|
LAVF_TESTS-$(call MUXDEM,AU) += au
|
||||||
|
LAVF_TESTS-$(call MUXDEM,AVI) += avi
|
||||||
|
LAVF_TESTS-$(call ENCDEC,BMP) += bmp
|
||||||
|
LAVF_TESTS-$(call MUXDEM,DV) += dv_fmt
|
||||||
|
LAVF_TESTS-$(call MUXDEM,FFM) += ffm
|
||||||
|
LAVF_TESTS-$(call MUXDEM,FLV) += flv_fmt
|
||||||
|
LAVF_TESTS-$(call ENCDEC,GIF) += gif
|
||||||
|
LAVF_TESTS-$(call MUXDEM,GXF) += gxf
|
||||||
|
LAVF_TESTS-$(call ENCDEC,MJPEG) += jpg
|
||||||
|
LAVF_TESTS-$(call MUXDEM,MATROSKA) += mkv
|
||||||
|
LAVF_TESTS-$(call MUXDEM,MMF) += mmf
|
||||||
|
LAVF_TESTS-$(call MUXDEM,MOV) += mov
|
||||||
|
LAVF_TESTS-$(call MUXDEM,MPEG1SYSTEM,MPEGPS) += mpg
|
||||||
|
LAVF_TESTS-$(call MUXDEM,PCM_MULAW) += mulaw
|
||||||
|
LAVF_TESTS-$(call MUXDEM,MXF) += mxf
|
||||||
|
LAVF_TESTS-$(call MUXDEM,NUT) += nut
|
||||||
|
LAVF_TESTS-$(call MUXDEM,OGG) += ogg
|
||||||
|
LAVF_TESTS-$(call ENCDEC,PBM) += pbmpipe
|
||||||
|
LAVF_TESTS-$(call ENCDEC,PCX) += pcx
|
||||||
|
LAVF_TESTS-$(call ENCDEC,PGM) += pgm pgmpipe
|
||||||
|
LAVF_TESTS-$(call MUXDEM,RAWVIDEO) += pixfmt
|
||||||
|
LAVF_TESTS-$(call ENCDEC,PPM) += ppm ppmpipe
|
||||||
|
LAVF_TESTS-$(call MUXDEM,RM) += rm
|
||||||
|
LAVF_TESTS-$(call ENCDEC,SGI) += sgi
|
||||||
|
LAVF_TESTS-$(call MUXDEM,SWF) += swf
|
||||||
|
LAVF_TESTS-$(call ENCDEC,TARGA) += tga
|
||||||
|
LAVF_TESTS-$(call ENCDEC,TIFF) += tiff
|
||||||
|
LAVF_TESTS-$(call MUXDEM,MPEGTS) += ts
|
||||||
|
LAVF_TESTS-$(call MUXDEM,VOC) += voc
|
||||||
|
LAVF_TESTS-$(call MUXDEM,WAV) += wav
|
||||||
|
LAVF_TESTS-$(call MUXDEM,YUV4MPEGPIPE) += yuv4mpeg
|
||||||
|
|
||||||
|
LAVFI_TESTS = \
|
||||||
|
crop \
|
||||||
|
crop_scale \
|
||||||
|
crop_scale_vflip \
|
||||||
|
crop_vflip \
|
||||||
|
null \
|
||||||
|
scale200 \
|
||||||
|
scale500 \
|
||||||
|
vflip \
|
||||||
|
vflip_crop \
|
||||||
|
vflip_vflip \
|
||||||
|
|
||||||
|
ACODEC_TESTS := $(addprefix regtest-, $(ACODEC_TESTS) $(ACODEC_TESTS-yes))
|
||||||
|
VCODEC_TESTS := $(addprefix regtest-, $(VCODEC_TESTS) $(VCODEC_TESTS-yes))
|
||||||
|
LAVF_TESTS := $(addprefix regtest-, $(LAVF_TESTS) $(LAVF_TESTS-yes))
|
||||||
|
LAVFI_TESTS := $(addprefix regtest-, $(LAVFI_TESTS) $(LAVFI_TESTS-yes))
|
||||||
|
|
||||||
|
CODEC_TESTS = $(VCODEC_TESTS) $(ACODEC_TESTS)
|
||||||
|
|
||||||
|
codectest: $(CODEC_TESTS)
|
||||||
|
lavftest: $(LAVF_TESTS)
|
||||||
|
lavfitest: $(LAVFI_TESTS)
|
||||||
|
|
||||||
|
$(ACODEC_TESTS): regtest-aref
|
||||||
|
$(VCODEC_TESTS): regtest-vref
|
||||||
|
$(LAVF_TESTS) $(LAVFI_TESTS): regtest-ref
|
||||||
|
|
||||||
|
REFFILE = $(SRC_PATH)/tests/ref/$(1)/$(2:regtest-%=%)
|
||||||
|
RESFILE = tests/data/$(2:regtest-%=%).$(1).regression
|
||||||
|
|
||||||
|
define CODECTEST_CMD
|
||||||
|
$(SRC_PATH)/tests/codec-regression.sh $@ vsynth1 tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
||||||
|
$(SRC_PATH)/tests/codec-regression.sh $@ vsynth2 tests/vsynth2 "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
||||||
|
endef
|
||||||
|
|
||||||
|
regtest-ref: regtest-aref regtest-vref
|
||||||
|
|
||||||
|
regtest-vref: ffmpeg$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm
|
||||||
|
$(CODECTEST_CMD)
|
||||||
|
|
||||||
|
regtest-aref: ffmpeg$(EXESUF) tests/data/asynth1.sw
|
||||||
|
@$(SRC_PATH)/tests/codec-regression.sh $@ acodec tests/acodec "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
||||||
|
|
||||||
|
$(VCODEC_TESTS): tests/tiny_psnr$(HOSTEXESUF)
|
||||||
|
@echo "TEST VCODEC $(@:regtest-%=%)"
|
||||||
|
@$(CODECTEST_CMD)
|
||||||
|
@diff -u -w $(call REFFILE,vsynth1,$@) $(call RESFILE,vsynth1,$@)
|
||||||
|
@diff -u -w $(call REFFILE,vsynth2,$@) $(call RESFILE,vsynth2,$@)
|
||||||
|
|
||||||
|
$(ACODEC_TESTS): tests/tiny_psnr$(HOSTEXESUF)
|
||||||
|
@echo "TEST ACODEC $(@:regtest-%=%)"
|
||||||
|
@$(SRC_PATH)/tests/codec-regression.sh $@ acodec tests/acodec "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
||||||
|
@diff -u -w $(call REFFILE,acodec,$@) $(call RESFILE,acodec,$@)
|
||||||
|
|
||||||
|
$(LAVF_TESTS):
|
||||||
|
@echo "TEST LAVF $(@:regtest-%=%)"
|
||||||
|
@$(SRC_PATH)/tests/lavf-regression.sh $@ lavf tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
||||||
|
@diff -u -w $(call REFFILE,lavf,$@) $(call RESFILE,lavf,$@)
|
||||||
|
|
||||||
|
$(LAVFI_TESTS):
|
||||||
|
@echo "TEST LAVFI $(@:regtest-%=%)"
|
||||||
|
@$(SRC_PATH)/tests/lavfi-regression.sh $@ lavfi tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
||||||
|
@diff -u -w $(call REFFILE,lavfi,$@) $(call RESFILE,lavfi,$@)
|
||||||
|
|
||||||
|
seektest: codectest lavftest tests/seek_test$(EXESUF)
|
||||||
|
$(SRC_PATH)/tests/seek-regression.sh $(SRC_PATH) "$(TARGET_EXEC)" "$(TARGET_PATH)"
|
||||||
|
|
||||||
|
ffservertest: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw
|
||||||
|
@echo
|
||||||
|
@echo "Unfortunately ffserver is broken and therefore its regression"
|
||||||
|
@echo "test fails randomly. Treat the results accordingly."
|
||||||
|
@echo
|
||||||
|
$(SRC_PATH)/tests/ffserver-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/ffserver.conf
|
||||||
|
|
||||||
|
tests/vsynth1/00.pgm: tests/videogen$(HOSTEXESUF)
|
||||||
|
mkdir -p tests/vsynth1
|
||||||
|
$(BUILD_ROOT)/$< 'tests/vsynth1/'
|
||||||
|
|
||||||
|
tests/vsynth2/00.pgm: tests/rotozoom$(HOSTEXESUF)
|
||||||
|
mkdir -p tests/vsynth2
|
||||||
|
$(BUILD_ROOT)/$< 'tests/vsynth2/' $(SRC_PATH)/tests/lena.pnm
|
||||||
|
|
||||||
|
tests/data/asynth1.sw: tests/audiogen$(HOSTEXESUF)
|
||||||
|
mkdir -p tests/data
|
||||||
|
$(BUILD_ROOT)/$< $@
|
||||||
|
|
||||||
|
tests/seek_test$(EXESUF): tests/seek_test.o $(FF_DEP_LIBS)
|
||||||
|
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
|
||||||
|
|
||||||
|
ifdef SAMPLES
|
||||||
|
include $(SRC_PATH_BARE)/tests/fate.mak
|
||||||
|
fate: $(FATE_TESTS)
|
||||||
|
$(FATE_TESTS): ffmpeg$(EXESUF)
|
||||||
|
@echo "TEST FATE $(@:fate-%=%)"
|
||||||
|
@$(SRC_PATH)/tests/fate-run.sh $@ "$(SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)" '$(CMD)'
|
||||||
|
else
|
||||||
|
fate:
|
||||||
|
@echo "SAMPLES not specified, cannot run FATE"
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: documentation *test regtest-* zlib-error alltools check config
|
||||||
|
195
RELEASE
195
RELEASE
@@ -1 +1,194 @@
|
|||||||
0.8.git
|
Release Notes
|
||||||
|
=============
|
||||||
|
|
||||||
|
* 0.6 "Works with HTML5" June, 2010
|
||||||
|
|
||||||
|
General notes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This release focuses on improvements for the new multimedia elements in HTML5.
|
||||||
|
The H.264 and Theora decoders are now significantly faster, the Vorbis decoder
|
||||||
|
has seen important updates and this release supports Google's newly released
|
||||||
|
libvpx library for the VP8 codec and WebM container.
|
||||||
|
|
||||||
|
Other important changes are additions of decoders including, but not limited to,
|
||||||
|
Intel Indeo 5, WMA Pro, WMA Voice and HE-AAC.
|
||||||
|
|
||||||
|
See the Changelog file for a list of significant changes.
|
||||||
|
|
||||||
|
Please note that our policy on bug reports has not changed. We still only accept
|
||||||
|
bug reports against HEAD of the FFmpeg trunk repository. If you are experiencing
|
||||||
|
any issues with any formally released version of FFmpeg, please try a current
|
||||||
|
version of the development code to check if the issue still exists. If it does,
|
||||||
|
make your report against the development code following the usual bug reporting
|
||||||
|
guidelines.
|
||||||
|
|
||||||
|
|
||||||
|
API and other notable Changes
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Please see the file doc/APIchanges for programmer-centric information.
|
||||||
|
|
||||||
|
Notable changes:
|
||||||
|
- deprecated vhook subsystem removed
|
||||||
|
- deprecated old scaler removed
|
||||||
|
- nonfree libamr support for AMR-NB/WB decoding/encoding removed
|
||||||
|
- RTMP support in libavformat
|
||||||
|
- -formats option split into -formats, -codecs, -bsfs, and -protocols
|
||||||
|
- ffprobe tool
|
||||||
|
- RTMP/RTMPT/RTMPS/RTMPE/RTMPTE protocol support via librtmp
|
||||||
|
- CODEC_CAP_EXPERIMENTAL added
|
||||||
|
|
||||||
|
|
||||||
|
Added Codecs:
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- VQF demuxer
|
||||||
|
- PCX encoder
|
||||||
|
- CorePNG decoding support
|
||||||
|
- 8088flex TMV demuxer and decoder
|
||||||
|
- enable symbol versioning by default for linkers that support it
|
||||||
|
- V210 decoder and encoder
|
||||||
|
- QCP demuxer
|
||||||
|
- SoX native format muxer and demuxer
|
||||||
|
- AMR-NB decoding/encoding, AMR-WB decoding via OpenCORE libraries
|
||||||
|
- DPX image decoder
|
||||||
|
- Electronic Arts Madcow decoder
|
||||||
|
- DivX (XSUB) subtitle encoder
|
||||||
|
- experimental AAC encoder
|
||||||
|
- Wave64 demuxer
|
||||||
|
- IEC-61937 compatible Muxer
|
||||||
|
- TwinVQ decoder
|
||||||
|
- Bluray (PGS) subtitle decoder
|
||||||
|
- LPCM support in MPEG-TS (HDMV RID as found on Blu-ray disks)
|
||||||
|
- WMA Pro decoder
|
||||||
|
- Core Audio Format demuxer
|
||||||
|
- Atrac1 decoder
|
||||||
|
- MD STUDIO audio demuxer
|
||||||
|
- RF64 support in WAV demuxer
|
||||||
|
- MPEG-4 Audio Lossless Coding (ALS) decoder
|
||||||
|
- IV8 demuxer
|
||||||
|
- CDG demuxer and decoder
|
||||||
|
- R210 decoder
|
||||||
|
- Auravision Aura 1 and 2 decoders
|
||||||
|
- Deluxe Paint Animation playback system
|
||||||
|
- SIPR decoder
|
||||||
|
- Adobe Filmstrip muxer and demuxer
|
||||||
|
- RTP packetization and depacketization of H.263 and AMR
|
||||||
|
- Bink demuxer and audio/video decoders
|
||||||
|
- IFF PBM/ILBM bitmap decoder
|
||||||
|
- Indeo 5 decoder
|
||||||
|
- WMA Voice decoder
|
||||||
|
- AMR-NB decoder
|
||||||
|
- RTSP muxer
|
||||||
|
- HE-AAC v1 decoder
|
||||||
|
- Kega Game Video (KGV1) decoder
|
||||||
|
- Psygnosis YOP demuxer and video decoder
|
||||||
|
- RTP hinting in the mov/3gp/mp4 muxer
|
||||||
|
- VP8 decoding via libvpx
|
||||||
|
|
||||||
|
|
||||||
|
Notable license related changes
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
- remaining GPL parts in AC-3 decoder converted to LGPL
|
||||||
|
- libswscale can now be compiled in LGPL mode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* 0.6.1
|
||||||
|
|
||||||
|
General notes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This point release includes some updates to make the 0.6 release series usable
|
||||||
|
for users that need to retain the existing behavior as closely as possible.
|
||||||
|
The changes follow below:
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- fix autodetection of E-AC-3 substream samples
|
||||||
|
- performance fix for seekable HTTP
|
||||||
|
- add missing VP80 fourcc code for the VP8 codec
|
||||||
|
- small documentation fixes
|
||||||
|
- fix several potentially exploitable issues in the FLIC decoder
|
||||||
|
(addresses CVE-2010-3429)
|
||||||
|
|
||||||
|
|
||||||
|
HE-AAC v2 backport
|
||||||
|
------------------
|
||||||
|
|
||||||
|
This release includes a backport of the AAC decoder from trunk, which
|
||||||
|
enables proper playback of HE-AAC v2 media.
|
||||||
|
|
||||||
|
|
||||||
|
* 0.6.2
|
||||||
|
|
||||||
|
General notes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This is a maintenance-only release that addresses a small number of security
|
||||||
|
and portability issues. Distributors and system integrators are encouraged
|
||||||
|
to update and share their patches against this branch.
|
||||||
|
|
||||||
|
Security fixes
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Programming errors in container and codec implementations may lead to
|
||||||
|
denial of service or the execution of arbitrary code if the user is
|
||||||
|
tricked into opening a malformed media file or stream.
|
||||||
|
|
||||||
|
Affected and updated have been the implementations of the following
|
||||||
|
codecs and container formats:
|
||||||
|
|
||||||
|
- VC1 decoder (Change related to CVE-2011-0723)
|
||||||
|
- APE decoder (cf. http://packetstorm.linuxsecurity.com/1103-exploits/vlc105-dos.txt)
|
||||||
|
|
||||||
|
|
||||||
|
* 0.6.3
|
||||||
|
|
||||||
|
General notes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This is a mostly maintenance-only release that addresses a small number
|
||||||
|
of bugs such as security and compilation issues. Moreover, this release
|
||||||
|
has been updated to work with gcc-4.6 and the VisualOn AAC encoder has
|
||||||
|
been backported from the Libav 0.7.2 release. Distributors and system
|
||||||
|
integrators are encouraged to update and share their patches against
|
||||||
|
this branch.
|
||||||
|
For a full list of changes please see the Changelog file.
|
||||||
|
|
||||||
|
|
||||||
|
* 0.6.4
|
||||||
|
|
||||||
|
General notes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This mostly maintenance-only release that addresses a number a number of
|
||||||
|
bugs such as security and compilation issues that have been brought to
|
||||||
|
our attention. Among other (rather minor) fixes, this release features
|
||||||
|
fixes for the QDM2 decoder (CVE-2011-4351), vp3 decoder (CVE-2011-4352),
|
||||||
|
DoS in the VP5/VP6 decoders (CVE-2011-4353), a buffer overflow in the
|
||||||
|
Sierra VMD decoder CVE-2011-4364, and a safety fix in the svq1 decoder
|
||||||
|
(CVE-2011-4579).
|
||||||
|
|
||||||
|
Distributors and system integrators are encouraged
|
||||||
|
to update and share their patches against this branch. For a full list
|
||||||
|
of changes please see the Changelog file.
|
||||||
|
|
||||||
|
|
||||||
|
* 0.6.5
|
||||||
|
|
||||||
|
General notes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This mostly maintenance-only release that addresses a number a number of
|
||||||
|
bugs such as security and compilation issues that have been brought to
|
||||||
|
our attention. Among other (rather minor) fixes, this release features
|
||||||
|
fixes for the VP3 decoder (CVE-2011-3892), vorbis decoder, and matroska
|
||||||
|
demuxer (CVE-2011-3893 and CVE-2011-3895).
|
||||||
|
|
||||||
|
Distributors and system integrators are encouraged
|
||||||
|
to update and share their patches against this branch. For a full list
|
||||||
|
of changes please see the Changelog file.
|
||||||
|
429
cmdutils.c
429
cmdutils.c
@@ -35,11 +35,8 @@
|
|||||||
#include "libswscale/swscale.h"
|
#include "libswscale/swscale.h"
|
||||||
#include "libpostproc/postprocess.h"
|
#include "libpostproc/postprocess.h"
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/parseutils.h"
|
|
||||||
#include "libavutil/pixdesc.h"
|
#include "libavutil/pixdesc.h"
|
||||||
#include "libavutil/eval.h"
|
#include "libavcodec/opt.h"
|
||||||
#include "libavutil/dict.h"
|
|
||||||
#include "libavutil/opt.h"
|
|
||||||
#include "cmdutils.h"
|
#include "cmdutils.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#if CONFIG_NETWORK
|
#if CONFIG_NETWORK
|
||||||
@@ -49,57 +46,25 @@
|
|||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char **opt_names;
|
||||||
|
static int opt_name_count;
|
||||||
AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
|
AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
|
||||||
AVFormatContext *avformat_opts;
|
AVFormatContext *avformat_opts;
|
||||||
struct SwsContext *sws_opts;
|
struct SwsContext *sws_opts;
|
||||||
AVDictionary *format_opts, *codec_opts;
|
|
||||||
|
|
||||||
static const int this_year = 2011;
|
const int this_year = 2010;
|
||||||
|
|
||||||
void init_opts(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < AVMEDIA_TYPE_NB; i++)
|
|
||||||
avcodec_opts[i] = avcodec_alloc_context3(NULL);
|
|
||||||
avformat_opts = avformat_alloc_context();
|
|
||||||
#if CONFIG_SWSCALE
|
|
||||||
sws_opts = sws_getContext(16, 16, 0, 16, 16, 0, SWS_BICUBIC, NULL, NULL, NULL);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void uninit_opts(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < AVMEDIA_TYPE_NB; i++)
|
|
||||||
av_freep(&avcodec_opts[i]);
|
|
||||||
av_freep(&avformat_opts->key);
|
|
||||||
av_freep(&avformat_opts);
|
|
||||||
#if CONFIG_SWSCALE
|
|
||||||
sws_freeContext(sws_opts);
|
|
||||||
sws_opts = NULL;
|
|
||||||
#endif
|
|
||||||
av_dict_free(&format_opts);
|
|
||||||
av_dict_free(&codec_opts);
|
|
||||||
}
|
|
||||||
|
|
||||||
void log_callback_help(void* ptr, int level, const char* fmt, va_list vl)
|
|
||||||
{
|
|
||||||
vfprintf(stdout, fmt, vl);
|
|
||||||
}
|
|
||||||
|
|
||||||
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max)
|
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max)
|
||||||
{
|
{
|
||||||
char *tail;
|
char *tail;
|
||||||
const char *error;
|
const char *error;
|
||||||
double d = av_strtod(numstr, &tail);
|
double d = strtod(numstr, &tail);
|
||||||
if (*tail)
|
if (*tail)
|
||||||
error= "Expected number for %s but found: %s\n";
|
error= "Expected number for %s but found: %s\n";
|
||||||
else if (d < min || d > max)
|
else if (d < min || d > max)
|
||||||
error= "The value for %s was %s which is not within %f - %f\n";
|
error= "The value for %s was %s which is not within %f - %f\n";
|
||||||
else if(type == OPT_INT64 && (int64_t)d != d)
|
else if(type == OPT_INT64 && (int64_t)d != d)
|
||||||
error= "Expected int64 for %s but found %s\n";
|
error= "Expected int64 for %s but found %s\n";
|
||||||
else if (type == OPT_INT && (int)d != d)
|
|
||||||
error= "Expected int for %s but found %s\n";
|
|
||||||
else
|
else
|
||||||
return d;
|
return d;
|
||||||
fprintf(stderr, error, context, numstr, min, max);
|
fprintf(stderr, error, context, numstr, min, max);
|
||||||
@@ -108,8 +73,8 @@ double parse_number_or_die(const char *context, const char *numstr, int type, do
|
|||||||
|
|
||||||
int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration)
|
int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration)
|
||||||
{
|
{
|
||||||
int64_t us;
|
int64_t us = parse_date(timestr, is_duration);
|
||||||
if (av_parse_time(&us, timestr, is_duration) < 0) {
|
if (us == INT64_MIN) {
|
||||||
fprintf(stderr, "Invalid %s specification for %s: %s\n",
|
fprintf(stderr, "Invalid %s specification for %s: %s\n",
|
||||||
is_duration ? "duration" : "date", context, timestr);
|
is_duration ? "duration" : "date", context, timestr);
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -149,77 +114,13 @@ static const OptionDef* find_option(const OptionDef *po, const char *name){
|
|||||||
return po;
|
return po;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(__MINGW32CE__)
|
|
||||||
#include <windows.h>
|
|
||||||
/* Will be leaked on exit */
|
|
||||||
static char** win32_argv_utf8 = NULL;
|
|
||||||
static int win32_argc = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare command line arguments for executable.
|
|
||||||
* For Windows - perform wide-char to UTF-8 conversion.
|
|
||||||
* Input arguments should be main() function arguments.
|
|
||||||
* @param argc_ptr Arguments number (including executable)
|
|
||||||
* @param argv_ptr Arguments list.
|
|
||||||
*/
|
|
||||||
static void prepare_app_arguments(int *argc_ptr, char ***argv_ptr)
|
|
||||||
{
|
|
||||||
char *argstr_flat;
|
|
||||||
wchar_t **argv_w;
|
|
||||||
int i, buffsize = 0, offset = 0;
|
|
||||||
|
|
||||||
if (win32_argv_utf8) {
|
|
||||||
*argc_ptr = win32_argc;
|
|
||||||
*argv_ptr = win32_argv_utf8;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
win32_argc = 0;
|
|
||||||
argv_w = CommandLineToArgvW(GetCommandLineW(), &win32_argc);
|
|
||||||
if (win32_argc <= 0 || !argv_w)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* determine the UTF-8 buffer size (including NULL-termination symbols) */
|
|
||||||
for (i = 0; i < win32_argc; i++)
|
|
||||||
buffsize += WideCharToMultiByte(CP_UTF8, 0, argv_w[i], -1,
|
|
||||||
NULL, 0, NULL, NULL);
|
|
||||||
|
|
||||||
win32_argv_utf8 = av_mallocz(sizeof(char*) * (win32_argc + 1) + buffsize);
|
|
||||||
argstr_flat = (char*)win32_argv_utf8 + sizeof(char*) * (win32_argc + 1);
|
|
||||||
if (win32_argv_utf8 == NULL) {
|
|
||||||
LocalFree(argv_w);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < win32_argc; i++) {
|
|
||||||
win32_argv_utf8[i] = &argstr_flat[offset];
|
|
||||||
offset += WideCharToMultiByte(CP_UTF8, 0, argv_w[i], -1,
|
|
||||||
&argstr_flat[offset],
|
|
||||||
buffsize - offset, NULL, NULL);
|
|
||||||
}
|
|
||||||
win32_argv_utf8[i] = NULL;
|
|
||||||
LocalFree(argv_w);
|
|
||||||
|
|
||||||
*argc_ptr = win32_argc;
|
|
||||||
*argv_ptr = win32_argv_utf8;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline void prepare_app_arguments(int *argc_ptr, char ***argv_ptr)
|
|
||||||
{
|
|
||||||
/* nothing to do */
|
|
||||||
}
|
|
||||||
#endif /* WIN32 && !__MINGW32CE__ */
|
|
||||||
|
|
||||||
void parse_options(int argc, char **argv, const OptionDef *options,
|
void parse_options(int argc, char **argv, const OptionDef *options,
|
||||||
int (* parse_arg_function)(const char *opt, const char *arg))
|
void (* parse_arg_function)(const char*))
|
||||||
{
|
{
|
||||||
const char *opt, *arg;
|
const char *opt, *arg;
|
||||||
int optindex, handleoptions=1;
|
int optindex, handleoptions=1;
|
||||||
const OptionDef *po;
|
const OptionDef *po;
|
||||||
|
|
||||||
/* perform system-dependent conversions for arguments list */
|
|
||||||
prepare_app_arguments(&argc, &argv);
|
|
||||||
|
|
||||||
/* parse options */
|
/* parse options */
|
||||||
optindex = 1;
|
optindex = 1;
|
||||||
while (optindex < argc) {
|
while (optindex < argc) {
|
||||||
@@ -266,47 +167,65 @@ unknown_opt:
|
|||||||
} else if (po->flags & OPT_INT64) {
|
} else if (po->flags & OPT_INT64) {
|
||||||
*po->u.int64_arg = parse_number_or_die(opt, arg, OPT_INT64, INT64_MIN, INT64_MAX);
|
*po->u.int64_arg = parse_number_or_die(opt, arg, OPT_INT64, INT64_MIN, INT64_MAX);
|
||||||
} else if (po->flags & OPT_FLOAT) {
|
} else if (po->flags & OPT_FLOAT) {
|
||||||
*po->u.float_arg = parse_number_or_die(opt, arg, OPT_FLOAT, -INFINITY, INFINITY);
|
*po->u.float_arg = parse_number_or_die(opt, arg, OPT_FLOAT, -1.0/0.0, 1.0/0.0);
|
||||||
} else if (po->u.func_arg) {
|
} else if (po->flags & OPT_FUNC2) {
|
||||||
if (po->u.func_arg(opt, arg) < 0) {
|
if (po->u.func2_arg(opt, arg) < 0) {
|
||||||
fprintf(stderr, "%s: failed to set value '%s' for option '%s'\n", argv[0], arg ? arg : "[null]", opt);
|
fprintf(stderr, "%s: failed to set value '%s' for option '%s'\n", argv[0], arg, opt);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
po->u.func_arg(arg);
|
||||||
}
|
}
|
||||||
if(po->flags & OPT_EXIT)
|
if(po->flags & OPT_EXIT)
|
||||||
exit(0);
|
exit(0);
|
||||||
} else {
|
} else {
|
||||||
if (parse_arg_function) {
|
if (parse_arg_function)
|
||||||
if (parse_arg_function(NULL, opt) < 0)
|
parse_arg_function(opt);
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FLAGS (o->type == FF_OPT_TYPE_FLAGS) ? AV_DICT_APPEND : 0
|
int opt_default(const char *opt, const char *arg){
|
||||||
int opt_default(const char *opt, const char *arg)
|
int type;
|
||||||
{
|
int ret= 0;
|
||||||
const AVOption *o;
|
const AVOption *o= NULL;
|
||||||
if ((o = av_opt_find(avcodec_opts[0], opt, NULL, 0, AV_OPT_SEARCH_CHILDREN)) ||
|
int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0};
|
||||||
((opt[0] == 'v' || opt[0] == 'a' || opt[0] == 's') &&
|
|
||||||
(o = av_opt_find(avcodec_opts[0], opt+1, NULL, 0, 0))))
|
for(type=0; type<AVMEDIA_TYPE_NB && ret>= 0; type++){
|
||||||
av_dict_set(&codec_opts, opt, arg, FLAGS);
|
const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]);
|
||||||
else if ((o = av_opt_find(avformat_opts, opt, NULL, 0, AV_OPT_SEARCH_CHILDREN)))
|
if(o2)
|
||||||
av_dict_set(&format_opts, opt, arg, FLAGS);
|
ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o);
|
||||||
else if ((o = av_opt_find(sws_opts, opt, NULL, 0, AV_OPT_SEARCH_CHILDREN))) {
|
}
|
||||||
// XXX we only support sws_flags, not arbitrary sws options
|
if(!o)
|
||||||
int ret = av_set_string3(sws_opts, opt, arg, 1, NULL);
|
ret = av_set_string3(avformat_opts, opt, arg, 1, &o);
|
||||||
if (ret < 0) {
|
if(!o && sws_opts)
|
||||||
av_log(NULL, AV_LOG_ERROR, "Error setting option %s.\n", opt);
|
ret = av_set_string3(sws_opts, opt, arg, 1, &o);
|
||||||
return ret;
|
if(!o){
|
||||||
}
|
if(opt[0] == 'a')
|
||||||
|
ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o);
|
||||||
|
else if(opt[0] == 'v')
|
||||||
|
ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o);
|
||||||
|
else if(opt[0] == 's')
|
||||||
|
ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o);
|
||||||
|
}
|
||||||
|
if (o && ret < 0) {
|
||||||
|
fprintf(stderr, "Invalid value '%s' for option '%s'\n", arg, opt);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (!o) {
|
||||||
|
fprintf(stderr, "Unrecognized option '%s'\n", opt);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o)
|
// av_log(NULL, AV_LOG_ERROR, "%s:%s: %f 0x%0X\n", opt, arg, av_get_double(avcodec_opts, opt, NULL), (int)av_get_int(avcodec_opts, opt, NULL));
|
||||||
return 0;
|
|
||||||
fprintf(stderr, "Unrecognized option '%s'\n", opt);
|
//FIXME we should always use avcodec_opts, ... for storing options so there will not be any need to keep track of what i set over this
|
||||||
return AVERROR_OPTION_NOT_FOUND;
|
opt_names= av_realloc(opt_names, sizeof(void*)*(opt_name_count+1));
|
||||||
|
opt_names[opt_name_count++]= o->name;
|
||||||
|
|
||||||
|
if(avcodec_opts[0]->debug || avformat_opts->debug)
|
||||||
|
av_log_set_level(AV_LOG_DEBUG);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_loglevel(const char *opt, const char *arg)
|
int opt_loglevel(const char *opt, const char *arg)
|
||||||
@@ -357,6 +276,19 @@ int opt_timelimit(const char *opt, const char *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_context_opts(void *ctx, void *opts_ctx, int flags)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0; i<opt_name_count; i++){
|
||||||
|
char buf[256];
|
||||||
|
const AVOption *opt;
|
||||||
|
const char *str= av_get_string(opts_ctx, opt_names[i], &opt, buf, sizeof(buf));
|
||||||
|
/* if an option with name opt_names[i] is present in opts_ctx then str is non-NULL */
|
||||||
|
if(str && ((opt->flags & flags) == flags))
|
||||||
|
av_set_string3(ctx, opt_names[i], str, 1, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void print_error(const char *filename, int err)
|
void print_error(const char *filename, int err)
|
||||||
{
|
{
|
||||||
char errbuf[128];
|
char errbuf[128];
|
||||||
@@ -367,50 +299,46 @@ void print_error(const char *filename, int err)
|
|||||||
fprintf(stderr, "%s: %s\n", filename, errbuf_ptr);
|
fprintf(stderr, "%s: %s\n", filename, errbuf_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int warned_cfg = 0;
|
#define PRINT_LIB_VERSION(outstream,libname,LIBNAME,indent) \
|
||||||
|
|
||||||
#define INDENT 1
|
|
||||||
#define SHOW_VERSION 2
|
|
||||||
#define SHOW_CONFIG 4
|
|
||||||
|
|
||||||
#define PRINT_LIB_INFO(outstream,libname,LIBNAME,flags) \
|
|
||||||
if (CONFIG_##LIBNAME) { \
|
if (CONFIG_##LIBNAME) { \
|
||||||
const char *indent = flags & INDENT? " " : ""; \
|
unsigned int version = libname##_version(); \
|
||||||
if (flags & SHOW_VERSION) { \
|
fprintf(outstream, "%slib%-10s %2d.%2d.%2d / %2d.%2d.%2d\n", \
|
||||||
unsigned int version = libname##_version(); \
|
indent? " " : "", #libname, \
|
||||||
fprintf(outstream, "%slib%-9s %2d.%3d.%2d / %2d.%3d.%2d\n", \
|
LIB##LIBNAME##_VERSION_MAJOR, \
|
||||||
indent, #libname, \
|
LIB##LIBNAME##_VERSION_MINOR, \
|
||||||
LIB##LIBNAME##_VERSION_MAJOR, \
|
LIB##LIBNAME##_VERSION_MICRO, \
|
||||||
LIB##LIBNAME##_VERSION_MINOR, \
|
version >> 16, version >> 8 & 0xff, version & 0xff); \
|
||||||
LIB##LIBNAME##_VERSION_MICRO, \
|
}
|
||||||
version >> 16, version >> 8 & 0xff, version & 0xff); \
|
|
||||||
} \
|
|
||||||
if (flags & SHOW_CONFIG) { \
|
|
||||||
const char *cfg = libname##_configuration(); \
|
|
||||||
if (strcmp(FFMPEG_CONFIGURATION, cfg)) { \
|
|
||||||
if (!warned_cfg) { \
|
|
||||||
fprintf(outstream, \
|
|
||||||
"%sWARNING: library configuration mismatch\n", \
|
|
||||||
indent); \
|
|
||||||
warned_cfg = 1; \
|
|
||||||
} \
|
|
||||||
fprintf(stderr, "%s%-11s configuration: %s\n", \
|
|
||||||
indent, #libname, cfg); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
|
|
||||||
static void print_all_libs_info(FILE* outstream, int flags)
|
static void print_all_lib_versions(FILE* outstream, int indent)
|
||||||
{
|
{
|
||||||
PRINT_LIB_INFO(outstream, avutil, AVUTIL, flags);
|
PRINT_LIB_VERSION(outstream, avutil, AVUTIL, indent);
|
||||||
PRINT_LIB_INFO(outstream, avcodec, AVCODEC, flags);
|
PRINT_LIB_VERSION(outstream, avcodec, AVCODEC, indent);
|
||||||
PRINT_LIB_INFO(outstream, avformat, AVFORMAT, flags);
|
PRINT_LIB_VERSION(outstream, avformat, AVFORMAT, indent);
|
||||||
PRINT_LIB_INFO(outstream, avdevice, AVDEVICE, flags);
|
PRINT_LIB_VERSION(outstream, avdevice, AVDEVICE, indent);
|
||||||
PRINT_LIB_INFO(outstream, avfilter, AVFILTER, flags);
|
PRINT_LIB_VERSION(outstream, avfilter, AVFILTER, indent);
|
||||||
PRINT_LIB_INFO(outstream, swscale, SWSCALE, flags);
|
PRINT_LIB_VERSION(outstream, swscale, SWSCALE, indent);
|
||||||
PRINT_LIB_INFO(outstream, postproc, POSTPROC, flags);
|
PRINT_LIB_VERSION(outstream, postproc, POSTPROC, indent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void maybe_print_config(const char *lib, const char *cfg)
|
||||||
|
{
|
||||||
|
static int warned_cfg;
|
||||||
|
|
||||||
|
if (strcmp(FFMPEG_CONFIGURATION, cfg)) {
|
||||||
|
if (!warned_cfg) {
|
||||||
|
fprintf(stderr, " WARNING: library configuration mismatch\n");
|
||||||
|
warned_cfg = 1;
|
||||||
|
}
|
||||||
|
fprintf(stderr, " %-11s configuration: %s\n", lib, cfg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PRINT_LIB_CONFIG(lib, tag, cfg) do { \
|
||||||
|
if (CONFIG_##lib) \
|
||||||
|
maybe_print_config(tag, cfg); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
void show_banner(void)
|
void show_banner(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-%d the FFmpeg developers\n",
|
fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-%d the FFmpeg developers\n",
|
||||||
@@ -418,17 +346,22 @@ void show_banner(void)
|
|||||||
fprintf(stderr, " built on %s %s with %s %s\n",
|
fprintf(stderr, " built on %s %s with %s %s\n",
|
||||||
__DATE__, __TIME__, CC_TYPE, CC_VERSION);
|
__DATE__, __TIME__, CC_TYPE, CC_VERSION);
|
||||||
fprintf(stderr, " configuration: " FFMPEG_CONFIGURATION "\n");
|
fprintf(stderr, " configuration: " FFMPEG_CONFIGURATION "\n");
|
||||||
print_all_libs_info(stderr, INDENT|SHOW_CONFIG);
|
PRINT_LIB_CONFIG(AVUTIL, "libavutil", avutil_configuration());
|
||||||
print_all_libs_info(stderr, INDENT|SHOW_VERSION);
|
PRINT_LIB_CONFIG(AVCODEC, "libavcodec", avcodec_configuration());
|
||||||
|
PRINT_LIB_CONFIG(AVFORMAT, "libavformat", avformat_configuration());
|
||||||
|
PRINT_LIB_CONFIG(AVDEVICE, "libavdevice", avdevice_configuration());
|
||||||
|
PRINT_LIB_CONFIG(AVFILTER, "libavfilter", avfilter_configuration());
|
||||||
|
PRINT_LIB_CONFIG(SWSCALE, "libswscale", swscale_configuration());
|
||||||
|
PRINT_LIB_CONFIG(POSTPROC, "libpostproc", postproc_configuration());
|
||||||
|
print_all_lib_versions(stderr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_version(const char *opt, const char *arg) {
|
void show_version(void) {
|
||||||
printf("%s " FFMPEG_VERSION "\n", program_name);
|
printf("%s " FFMPEG_VERSION "\n", program_name);
|
||||||
print_all_libs_info(stdout, SHOW_VERSION);
|
print_all_lib_versions(stdout, 0);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_license(const char *opt, const char *arg)
|
void show_license(void)
|
||||||
{
|
{
|
||||||
printf(
|
printf(
|
||||||
#if CONFIG_NONFREE
|
#if CONFIG_NONFREE
|
||||||
@@ -495,10 +428,19 @@ int opt_license(const char *opt, const char *arg)
|
|||||||
program_name, program_name, program_name
|
program_name, program_name, program_name
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_formats(const char *opt, const char *arg)
|
void list_fmts(void (*get_fmt_string)(char *buf, int buf_size, int fmt), int nb_fmts)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char fmt_str[128];
|
||||||
|
for (i=-1; i < nb_fmts; i++) {
|
||||||
|
get_fmt_string (fmt_str, sizeof(fmt_str), i);
|
||||||
|
fprintf(stdout, "%s\n", fmt_str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void show_formats(void)
|
||||||
{
|
{
|
||||||
AVInputFormat *ifmt=NULL;
|
AVInputFormat *ifmt=NULL;
|
||||||
AVOutputFormat *ofmt=NULL;
|
AVOutputFormat *ofmt=NULL;
|
||||||
@@ -545,10 +487,9 @@ int opt_formats(const char *opt, const char *arg)
|
|||||||
name,
|
name,
|
||||||
long_name ? long_name:" ");
|
long_name ? long_name:" ");
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_codecs(const char *opt, const char *arg)
|
void show_codecs(void)
|
||||||
{
|
{
|
||||||
AVCodec *p=NULL, *p2;
|
AVCodec *p=NULL, *p2;
|
||||||
const char *last_name;
|
const char *last_name;
|
||||||
@@ -622,10 +563,9 @@ int opt_codecs(const char *opt, const char *arg)
|
|||||||
"even though both encoding and decoding are supported. For example, the h263\n"
|
"even though both encoding and decoding are supported. For example, the h263\n"
|
||||||
"decoder corresponds to the h263 and h263p encoders, for file formats it is even\n"
|
"decoder corresponds to the h263 and h263p encoders, for file formats it is even\n"
|
||||||
"worse.\n");
|
"worse.\n");
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_bsfs(const char *opt, const char *arg)
|
void show_bsfs(void)
|
||||||
{
|
{
|
||||||
AVBitStreamFilter *bsf=NULL;
|
AVBitStreamFilter *bsf=NULL;
|
||||||
|
|
||||||
@@ -633,29 +573,18 @@ int opt_bsfs(const char *opt, const char *arg)
|
|||||||
while((bsf = av_bitstream_filter_next(bsf)))
|
while((bsf = av_bitstream_filter_next(bsf)))
|
||||||
printf("%s\n", bsf->name);
|
printf("%s\n", bsf->name);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_protocols(const char *opt, const char *arg)
|
void show_protocols(void)
|
||||||
{
|
{
|
||||||
URLProtocol *up=NULL;
|
URLProtocol *up=NULL;
|
||||||
|
|
||||||
printf("Supported file protocols:\n"
|
printf("Supported file protocols:\n");
|
||||||
"I.. = Input supported\n"
|
|
||||||
".O. = Output supported\n"
|
|
||||||
"..S = Seek supported\n"
|
|
||||||
"FLAGS NAME\n"
|
|
||||||
"----- \n");
|
|
||||||
while((up = av_protocol_next(up)))
|
while((up = av_protocol_next(up)))
|
||||||
printf("%c%c%c %s\n",
|
printf("%s\n", up->name);
|
||||||
up->url_read ? 'I' : '.',
|
|
||||||
up->url_write ? 'O' : '.',
|
|
||||||
up->url_seek ? 'S' : '.',
|
|
||||||
up->name);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_filters(const char *opt, const char *arg)
|
void show_filters(void)
|
||||||
{
|
{
|
||||||
AVFilter av_unused(**filter) = NULL;
|
AVFilter av_unused(**filter) = NULL;
|
||||||
|
|
||||||
@@ -664,10 +593,9 @@ int opt_filters(const char *opt, const char *arg)
|
|||||||
while ((filter = av_filter_next(filter)) && *filter)
|
while ((filter = av_filter_next(filter)) && *filter)
|
||||||
printf("%-16s %s\n", (*filter)->name, (*filter)->description);
|
printf("%-16s %s\n", (*filter)->name, (*filter)->description);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_pix_fmts(const char *opt, const char *arg)
|
void show_pix_fmts(void)
|
||||||
{
|
{
|
||||||
enum PixelFormat pix_fmt;
|
enum PixelFormat pix_fmt;
|
||||||
|
|
||||||
@@ -698,7 +626,6 @@ int opt_pix_fmts(const char *opt, const char *arg)
|
|||||||
pix_desc->nb_components,
|
pix_desc->nb_components,
|
||||||
av_get_bits_per_pixel(pix_desc));
|
av_get_bits_per_pixel(pix_desc));
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_yesno(void)
|
int read_yesno(void)
|
||||||
@@ -735,95 +662,3 @@ int read_file(const char *filename, char **bufptr, size_t *size)
|
|||||||
fclose(f);
|
fclose(f);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE *get_preset_file(char *filename, size_t filename_size,
|
|
||||||
const char *preset_name, int is_path, const char *codec_name)
|
|
||||||
{
|
|
||||||
FILE *f = NULL;
|
|
||||||
int i;
|
|
||||||
const char *base[3]= { getenv("FFMPEG_DATADIR"),
|
|
||||||
getenv("HOME"),
|
|
||||||
FFMPEG_DATADIR,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (is_path) {
|
|
||||||
av_strlcpy(filename, preset_name, filename_size);
|
|
||||||
f = fopen(filename, "r");
|
|
||||||
} else {
|
|
||||||
#ifdef _WIN32
|
|
||||||
char datadir[MAX_PATH], *ls;
|
|
||||||
base[2] = NULL;
|
|
||||||
|
|
||||||
if (GetModuleFileNameA(GetModuleHandleA(NULL), datadir, sizeof(datadir) - 1))
|
|
||||||
{
|
|
||||||
for (ls = datadir; ls < datadir + strlen(datadir); ls++)
|
|
||||||
if (*ls == '\\') *ls = '/';
|
|
||||||
|
|
||||||
if (ls = strrchr(datadir, '/'))
|
|
||||||
{
|
|
||||||
*ls = 0;
|
|
||||||
strncat(datadir, "/ffpresets", sizeof(datadir) - 1 - strlen(datadir));
|
|
||||||
base[2] = datadir;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
for (i = 0; i < 3 && !f; i++) {
|
|
||||||
if (!base[i])
|
|
||||||
continue;
|
|
||||||
snprintf(filename, filename_size, "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", preset_name);
|
|
||||||
f = fopen(filename, "r");
|
|
||||||
if (!f && codec_name) {
|
|
||||||
snprintf(filename, filename_size,
|
|
||||||
"%s%s/%s-%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", codec_name, preset_name);
|
|
||||||
f = fopen(filename, "r");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, int encoder)
|
|
||||||
{
|
|
||||||
AVDictionary *ret = NULL;
|
|
||||||
AVDictionaryEntry *t = NULL;
|
|
||||||
AVCodec *codec = encoder ? avcodec_find_encoder(codec_id) : avcodec_find_decoder(codec_id);
|
|
||||||
int flags = encoder ? AV_OPT_FLAG_ENCODING_PARAM : AV_OPT_FLAG_DECODING_PARAM;
|
|
||||||
char prefix = 0;
|
|
||||||
|
|
||||||
if (!codec)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
switch (codec->type) {
|
|
||||||
case AVMEDIA_TYPE_VIDEO: prefix = 'v'; flags |= AV_OPT_FLAG_VIDEO_PARAM; break;
|
|
||||||
case AVMEDIA_TYPE_AUDIO: prefix = 'a'; flags |= AV_OPT_FLAG_AUDIO_PARAM; break;
|
|
||||||
case AVMEDIA_TYPE_SUBTITLE: prefix = 's'; flags |= AV_OPT_FLAG_SUBTITLE_PARAM; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) {
|
|
||||||
if (av_opt_find(avcodec_opts[0], t->key, NULL, flags, 0) ||
|
|
||||||
(codec && codec->priv_class && av_opt_find(&codec->priv_class, t->key, NULL, flags, 0)))
|
|
||||||
av_dict_set(&ret, t->key, t->value, 0);
|
|
||||||
else if (t->key[0] == prefix && av_opt_find(avcodec_opts[0], t->key+1, NULL, flags, 0))
|
|
||||||
av_dict_set(&ret, t->key+1, t->value, 0);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *codec_opts)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
AVDictionary **opts;
|
|
||||||
|
|
||||||
if (!s->nb_streams)
|
|
||||||
return NULL;
|
|
||||||
opts = av_mallocz(s->nb_streams * sizeof(*opts));
|
|
||||||
if (!opts) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Could not alloc memory for stream options.\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (i = 0; i < s->nb_streams; i++)
|
|
||||||
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codec->codec_id, 0);
|
|
||||||
return opts;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
157
cmdutils.h
157
cmdutils.h
@@ -22,17 +22,11 @@
|
|||||||
#ifndef FFMPEG_CMDUTILS_H
|
#ifndef FFMPEG_CMDUTILS_H
|
||||||
#define FFMPEG_CMDUTILS_H
|
#define FFMPEG_CMDUTILS_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "libavcodec/avcodec.h"
|
#include "libavcodec/avcodec.h"
|
||||||
#include "libavfilter/avfilter.h"
|
|
||||||
#include "libavformat/avformat.h"
|
#include "libavformat/avformat.h"
|
||||||
#include "libswscale/swscale.h"
|
#include "libswscale/swscale.h"
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
#undef main /* We don't want SDL to override our main() */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* program name, defined by the program for show_version().
|
* program name, defined by the program for show_version().
|
||||||
*/
|
*/
|
||||||
@@ -43,27 +37,12 @@ extern const char program_name[];
|
|||||||
*/
|
*/
|
||||||
extern const int program_birth_year;
|
extern const int program_birth_year;
|
||||||
|
|
||||||
|
extern const int this_year;
|
||||||
|
|
||||||
|
extern const char **opt_names;
|
||||||
extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
|
extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
|
||||||
extern AVFormatContext *avformat_opts;
|
extern AVFormatContext *avformat_opts;
|
||||||
extern struct SwsContext *sws_opts;
|
extern struct SwsContext *sws_opts;
|
||||||
extern AVDictionary *format_opts, *codec_opts;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the cmdutils option system, in particular
|
|
||||||
* allocate the *_opts contexts.
|
|
||||||
*/
|
|
||||||
void init_opts(void);
|
|
||||||
/**
|
|
||||||
* Uninitialize the cmdutils option system, in particular
|
|
||||||
* free the *_opts contexts and their contents.
|
|
||||||
*/
|
|
||||||
void uninit_opts(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trivial log callback.
|
|
||||||
* Only suitable for opt_help and similar since it lacks prefix handling.
|
|
||||||
*/
|
|
||||||
void log_callback_help(void* ptr, int level, const char* fmt, va_list vl);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fallback for options that are not explicitly handled, these will be
|
* Fallback for options that are not explicitly handled, these will be
|
||||||
@@ -72,7 +51,7 @@ void log_callback_help(void* ptr, int level, const char* fmt, va_list vl);
|
|||||||
int opt_default(const char *opt, const char *arg);
|
int opt_default(const char *opt, const char *arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the libav* libraries log level.
|
* Sets the libav* libraries log level.
|
||||||
*/
|
*/
|
||||||
int opt_loglevel(const char *opt, const char *arg);
|
int opt_loglevel(const char *opt, const char *arg);
|
||||||
|
|
||||||
@@ -82,8 +61,8 @@ int opt_loglevel(const char *opt, const char *arg);
|
|||||||
int opt_timelimit(const char *opt, const char *arg);
|
int opt_timelimit(const char *opt, const char *arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a string and return its corresponding value as a double.
|
* Parses a string and returns its corresponding value as a double.
|
||||||
* Exit from the application if the string cannot be correctly
|
* Exits from the application if the string cannot be correctly
|
||||||
* parsed or the corresponding value is invalid.
|
* parsed or the corresponding value is invalid.
|
||||||
*
|
*
|
||||||
* @param context the context of the value to be set (e.g. the
|
* @param context the context of the value to be set (e.g. the
|
||||||
@@ -97,8 +76,8 @@ int opt_timelimit(const char *opt, const char *arg);
|
|||||||
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max);
|
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a string specifying a time and return its corresponding
|
* Parses a string specifying a time and returns its corresponding
|
||||||
* value as a number of microseconds. Exit from the application if
|
* value as a number of microseconds. Exits from the application if
|
||||||
* the string cannot be correctly parsed.
|
* the string cannot be correctly parsed.
|
||||||
*
|
*
|
||||||
* @param context the context of the value to be set (e.g. the
|
* @param context the context of the value to be set (e.g. the
|
||||||
@@ -125,14 +104,15 @@ typedef struct {
|
|||||||
#define OPT_INT 0x0080
|
#define OPT_INT 0x0080
|
||||||
#define OPT_FLOAT 0x0100
|
#define OPT_FLOAT 0x0100
|
||||||
#define OPT_SUBTITLE 0x0200
|
#define OPT_SUBTITLE 0x0200
|
||||||
#define OPT_INT64 0x0400
|
#define OPT_FUNC2 0x0400
|
||||||
#define OPT_EXIT 0x0800
|
#define OPT_INT64 0x0800
|
||||||
#define OPT_DATA 0x1000
|
#define OPT_EXIT 0x1000
|
||||||
union {
|
union {
|
||||||
|
void (*func_arg)(const char *); //FIXME passing error code as int return would be nicer then exit() in the func
|
||||||
int *int_arg;
|
int *int_arg;
|
||||||
char **str_arg;
|
char **str_arg;
|
||||||
float *float_arg;
|
float *float_arg;
|
||||||
int (*func_arg)(const char *, const char *);
|
int (*func2_arg)(const char *, const char *);
|
||||||
int64_t *int64_arg;
|
int64_t *int64_arg;
|
||||||
} u;
|
} u;
|
||||||
const char *help;
|
const char *help;
|
||||||
@@ -142,42 +122,20 @@ typedef struct {
|
|||||||
void show_help_options(const OptionDef *options, const char *msg, int mask, int value);
|
void show_help_options(const OptionDef *options, const char *msg, int mask, int value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse the command line arguments.
|
* Parses the command line arguments.
|
||||||
* @param options Array with the definitions required to interpret every
|
* @param options Array with the definitions required to interpret every
|
||||||
* option of the form: -option_name [argument]
|
* option of the form: -<option_name> [<argument>]
|
||||||
* @param parse_arg_function Name of the function called to process every
|
* @param parse_arg_function Name of the function called to process every
|
||||||
* argument without a leading option name flag. NULL if such arguments do
|
* argument without a leading option name flag. NULL if such arguments do
|
||||||
* not have to be processed.
|
* not have to be processed.
|
||||||
*/
|
*/
|
||||||
void parse_options(int argc, char **argv, const OptionDef *options,
|
void parse_options(int argc, char **argv, const OptionDef *options,
|
||||||
int (* parse_arg_function)(const char *opt, const char *arg));
|
void (* parse_arg_function)(const char*));
|
||||||
|
|
||||||
|
void set_context_opts(void *ctx, void *opts_ctx, int flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter out options for given codec.
|
* Prints an error message to stderr, indicating filename and a human
|
||||||
*
|
|
||||||
* Create a new options dictionary containing only the options from
|
|
||||||
* opts which apply to the codec with ID codec_id.
|
|
||||||
*
|
|
||||||
* @param encoder if non-zero the codec is an encoder, otherwise is a decoder
|
|
||||||
* @return a pointer to the created dictionary
|
|
||||||
*/
|
|
||||||
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, int encoder);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup AVCodecContext options for avformat_find_stream_info().
|
|
||||||
*
|
|
||||||
* Create an array of dictionaries, one dictionary for each stream
|
|
||||||
* contained in s.
|
|
||||||
* Each dictionary will contain the options from codec_opts which can
|
|
||||||
* be applied to the corresponding stream codec context.
|
|
||||||
*
|
|
||||||
* @return pointer to the created array of dictionaries, NULL if it
|
|
||||||
* cannot be created
|
|
||||||
*/
|
|
||||||
AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *codec_opts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print an error message to stderr, indicating filename and a human
|
|
||||||
* readable description of the error code err.
|
* readable description of the error code err.
|
||||||
*
|
*
|
||||||
* If strerror_r() is not available the use of this function in a
|
* If strerror_r() is not available the use of this function in a
|
||||||
@@ -187,106 +145,79 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *cod
|
|||||||
*/
|
*/
|
||||||
void print_error(const char *filename, int err);
|
void print_error(const char *filename, int err);
|
||||||
|
|
||||||
|
void list_fmts(void (*get_fmt_string)(char *buf, int buf_size, int fmt), int nb_fmts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print the program banner to stderr. The banner contents depend on the
|
* Prints the program banner to stderr. The banner contents depend on the
|
||||||
* current version of the repository and of the libav* libraries used by
|
* current version of the repository and of the libav* libraries used by
|
||||||
* the program.
|
* the program.
|
||||||
*/
|
*/
|
||||||
void show_banner(void);
|
void show_banner(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print the version of the program to stdout. The version message
|
* Prints the version of the program to stdout. The version message
|
||||||
* depends on the current versions of the repository and of the libav*
|
* depends on the current versions of the repository and of the libav*
|
||||||
* libraries.
|
* libraries.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_version(const char *opt, const char *arg);
|
void show_version(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print the license of the program to stdout. The license depends on
|
* Prints the license of the program to stdout. The license depends on
|
||||||
* the license of the libraries compiled into the program.
|
* the license of the libraries compiled into the program.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_license(const char *opt, const char *arg);
|
void show_license(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print a listing containing all the formats supported by the
|
* Prints a listing containing all the formats supported by the
|
||||||
* program.
|
* program.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_formats(const char *opt, const char *arg);
|
void show_formats(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print a listing containing all the codecs supported by the
|
* Prints a listing containing all the codecs supported by the
|
||||||
* program.
|
* program.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_codecs(const char *opt, const char *arg);
|
void show_codecs(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print a listing containing all the filters supported by the
|
* Prints a listing containing all the filters supported by the
|
||||||
* program.
|
* program.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_filters(const char *opt, const char *arg);
|
void show_filters(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print a listing containing all the bit stream filters supported by the
|
* Prints a listing containing all the bit stream filters supported by the
|
||||||
* program.
|
* program.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_bsfs(const char *opt, const char *arg);
|
void show_bsfs(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print a listing containing all the protocols supported by the
|
* Prints a listing containing all the protocols supported by the
|
||||||
* program.
|
* program.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_protocols(const char *opt, const char *arg);
|
void show_protocols(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print a listing containing all the pixel formats supported by the
|
* Prints a listing containing all the pixel formats supported by the
|
||||||
* program.
|
* program.
|
||||||
* This option processing function does not utilize the arguments.
|
|
||||||
*/
|
*/
|
||||||
int opt_pix_fmts(const char *opt, const char *arg);
|
void show_pix_fmts(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a positive value if a line read from standard input
|
* Returns a positive value if reads from standard input a line
|
||||||
* starts with [yY], otherwise return 0.
|
* starting with [yY], otherwise returns 0.
|
||||||
*/
|
*/
|
||||||
int read_yesno(void);
|
int read_yesno(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read the file with name filename, and put its content in a newly
|
* Reads the file with name filename, and puts its content in a newly
|
||||||
* allocated 0-terminated buffer.
|
* allocated 0-terminated buffer.
|
||||||
*
|
*
|
||||||
* @param bufptr location where pointer to buffer is returned
|
* @param bufptr puts here the pointer to the newly allocated buffer
|
||||||
* @param size location where size of buffer is returned
|
* @param size puts here the size of the newly allocated buffer
|
||||||
* @return 0 in case of success, a negative value corresponding to an
|
* @return 0 in case of success, a negative value corresponding to an
|
||||||
* AVERROR error code in case of failure.
|
* AVERROR error code in case of failure.
|
||||||
*/
|
*/
|
||||||
int read_file(const char *filename, char **bufptr, size_t *size);
|
int read_file(const char *filename, char **bufptr, size_t *size);
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a file corresponding to a preset file.
|
|
||||||
*
|
|
||||||
* If is_path is non-zero, look for the file in the path preset_name.
|
|
||||||
* Otherwise search for a file named arg.ffpreset in the directories
|
|
||||||
* $FFMPEG_DATADIR (if set), $HOME/.ffmpeg, and in the datadir defined
|
|
||||||
* at configuration time or in a "ffpresets" folder along the executable
|
|
||||||
* on win32, in that order. If no such file is found and
|
|
||||||
* codec_name is defined, then search for a file named
|
|
||||||
* codec_name-preset_name.ffpreset in the above-mentioned directories.
|
|
||||||
*
|
|
||||||
* @param filename buffer where the name of the found filename is written
|
|
||||||
* @param filename_size size in bytes of the filename buffer
|
|
||||||
* @param preset_name name of the preset to search
|
|
||||||
* @param is_path tell if preset_name is a filename path
|
|
||||||
* @param codec_name name of the codec for which to look for the
|
|
||||||
* preset, may be NULL
|
|
||||||
*/
|
|
||||||
FILE *get_preset_file(char *filename, size_t filename_size,
|
|
||||||
const char *preset_name, int is_path, const char *codec_name);
|
|
||||||
|
|
||||||
#endif /* FFMPEG_CMDUTILS_H */
|
#endif /* FFMPEG_CMDUTILS_H */
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
{ "L", OPT_EXIT, {(void*)opt_license}, "show license" },
|
{ "L", OPT_EXIT, {(void*)show_license}, "show license" },
|
||||||
{ "h", OPT_EXIT, {(void*)opt_help}, "show help" },
|
{ "h", OPT_EXIT, {(void*)show_help}, "show help" },
|
||||||
{ "?", OPT_EXIT, {(void*)opt_help}, "show help" },
|
{ "?", OPT_EXIT, {(void*)show_help}, "show help" },
|
||||||
{ "help", OPT_EXIT, {(void*)opt_help}, "show help" },
|
{ "help", OPT_EXIT, {(void*)show_help}, "show help" },
|
||||||
{ "-help", OPT_EXIT, {(void*)opt_help}, "show help" },
|
{ "-help", OPT_EXIT, {(void*)show_help}, "show help" },
|
||||||
{ "version", OPT_EXIT, {(void*)opt_version}, "show version" },
|
{ "version", OPT_EXIT, {(void*)show_version}, "show version" },
|
||||||
{ "formats" , OPT_EXIT, {(void*)opt_formats }, "show available formats" },
|
{ "formats" , OPT_EXIT, {(void*)show_formats }, "show available formats" },
|
||||||
{ "codecs" , OPT_EXIT, {(void*)opt_codecs }, "show available codecs" },
|
{ "codecs" , OPT_EXIT, {(void*)show_codecs }, "show available codecs" },
|
||||||
{ "bsfs" , OPT_EXIT, {(void*)opt_bsfs }, "show available bit stream filters" },
|
{ "bsfs" , OPT_EXIT, {(void*)show_bsfs }, "show available bit stream filters" },
|
||||||
{ "protocols", OPT_EXIT, {(void*)opt_protocols}, "show available protocols" },
|
{ "protocols", OPT_EXIT, {(void*)show_protocols}, "show available protocols" },
|
||||||
{ "filters", OPT_EXIT, {(void*)opt_filters }, "show available filters" },
|
{ "filters", OPT_EXIT, {(void*)show_filters }, "show available filters" },
|
||||||
{ "pix_fmts" , OPT_EXIT, {(void*)opt_pix_fmts }, "show available pixel formats" },
|
{ "pix_fmts" , OPT_EXIT, {(void*)show_pix_fmts }, "show available pixel formats" },
|
||||||
{ "loglevel", HAS_ARG, {(void*)opt_loglevel}, "set libav* logging level", "loglevel" },
|
{ "loglevel", HAS_ARG | OPT_FUNC2, {(void*)opt_loglevel}, "set libav* logging level", "loglevel" },
|
||||||
|
87
common.mak
87
common.mak
@@ -6,6 +6,17 @@
|
|||||||
all: all-yes
|
all: all-yes
|
||||||
|
|
||||||
ifndef SUBDIR
|
ifndef SUBDIR
|
||||||
|
vpath %.c $(SRC_DIR)
|
||||||
|
vpath %.h $(SRC_DIR)
|
||||||
|
vpath %.S $(SRC_DIR)
|
||||||
|
vpath %.asm $(SRC_DIR)
|
||||||
|
vpath %.v $(SRC_DIR)
|
||||||
|
|
||||||
|
ifeq ($(SRC_DIR),$(SRC_PATH_BARE))
|
||||||
|
BUILD_ROOT_REL = .
|
||||||
|
else
|
||||||
|
BUILD_ROOT_REL = ..
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef V
|
ifndef V
|
||||||
Q = @
|
Q = @
|
||||||
@@ -15,47 +26,40 @@ SILENT = DEPCC YASMDEP RM RANLIB
|
|||||||
MSG = $@
|
MSG = $@
|
||||||
M = @$(call ECHO,$(TAG),$@);
|
M = @$(call ECHO,$(TAG),$@);
|
||||||
$(foreach VAR,$(BRIEF), \
|
$(foreach VAR,$(BRIEF), \
|
||||||
$(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
|
$(eval $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
|
||||||
$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
|
$(foreach VAR,$(SILENT),$(eval $(VAR) = @$($(VAR))))
|
||||||
$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
|
$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ALLFFLIBS = avcodec avdevice avfilter avformat avutil postproc swscale
|
ALLFFLIBS = avcodec avdevice avfilter avformat avutil postproc swscale
|
||||||
|
|
||||||
# NASM requires -I path terminated with /
|
CPPFLAGS := -I$(BUILD_ROOT_REL) -I$(SRC_PATH) $(CPPFLAGS)
|
||||||
IFLAGS := -I. -I$(SRC_PATH)/
|
CFLAGS += $(ECFLAGS)
|
||||||
CPPFLAGS := $(IFLAGS) $(CPPFLAGS)
|
|
||||||
CFLAGS += $(ECFLAGS)
|
|
||||||
CCFLAGS = $(CFLAGS)
|
|
||||||
YASMFLAGS += $(IFLAGS) -Pconfig.asm
|
|
||||||
HOSTCFLAGS += $(IFLAGS)
|
|
||||||
LDFLAGS := $(ALLFFLIBS:%=-Llib%) $(LDFLAGS)
|
|
||||||
|
|
||||||
define COMPILE
|
|
||||||
$($(1)DEP)
|
|
||||||
$($(1)) $(CPPFLAGS) $($(1)FLAGS) $($(1)_DEPFLAGS) -c $($(1)_O) $<
|
|
||||||
endef
|
|
||||||
|
|
||||||
COMPILE_C = $(call COMPILE,CC)
|
|
||||||
COMPILE_S = $(call COMPILE,AS)
|
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(COMPILE_C)
|
$(CCDEP)
|
||||||
|
$(CC) $(CPPFLAGS) $(CFLAGS) $(CC_DEPFLAGS) -c $(CC_O) $<
|
||||||
|
|
||||||
%.o: %.S
|
%.o: %.S
|
||||||
$(COMPILE_S)
|
$(ASDEP)
|
||||||
|
$(AS) $(CPPFLAGS) $(ASFLAGS) $(AS_DEPFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
%.ho: %.h
|
%.ho: %.h
|
||||||
$(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused -c -o $@ -x c $<
|
$(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused -c -o $@ -x c $<
|
||||||
|
|
||||||
|
%$(EXESUF): %.c
|
||||||
|
|
||||||
%.ver: %.v
|
%.ver: %.v
|
||||||
$(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
|
$(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
|
||||||
|
|
||||||
%.c %.h: TAG = GEN
|
%.c %.h: TAG = GEN
|
||||||
|
|
||||||
# Dummy rule to stop make trying to rebuild removed or renamed headers
|
install: install-libs install-headers
|
||||||
%.h:
|
install-libs: install-libs-yes
|
||||||
@:
|
|
||||||
|
uninstall: uninstall-libs uninstall-headers
|
||||||
|
|
||||||
|
.PHONY: all depend dep *clean install* uninstall* examples testprogs
|
||||||
|
|
||||||
# Disable suffix rules. Most of the builtin rules are suffix rules,
|
# Disable suffix rules. Most of the builtin rules are suffix rules,
|
||||||
# so this saves some time on slow systems.
|
# so this saves some time on slow systems.
|
||||||
@@ -67,46 +71,39 @@ endif
|
|||||||
|
|
||||||
OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)
|
OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)
|
||||||
|
|
||||||
|
CFLAGS += $(CFLAGS-yes)
|
||||||
OBJS += $(OBJS-yes)
|
OBJS += $(OBJS-yes)
|
||||||
FFLIBS := $(FFLIBS-yes) $(FFLIBS)
|
FFLIBS := $(FFLIBS-yes) $(FFLIBS)
|
||||||
TESTPROGS += $(TESTPROGS-yes)
|
TESTPROGS += $(TESTPROGS-yes)
|
||||||
|
|
||||||
FFEXTRALIBS := $(FFLIBS:%=-l%$(BUILDSUF)) $(EXTRALIBS)
|
FFEXTRALIBS := $(addprefix -l,$(addsuffix $(BUILDSUF),$(FFLIBS))) $(EXTRALIBS)
|
||||||
|
FFLDFLAGS := $(addprefix -L$(BUILD_ROOT)/lib,$(ALLFFLIBS)) $(LDFLAGS)
|
||||||
|
|
||||||
EXAMPLES := $(EXAMPLES:%=$(SUBDIR)%-example$(EXESUF))
|
EXAMPLES := $(addprefix $(SUBDIR),$(addsuffix -example$(EXESUF),$(EXAMPLES)))
|
||||||
OBJS := $(sort $(OBJS:%=$(SUBDIR)%))
|
OBJS := $(addprefix $(SUBDIR),$(sort $(OBJS)))
|
||||||
TESTOBJS := $(TESTOBJS:%=$(SUBDIR)%) $(TESTPROGS:%=$(SUBDIR)%-test.o)
|
TESTOBJS := $(addprefix $(SUBDIR),$(TESTOBJS))
|
||||||
TESTPROGS := $(TESTPROGS:%=$(SUBDIR)%-test$(EXESUF))
|
TESTPROGS := $(addprefix $(SUBDIR),$(addsuffix -test$(EXESUF),$(TESTPROGS)))
|
||||||
HOSTOBJS := $(HOSTPROGS:%=$(SUBDIR)%.o)
|
HOSTOBJS := $(addprefix $(SUBDIR),$(addsuffix .o,$(HOSTPROGS)))
|
||||||
HOSTPROGS := $(HOSTPROGS:%=$(SUBDIR)%$(HOSTEXESUF))
|
HOSTPROGS := $(addprefix $(SUBDIR),$(addsuffix $(HOSTEXESUF),$(HOSTPROGS)))
|
||||||
TOOLS += $(TOOLS-yes)
|
|
||||||
TOOLOBJS := $(TOOLS:%=tools/%.o)
|
|
||||||
TOOLS := $(TOOLS:%=tools/%$(EXESUF))
|
|
||||||
|
|
||||||
DEP_LIBS := $(foreach NAME,$(FFLIBS),lib$(NAME)/$($(CONFIG_SHARED:yes=S)LIBNAME))
|
DEP_LIBS := $(foreach NAME,$(FFLIBS),$(BUILD_ROOT_REL)/lib$(NAME)/$($(CONFIG_SHARED:yes=S)LIBNAME))
|
||||||
|
|
||||||
ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h))
|
ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h))
|
||||||
SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-)
|
SKIPHEADERS += $(addprefix $(ARCH)/,$(ARCH_HEADERS))
|
||||||
SKIPHEADERS := $(SKIPHEADERS:%=$(SUBDIR)%)
|
SKIPHEADERS := $(addprefix $(SUBDIR),$(SKIPHEADERS-) $(SKIPHEADERS))
|
||||||
checkheaders: $(filter-out $(SKIPHEADERS:.h=.ho),$(ALLHEADERS:.h=.ho))
|
checkheaders: $(filter-out $(SKIPHEADERS:.h=.ho),$(ALLHEADERS:.h=.ho))
|
||||||
|
|
||||||
alltools: $(TOOLS)
|
|
||||||
|
|
||||||
$(HOSTOBJS): %.o: %.c
|
$(HOSTOBJS): %.o: %.c
|
||||||
$(HOSTCC) $(HOSTCFLAGS) -c -o $@ $<
|
$(HOSTCC) $(HOSTCFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
$(HOSTPROGS): %$(HOSTEXESUF): %.o
|
$(HOSTPROGS): %$(HOSTEXESUF): %.o
|
||||||
$(HOSTCC) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
|
$(HOSTCC) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
|
||||||
|
|
||||||
$(OBJS): | $(sort $(dir $(OBJS)))
|
DEPS := $(OBJS:.o=.d)
|
||||||
$(HOSTOBJS): | $(sort $(dir $(HOSTOBJS)))
|
depend dep: $(DEPS)
|
||||||
$(TESTOBJS): | $(sort $(dir $(TESTOBJS)))
|
|
||||||
$(TOOLOBJS): | tools
|
|
||||||
|
|
||||||
OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOSTOBJS) $(TESTOBJS))
|
|
||||||
|
|
||||||
CLEANSUFFIXES = *.d *.o *~ *.ho *.map *.ver
|
CLEANSUFFIXES = *.d *.o *~ *.ho *.map *.ver
|
||||||
DISTCLEANSUFFIXES = *.pc
|
DISTCLEANSUFFIXES = *.pc
|
||||||
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp
|
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp
|
||||||
|
|
||||||
-include $(wildcard $(OBJS:.o=.d) $(TESTOBJS:.o=.d))
|
-include $(wildcard $(DEPS))
|
||||||
|
745
doc/APIchanges
745
doc/APIchanges
@@ -1,731 +1,25 @@
|
|||||||
Never assume the API of libav* to be stable unless at least 1 month has passed
|
Never assume the API of libav* to be stable unless at least 1 week has passed since
|
||||||
since the last major version increase.
|
the last major version increase.
|
||||||
|
|
||||||
The last version increases were:
|
The last version increases were:
|
||||||
libavcodec: 2011-04-18
|
libavcodec: ?
|
||||||
libavdevice: 2011-04-18
|
libavdevice: ?
|
||||||
libavfilter: 2011-04-18
|
libavfilter: 2009-10-18
|
||||||
libavformat: 2011-04-18
|
libavformat: ?
|
||||||
libpostproc: 2011-04-18
|
libpostproc: ?
|
||||||
libswscale: 2011-06-20
|
libswscale: ?
|
||||||
libavutil: 2011-04-18
|
libavutil: 2009-03-08
|
||||||
|
|
||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
2011-08-02 - 9d39cbf - lavc 53.7.1
|
|
||||||
Add AV_PKT_FLAG_CORRUPT AVPacket flag.
|
|
||||||
|
|
||||||
2011-07-10 - a67c061 - lavf 53.3.0
|
|
||||||
Add avformat_find_stream_info(), deprecate av_find_stream_info().
|
|
||||||
|
|
||||||
2011-07-10 - 0b950fe - lavc 53.6.0
|
|
||||||
Add avcodec_open2(), deprecate avcodec_open().
|
|
||||||
|
|
||||||
2011-07-01 - b442ca6 - lavf 53.5.0 - avformat.h
|
|
||||||
Add function av_get_output_timestamp().
|
|
||||||
|
|
||||||
2011-06-28 - 5129336 - lavu 51.11.0 - avutil.h
|
|
||||||
Define the AV_PICTURE_TYPE_NONE value in AVPictureType enum.
|
|
||||||
|
|
||||||
2011-06-19 - xxxxxxx - lavfi 2.23.0 - avfilter.h
|
|
||||||
Add layout negotiation fields and helper functions.
|
|
||||||
|
|
||||||
In particular, add in_chlayouts and out_chlayouts to AVFilterLink,
|
|
||||||
and the functions:
|
|
||||||
avfilter_set_common_sample_formats()
|
|
||||||
avfilter_set_common_channel_layouts()
|
|
||||||
avfilter_all_channel_layouts()
|
|
||||||
|
|
||||||
2011-06-19 - xxxxxxx - lavfi 2.22.0 - AVFilterFormats
|
|
||||||
Change type of AVFilterFormats.formats from int * to int64_t *,
|
|
||||||
and update formats handling API accordingly.
|
|
||||||
|
|
||||||
avfilter_make_format_list() still takes a int32_t array and converts
|
|
||||||
it to int64_t. A new function, avfilter_make_format64_list(), that
|
|
||||||
takes int64_t arrays has been added.
|
|
||||||
|
|
||||||
2011-06-19 - xxxxxxx - lavfi 2.21.0 - vsink_buffer.h
|
|
||||||
Add video sink buffer and vsink_buffer.h public header.
|
|
||||||
|
|
||||||
2011-06-12 - xxxxxxx - lavfi 2.18.0 - avcodec.h
|
|
||||||
Add avfilter_get_video_buffer_ref_from_frame() function in
|
|
||||||
libavfilter/avcodec.h.
|
|
||||||
|
|
||||||
2011-06-12 - xxxxxxx - lavfi 2.17.0 - avfiltergraph.h
|
|
||||||
Add avfilter_inout_alloc() and avfilter_inout_free() functions.
|
|
||||||
|
|
||||||
2011-06-12 - xxxxxxx - lavfi 2.16.0 - avfilter_graph_parse()
|
|
||||||
Change avfilter_graph_parse() signature.
|
|
||||||
|
|
||||||
2011-06-23 - 67e9ae1 - lavu 51.8.0 - attributes.h
|
|
||||||
Add av_printf_format().
|
|
||||||
|
|
||||||
2011-06-16 - 05e84c9, 25de595 - lavf 53.2.0 - avformat.h
|
|
||||||
Add avformat_open_input and avformat_write_header().
|
|
||||||
Deprecate av_open_input_stream, av_open_input_file,
|
|
||||||
AVFormatParameters and av_write_header.
|
|
||||||
|
|
||||||
2011-06-16 - 7e83e1c, dc59ec5 - lavu 51.7.0 - opt.h
|
|
||||||
Add av_opt_set_dict() and av_opt_find().
|
|
||||||
Deprecate av_find_opt().
|
|
||||||
Add AV_DICT_APPEND flag.
|
|
||||||
|
|
||||||
2011-06-10 - cb7c11c - lavu 51.6.0 - opt.h
|
|
||||||
Add av_opt_flag_is_set().
|
|
||||||
|
|
||||||
2011-06-10 - c381960 - lavfi 2.15.0 - avfilter_get_audio_buffer_ref_from_arrays
|
|
||||||
Add avfilter_get_audio_buffer_ref_from_arrays() to avfilter.h.
|
|
||||||
|
|
||||||
2011-06-09 - d9f80ea - lavu 51.8.0 - AVMetadata
|
|
||||||
Move AVMetadata from lavf to lavu and rename it to
|
|
||||||
AVDictionary -- new installed header dict.h.
|
|
||||||
All av_metadata_* functions renamed to av_dict_*.
|
|
||||||
|
|
||||||
2011-06-07 - a6703fa - lavu 51.8.0 - av_get_bytes_per_sample()
|
|
||||||
Add av_get_bytes_per_sample() in libavutil/samplefmt.h.
|
|
||||||
Deprecate av_get_bits_per_sample_fmt().
|
|
||||||
|
|
||||||
2011-06-xx - b39b062 - lavu 51.8.0 - opt.h
|
|
||||||
Add av_opt_free convenience function.
|
|
||||||
|
|
||||||
2011-06-06 - 95a0242 - lavfi 2.14.0 - AVFilterBufferRefAudioProps
|
|
||||||
Remove AVFilterBufferRefAudioProps.size, and use nb_samples in
|
|
||||||
avfilter_get_audio_buffer() and avfilter_default_get_audio_buffer() in
|
|
||||||
place of size.
|
|
||||||
|
|
||||||
2011-06-06 - 0bc2cca - lavu 51.6.0 - av_samples_alloc()
|
|
||||||
Switch nb_channels and nb_samples parameters order in
|
|
||||||
av_samples_alloc().
|
|
||||||
|
|
||||||
2011-06-06 - e1c7414 - lavu 51.5.0 - av_samples_*
|
|
||||||
Change the data layout created by av_samples_fill_arrays() and
|
|
||||||
av_samples_alloc().
|
|
||||||
|
|
||||||
2011-06-06 - 27bcf55 - lavfi 2.13.0 - vsrc_buffer.h
|
|
||||||
Make av_vsrc_buffer_add_video_buffer_ref() accepts an additional
|
|
||||||
flags parameter in input.
|
|
||||||
|
|
||||||
2011-06-03 - e977ca2 - lavfi 2.12.0 - avfilter_link_free()
|
|
||||||
Add avfilter_link_free() function.
|
|
||||||
|
|
||||||
2011-06-02 - 5ad38d9 - lavu 51.4.0 - av_force_cpu_flags()
|
|
||||||
Add av_cpu_flags() in libavutil/cpu.h.
|
|
||||||
|
|
||||||
2011-05-28 - e71f260 - lavu 51.3.0 - pixdesc.h
|
|
||||||
Add av_get_pix_fmt_name() in libavutil/pixdesc.h, and deprecate
|
|
||||||
avcodec_get_pix_fmt_name() in libavcodec/avcodec.h in its favor.
|
|
||||||
|
|
||||||
2011-05-25 - 30315a8 - lavf 53.3.0 - avformat.h
|
|
||||||
Add fps_probe_size to AVFormatContext.
|
|
||||||
|
|
||||||
2011-05-22 - 5ecdfd0 - lavf 53.2.0 - avformat.h
|
|
||||||
Introduce avformat_alloc_output_context2() and deprecate
|
|
||||||
avformat_alloc_output_context().
|
|
||||||
|
|
||||||
2011-05-22 - 83db719 - lavfi 2.10.0 - vsrc_buffer.h
|
|
||||||
Make libavfilter/vsrc_buffer.h public.
|
|
||||||
|
|
||||||
2011-05-19 - c000a9f - lavfi 2.8.0 - avcodec.h
|
|
||||||
Add av_vsrc_buffer_add_frame() to libavfilter/avcodec.h.
|
|
||||||
|
|
||||||
2011-05-14 - 9fdf772 - lavfi 2.6.0 - avcodec.h
|
|
||||||
Add avfilter_get_video_buffer_ref_from_frame() to libavfilter/avcodec.h.
|
|
||||||
|
|
||||||
2011-05-18 - 64150ff - lavc 53.7.0 - AVCodecContext.request_sample_fmt
|
|
||||||
Add request_sample_fmt field to AVCodecContext.
|
|
||||||
|
|
||||||
2011-05-10 - 188dea1 - lavc 53.6.0 - avcodec.h
|
|
||||||
Deprecate AVLPCType and the following fields in
|
|
||||||
AVCodecContext: lpc_coeff_precision, prediction_order_method,
|
|
||||||
min_partition_order, max_partition_order, lpc_type, lpc_passes.
|
|
||||||
Corresponding FLAC encoder options should be used instead.
|
|
||||||
|
|
||||||
2011-05-07 - 9fdf772 - lavfi 2.5.0 - avcodec.h
|
|
||||||
Add libavfilter/avcodec.h header and avfilter_copy_frame_props()
|
|
||||||
function.
|
|
||||||
|
|
||||||
2011-05-07 - 18ded93 - lavc 53.5.0 - AVFrame
|
|
||||||
Add format field to AVFrame.
|
|
||||||
|
|
||||||
2011-05-07 - 22333a6 - lavc 53.4.0 - AVFrame
|
|
||||||
Add width and height fields to AVFrame.
|
|
||||||
|
|
||||||
2011-05-01 - 35fe66a - lavfi 2.4.0 - avfilter.h
|
|
||||||
Rename AVFilterBufferRefVideoProps.pixel_aspect to
|
|
||||||
sample_aspect_ratio.
|
|
||||||
|
|
||||||
2011-05-01 - 77e9dee - lavc 53.3.0 - AVFrame
|
|
||||||
Add a sample_aspect_ratio field to AVFrame.
|
|
||||||
|
|
||||||
2011-05-01 - 1ba5727 - lavc 53.2.0 - AVFrame
|
|
||||||
Add a pkt_pos field to AVFrame.
|
|
||||||
|
|
||||||
2011-04-29 - 35ceaa7 - lavu 51.2.0 - mem.h
|
|
||||||
Add av_dynarray_add function for adding
|
|
||||||
an element to a dynamic array.
|
|
||||||
|
|
||||||
2011-04-26 - bebe72f - lavu 51.1.0 - avutil.h
|
|
||||||
Add AVPictureType enum and av_get_picture_type_char(), deprecate
|
|
||||||
FF_*_TYPE defines and av_get_pict_type_char() defined in
|
|
||||||
libavcodec/avcodec.h.
|
|
||||||
|
|
||||||
2011-04-26 - 10d3940 - lavfi 2.3.0 - avfilter.h
|
|
||||||
Add pict_type and key_frame fields to AVFilterBufferRefVideo.
|
|
||||||
|
|
||||||
2011-04-26 - 7a11c82 - lavfi 2.2.0 - vsrc_buffer
|
|
||||||
Add sample_aspect_ratio fields to vsrc_buffer arguments
|
|
||||||
|
|
||||||
2011-04-21 - 94f7451 - lavc 53.1.0 - avcodec.h
|
|
||||||
Add CODEC_CAP_SLICE_THREADS for codecs supporting sliced threading.
|
|
||||||
|
|
||||||
2011-04-15 - lavc 52.120.0 - avcodec.h
|
|
||||||
AVPacket structure got additional members for passing side information:
|
|
||||||
4de339e introduce side information for AVPacket
|
|
||||||
2d8591c make containers pass palette change in AVPacket
|
|
||||||
|
|
||||||
2011-04-12 - lavf 52.107.0 - avio.h
|
|
||||||
Avio cleanup, part II - deprecate the entire URLContext API:
|
|
||||||
175389c add avio_check as a replacement for url_exist
|
|
||||||
ff1ec0c add avio_pause and avio_seek_time as replacements
|
|
||||||
for _av_url_read_fseek/fpause
|
|
||||||
cdc6a87 deprecate av_protocol_next(), avio_enum_protocols
|
|
||||||
should be used instead.
|
|
||||||
80c6e23 rename url_set_interrupt_cb->avio_set_interrupt_cb.
|
|
||||||
f87b1b3 rename open flags: URL_* -> AVIO_*
|
|
||||||
f8270bb add avio_enum_protocols.
|
|
||||||
5593f03 deprecate URLProtocol.
|
|
||||||
c486dad deprecate URLContext.
|
|
||||||
026e175 deprecate the typedef for URLInterruptCB
|
|
||||||
8e76a19 deprecate av_register_protocol2.
|
|
||||||
b840484 deprecate URL_PROTOCOL_FLAG_NESTED_SCHEME
|
|
||||||
1305d93 deprecate av_url_read_seek
|
|
||||||
fa104e1 deprecate av_url_read_pause
|
|
||||||
727c7aa deprecate url_get_filename().
|
|
||||||
5958df3 deprecate url_max_packet_size().
|
|
||||||
1869ea0 deprecate url_get_file_handle().
|
|
||||||
32a97d4 deprecate url_filesize().
|
|
||||||
e52a914 deprecate url_close().
|
|
||||||
58a48c6 deprecate url_seek().
|
|
||||||
925e908 deprecate url_write().
|
|
||||||
dce3756 deprecate url_read_complete().
|
|
||||||
bc371ac deprecate url_read().
|
|
||||||
0589da0 deprecate url_open().
|
|
||||||
62eaaea deprecate url_connect.
|
|
||||||
5652bb9 deprecate url_alloc.
|
|
||||||
333e894 deprecate url_open_protocol
|
|
||||||
e230705 deprecate url_poll and URLPollEntry
|
|
||||||
|
|
||||||
2011-04-08 - lavf 52.106.0 - avformat.h
|
|
||||||
Minor avformat.h cleanup:
|
|
||||||
a9bf9d8 deprecate av_guess_image2_codec
|
|
||||||
c3675df rename avf_sdp_create->av_sdp_create
|
|
||||||
|
|
||||||
2011-04-03 - lavf 52.105.0 - avio.h
|
|
||||||
Large-scale renaming/deprecating of AVIOContext-related functions:
|
|
||||||
724f6a0 deprecate url_fdopen
|
|
||||||
403ee83 deprecate url_open_dyn_packet_buf
|
|
||||||
6dc7d80 rename url_close_dyn_buf -> avio_close_dyn_buf
|
|
||||||
b92c545 rename url_open_dyn_buf -> avio_open_dyn_buf
|
|
||||||
8978fed introduce an AVIOContext.seekable field as a replacement for
|
|
||||||
AVIOContext.is_streamed and url_is_streamed()
|
|
||||||
b64030f deprecate get_checksum()
|
|
||||||
4c4427a deprecate init_checksum()
|
|
||||||
4ec153b deprecate udp_set_remote_url/get_local_port
|
|
||||||
933e90a deprecate av_url_read_fseek/fpause
|
|
||||||
8d9769a deprecate url_fileno
|
|
||||||
b7f2fdd rename put_flush_packet -> avio_flush
|
|
||||||
35f1023 deprecate url_close_buf
|
|
||||||
83fddae deprecate url_open_buf
|
|
||||||
d9d86e0 rename url_fprintf -> avio_printf
|
|
||||||
59f65d9 deprecate url_setbufsize
|
|
||||||
3e68b3b deprecate url_ferror
|
|
||||||
66e5b1d deprecate url_feof
|
|
||||||
e8bb2e2 deprecate url_fget_max_packet_size
|
|
||||||
76aa876 rename url_fsize -> avio_size
|
|
||||||
e519753 deprecate url_fgetc
|
|
||||||
655e45e deprecate url_fgets
|
|
||||||
a2704c9 rename url_ftell -> avio_tell
|
|
||||||
e16ead0 deprecate get_strz() in favor of avio_get_str
|
|
||||||
0300db8,2af07d3 rename url_fskip -> avio_skip
|
|
||||||
6b4aa5d rename url_fseek -> avio_seek
|
|
||||||
61840b4 deprecate put_tag
|
|
||||||
22a3212 rename url_fopen/fclose -> avio_open/close.
|
|
||||||
0ac8e2b deprecate put_nbyte
|
|
||||||
77eb550 rename put_byte -> avio_w8
|
|
||||||
put_[b/l]e<type> -> avio_w[b/l]<type>
|
|
||||||
put_buffer -> avio_write
|
|
||||||
b7effd4 rename get_byte -> avio_r8,
|
|
||||||
get_[b/l]e<type> -> avio_r[b/l]<type>
|
|
||||||
get_buffer -> avio_read
|
|
||||||
b3db9ce deprecate get_partial_buffer
|
|
||||||
8d9ac96 rename av_alloc_put_byte -> avio_alloc_context
|
|
||||||
|
|
||||||
2011-03-25 - 34b47d7 - lavc 52.115.0 - AVCodecContext.audio_service_type
|
|
||||||
Add audio_service_type field to AVCodecContext.
|
|
||||||
|
|
||||||
2011-03-17 - e309fdc - lavu 50.40.0 - pixfmt.h
|
|
||||||
Add PIX_FMT_BGR48LE and PIX_FMT_BGR48BE pixel formats
|
|
||||||
|
|
||||||
2011-03-02 - 863c471 - lavf 52.103.0 - av_pkt_dump2, av_pkt_dump_log2
|
|
||||||
Add new functions av_pkt_dump2, av_pkt_dump_log2 that uses the
|
|
||||||
source stream timebase for outputting timestamps. Deprecate
|
|
||||||
av_pkt_dump and av_pkt_dump_log.
|
|
||||||
|
|
||||||
2011-02-20 - e731b8d - lavf 52.102.0 - avio.h
|
|
||||||
* e731b8d - rename init_put_byte() to ffio_init_context(), deprecating the
|
|
||||||
original, and move it to a private header so it is no longer
|
|
||||||
part of our public API. Instead, use av_alloc_put_byte().
|
|
||||||
* ae628ec - rename ByteIOContext to AVIOContext.
|
|
||||||
|
|
||||||
2011-02-16 - 09d171b - lavf 52.101.0 - avformat.h
|
|
||||||
lavu 52.39.0 - parseutils.h
|
|
||||||
* 610219a - Add av_ prefix to dump_format().
|
|
||||||
* f6c7375 - Replace parse_date() in lavf with av_parse_time() in lavu.
|
|
||||||
* ab0287f - Move find_info_tag from lavf to lavu and add av_prefix to it.
|
|
||||||
|
|
||||||
2011-02-15 - lavu 52.38.0 - merge libavcore
|
|
||||||
libavcore is merged back completely into libavutil
|
|
||||||
|
|
||||||
2011-02-10 - 55bad0c - lavc 52.113.0 - vbv_delay
|
|
||||||
Add vbv_delay field to AVCodecContext
|
|
||||||
|
|
||||||
2011-02-14 - 24a83bd - lavf 52.100.0 - AV_DISPOSITION_CLEAN_EFFECTS
|
|
||||||
Add AV_DISPOSITION_CLEAN_EFFECTS disposition flag.
|
|
||||||
|
|
||||||
2011-02-14 - 910b5b8 - lavfi 1.76.0 - AVFilterLink sample_aspect_ratio
|
|
||||||
Add sample_aspect_ratio field to AVFilterLink.
|
|
||||||
|
|
||||||
2011-02-10 - 12c14cd - lavf 52.99.0 - AVStream.disposition
|
|
||||||
Add AV_DISPOSITION_HEARING_IMPAIRED and AV_DISPOSITION_VISUAL_IMPAIRED.
|
|
||||||
|
|
||||||
2011-02-09 - 5592734 - lavc 52.112.0 - avcodec_thread_init()
|
|
||||||
Deprecate avcodec_thread_init()/avcodec_thread_free() use; instead
|
|
||||||
set thread_count before calling avcodec_open.
|
|
||||||
|
|
||||||
2011-02-09 - 778b08a - lavc 52.111.0 - threading API
|
|
||||||
Add CODEC_CAP_FRAME_THREADS with new restrictions on get_buffer()/
|
|
||||||
release_buffer()/draw_horiz_band() callbacks for appropriate codecs.
|
|
||||||
Add thread_type and active_thread_type fields to AVCodecContext.
|
|
||||||
|
|
||||||
2011-02-08 - 3940caa - lavf 52.98.0 - av_probe_input_buffer
|
|
||||||
Add av_probe_input_buffer() to avformat.h for probing format from a
|
|
||||||
ByteIOContext.
|
|
||||||
|
|
||||||
2011-02-06 - fe174fc - lavf 52.97.0 - avio.h
|
|
||||||
Add flag for non-blocking protocols: URL_FLAG_NONBLOCK
|
|
||||||
|
|
||||||
2011-02-04 - f124b08 - lavf 52.96.0 - avformat_free_context()
|
|
||||||
Add avformat_free_context() in avformat.h.
|
|
||||||
|
|
||||||
2011-02-03 - f5b82f4 - lavc 52.109.0 - add CODEC_ID_PRORES
|
|
||||||
Add CODEC_ID_PRORES to avcodec.h.
|
|
||||||
|
|
||||||
2011-02-03 - fe9a3fb - lavc 52.109.0 - H.264 profile defines
|
|
||||||
Add defines for H.264 * Constrained Baseline and Intra profiles
|
|
||||||
|
|
||||||
2011-02-02 - lavf 52.95.0
|
|
||||||
* 50196a9 - add a new installed header version.h.
|
|
||||||
* 4efd5cf, dccbd97, 93b78d1 - add several variants of public
|
|
||||||
avio_{put,get}_str* functions. Deprecate corresponding semi-public
|
|
||||||
{put,get}_str*.
|
|
||||||
|
|
||||||
2011-02-02 - dfd2a00 - lavu 50.37.0 - log.h
|
|
||||||
Make av_dlog public.
|
|
||||||
|
|
||||||
2011-01-31 - 7b3ea55 - lavfi 1.76.0 - vsrc_buffer
|
|
||||||
Add sample_aspect_ratio fields to vsrc_buffer arguments
|
|
||||||
|
|
||||||
2011-01-31 - 910b5b8 - lavfi 1.75.0 - AVFilterLink sample_aspect_ratio
|
|
||||||
Add sample_aspect_ratio field to AVFilterLink.
|
|
||||||
|
|
||||||
2011-01-15 - r26374 - lavfi 1.74.0 - AVFilterBufferRefAudioProps
|
|
||||||
Rename AVFilterBufferRefAudioProps.samples_nb to nb_samples.
|
|
||||||
|
|
||||||
2011-01-14 - r26330 - lavf 52.93.0 - av_metadata_copy()
|
|
||||||
Add av_metadata_copy() in avformat.h.
|
|
||||||
|
|
||||||
2011-01-07 - r26262 - lavc 52.107.0 - deprecate reordered_opaque
|
|
||||||
Deprecate reordered_opaque in favor of pkt_pts/dts.
|
|
||||||
|
|
||||||
2011-01-07 - r26261 - lavc 52.106.0 - pkt_dts
|
|
||||||
Add pkt_dts to AVFrame, this will in the future allow multithreading decoders
|
|
||||||
to not mess up dts.
|
|
||||||
|
|
||||||
2011-01-07 - r26260 - lavc 52.105.0 - pkt_pts
|
|
||||||
Add pkt_pts to AVFrame.
|
|
||||||
|
|
||||||
2011-01-07 - r26259 - lavc 52.104.0 - av_get_profile_name()
|
|
||||||
Add av_get_profile_name to libavcodec/avcodec.h.
|
|
||||||
|
|
||||||
2010-12-27 - r26108 - lavfi 1.71.0 - AV_PERM_NEG_LINESIZES
|
|
||||||
Add AV_PERM_NEG_LINESIZES in avfilter.h.
|
|
||||||
|
|
||||||
2010-12-27 - r26104 - lavf 52.91.0 - av_find_best_stream()
|
|
||||||
Add av_find_best_stream to libavformat/avformat.h.
|
|
||||||
|
|
||||||
2010-12-27 - r26103 - lavf 52.90.0
|
|
||||||
Add AVFMT_NOSTREAMS flag for formats with no streams,
|
|
||||||
like e.g. text metadata.
|
|
||||||
|
|
||||||
2010-12-22 - r26073 - lavu 50.36.0 - file.h
|
|
||||||
Add functions av_file_map() and av_file_unmap() in file.h.
|
|
||||||
|
|
||||||
2010-12-19 - r26056 - lavu 50.35.0 - error.h
|
|
||||||
Add "not found" error codes:
|
|
||||||
AVERROR_DEMUXER_NOT_FOUND
|
|
||||||
AVERROR_MUXER_NOT_FOUND
|
|
||||||
AVERROR_DECODER_NOT_FOUND
|
|
||||||
AVERROR_ENCODER_NOT_FOUND
|
|
||||||
AVERROR_PROTOCOL_NOT_FOUND
|
|
||||||
AVERROR_FILTER_NOT_FOUND
|
|
||||||
AVERROR_BSF_NOT_FOUND
|
|
||||||
AVERROR_STREAM_NOT_FOUND
|
|
||||||
|
|
||||||
2010-12-09 - r25923 - lavcore 0.16.0 - avcore.h
|
|
||||||
Move AV_NOPTS_VALUE, AV_TIME_BASE, AV_TIME_BASE_Q symbols from
|
|
||||||
avcodec.h to avcore.h.
|
|
||||||
|
|
||||||
2010-12-04 - r25886 - lavc 52.98.0 - CODEC_CAP_NEG_LINESIZES
|
|
||||||
Add CODEC_CAP_NEG_LINESIZES codec capability flag in avcodec.h.
|
|
||||||
|
|
||||||
2010-12-04 - r25879 - lavu 50.34.0 - av_get_pix_fmt_string()
|
|
||||||
Deprecate avcodec_pix_fmt_string() in favor of
|
|
||||||
pixdesc.h/av_get_pix_fmt_string().
|
|
||||||
|
|
||||||
2010-12-04 - r25878 - lavcore 0.15.0 - av_image_alloc()
|
|
||||||
Add av_image_alloc() to libavcore/imgutils.h.
|
|
||||||
|
|
||||||
2010-12-02 - r25862 - lavfi 1.67.0 - avfilter_graph_create_filter()
|
|
||||||
Add function avfilter_graph_create_filter() in avfiltergraph.h.
|
|
||||||
|
|
||||||
2010-11-25 - r25826 - lavfi 1.65.0 - avfilter_get_video_buffer_ref_from_arrays()
|
|
||||||
Add function avfilter_get_video_buffer_ref_from_arrays() in
|
|
||||||
avfilter.h.
|
|
||||||
|
|
||||||
2010-11-21 - r25787 - lavcore 0.14.0 - audioconvert.h
|
|
||||||
Add a public audio channel API in audioconvert.h, and deprecate the
|
|
||||||
corresponding functions in libavcodec:
|
|
||||||
avcodec_get_channel_name()
|
|
||||||
avcodec_get_channel_layout()
|
|
||||||
avcodec_get_channel_layout_string()
|
|
||||||
avcodec_channel_layout_num_channels()
|
|
||||||
and the CH_* macros defined in libavcodec/avcodec.h.
|
|
||||||
|
|
||||||
2010-11-21 - r25777 - lavf 52.85.0 - avformat.h
|
|
||||||
Add av_append_packet().
|
|
||||||
|
|
||||||
2010-11-21 - r25776 - lavc 52.97.0 - avcodec.h
|
|
||||||
Add av_grow_packet().
|
|
||||||
|
|
||||||
2010-11-17 - r25761 - lavcore 0.13.0 - parseutils.h
|
|
||||||
Add av_parse_color() declared in libavcore/parseutils.h.
|
|
||||||
|
|
||||||
2010-11-13 - r25745 - lavc 52.95.0 - AVCodecContext
|
|
||||||
Add AVCodecContext.subtitle_header and AVCodecContext.subtitle_header_size
|
|
||||||
fields.
|
|
||||||
|
|
||||||
2010-11-13 - r25740 - lavfi 1.62.0 - avfiltergraph.h
|
|
||||||
Make avfiltergraph.h public.
|
|
||||||
|
|
||||||
2010-11-13 - r25737 - lavfi 1.61.0 - avfiltergraph.h
|
|
||||||
Remove declarations from avfiltergraph.h for the functions:
|
|
||||||
avfilter_graph_check_validity()
|
|
||||||
avfilter_graph_config_links()
|
|
||||||
avfilter_graph_config_formats()
|
|
||||||
which are now internal.
|
|
||||||
Use avfilter_graph_config() instead.
|
|
||||||
|
|
||||||
2010-11-08 - r25708 - lavu 50.33.0 - eval.h
|
|
||||||
Deprecate functions:
|
|
||||||
av_parse_and_eval_expr(),
|
|
||||||
av_parse_expr(),
|
|
||||||
av_eval_expr(),
|
|
||||||
av_free_expr(),
|
|
||||||
in favor of the functions:
|
|
||||||
av_expr_parse_and_eval(),
|
|
||||||
av_expr_parse(),
|
|
||||||
av_expr_eval(),
|
|
||||||
av_expr_free().
|
|
||||||
|
|
||||||
2010-11-08 - r25707 - lavfi 1.59.0 - avfilter_free()
|
|
||||||
Rename avfilter_destroy() to avfilter_free().
|
|
||||||
This change breaks libavfilter API/ABI.
|
|
||||||
|
|
||||||
2010-11-07 - r25705 - lavfi 1.58.0 - avfiltergraph.h
|
|
||||||
Remove graphparser.h header, move AVFilterInOut and
|
|
||||||
avfilter_graph_parse() declarations to libavfilter/avfiltergraph.h.
|
|
||||||
|
|
||||||
2010-11-07 - r25700 - lavfi 1.57.0 - AVFilterInOut
|
|
||||||
Rename field AVFilterInOut.filter to AVFilterInOut.filter_ctx.
|
|
||||||
This change breaks libavfilter API.
|
|
||||||
|
|
||||||
2010-11-04 - r25674 - lavfi 1.56.0 - avfilter_graph_free()
|
|
||||||
Rename avfilter_graph_destroy() to avfilter_graph_free().
|
|
||||||
This change breaks libavfilter API/ABI.
|
|
||||||
|
|
||||||
2010-11-04 - r25673 - lavfi 1.55.0 - avfilter_graph_alloc()
|
|
||||||
Add avfilter_graph_alloc() to libavfilter/avfiltergraph.h.
|
|
||||||
|
|
||||||
2010-11-02 - r25654 - lavcore 0.12.0 - av_get_bits_per_sample_fmt()
|
|
||||||
Add av_get_bits_per_sample_fmt() to libavcore/samplefmt.h and
|
|
||||||
deprecate av_get_bits_per_sample_format().
|
|
||||||
|
|
||||||
2010-11-02 - r25653 - lavcore 0.11.0 - samplefmt.h
|
|
||||||
Add sample format functions in libavcore/samplefmt.h:
|
|
||||||
av_get_sample_fmt_name(),
|
|
||||||
av_get_sample_fmt(),
|
|
||||||
av_get_sample_fmt_string(),
|
|
||||||
and deprecate the corresponding libavcodec/audioconvert.h functions:
|
|
||||||
avcodec_get_sample_fmt_name(),
|
|
||||||
avcodec_get_sample_fmt(),
|
|
||||||
avcodec_sample_fmt_string().
|
|
||||||
|
|
||||||
2010-11-02 - r25652 - lavcore 0.10.0 - samplefmt.h
|
|
||||||
Define enum AVSampleFormat in libavcore/samplefmt.h, deprecate enum
|
|
||||||
SampleFormat.
|
|
||||||
|
|
||||||
2010-10-16 - r25502 - lavfi 1.52.0 - avfilter_graph_config()
|
|
||||||
Add the function avfilter_graph_config() in avfiltergraph.h.
|
|
||||||
|
|
||||||
2010-10-15 - r25493 - lavf 52.83.0 - metadata API
|
|
||||||
Change demuxers to export metadata in generic format and
|
|
||||||
muxers to accept generic format. Deprecate the public
|
|
||||||
conversion API.
|
|
||||||
|
|
||||||
2010-10-10 - r25441 - lavfi 1.49.0 - AVFilterLink.time_base
|
|
||||||
Add time_base field to AVFilterLink.
|
|
||||||
|
|
||||||
2010-09-27 - r25236 - lavu 50.31.0 - av_set_options_string()
|
|
||||||
Move av_set_options_string() from libavfilter/parseutils.h to
|
|
||||||
libavutil/opt.h.
|
|
||||||
|
|
||||||
2010-09-27 - r25227 - lavfi 1.47.0 - AVFilterLink
|
|
||||||
Make the AVFilterLink fields srcpad and dstpad store the pointers to
|
|
||||||
the source and destination pads, rather than their indexes.
|
|
||||||
|
|
||||||
2010-09-27 - r25225 - lavu 50.30.0 - av_get_token()
|
|
||||||
Move av_get_token() from libavfilter/parseutils.h to
|
|
||||||
libavutil/avstring.h.
|
|
||||||
|
|
||||||
2010-09-26 - r32368 - lsws 0.12.0 - swscale.h
|
|
||||||
Add the functions sws_alloc_context() and sws_init_context().
|
|
||||||
|
|
||||||
2010-09-26 - r25210 - lavu 50.29.0 - opt.h
|
|
||||||
Move libavcodec/opt.h to libavutil/opt.h.
|
|
||||||
|
|
||||||
2010-09-24 - r25174 - lavu 50.28.0 - av_log_set_flags()
|
|
||||||
Default of av_log() changed due to many problems to the old no repeat
|
|
||||||
detection. Read the docs of AV_LOG_SKIP_REPEATED in log.h before
|
|
||||||
enabling it for your app!.
|
|
||||||
|
|
||||||
2010-09-24 - r25167 - lavc 52.90.0 - av_opt_show2()
|
|
||||||
Deprecate av_opt_show() in favor or av_opt_show2().
|
|
||||||
|
|
||||||
2010-09-14 - r25120 - lavu 50.27.0 - av_popcount()
|
|
||||||
Add av_popcount() to libavutil/common.h.
|
|
||||||
|
|
||||||
2010-09-08 - r25076 - lavu 50.26.0 - av_get_cpu_flags()
|
|
||||||
Add av_get_cpu_flags().
|
|
||||||
|
|
||||||
2010-09-07 - r25067 - lavcore 0.9.0 - av_image_copy()
|
|
||||||
Add av_image_copy().
|
|
||||||
|
|
||||||
2010-09-07 - r25064 - lavcore 0.8.0 - av_image_copy_plane()
|
|
||||||
Add av_image_copy_plane().
|
|
||||||
|
|
||||||
2010-09-07 - r25057 - lavcore 0.7.0 - imgutils.h
|
|
||||||
Adopt hierarchical scheme for the imgutils.h function names,
|
|
||||||
deprecate the old names.
|
|
||||||
|
|
||||||
2010-09-04 - r25040 - lavu 50.25.0 - AV_CPU_FLAG_*
|
|
||||||
Deprecate the FF_MM_* flags defined in libavcodec/avcodec.h in favor
|
|
||||||
of the AV_CPU_FLAG_* flags defined in libavutil/cpu.h.
|
|
||||||
|
|
||||||
2010-08-26 - r24936 - lavc 52.87.0 - avcodec_get_channel_layout()
|
|
||||||
Add avcodec_get_channel_layout() in audioconvert.h.
|
|
||||||
|
|
||||||
2010-08-20 - r24851 - lavcore 0.6.0 - av_fill_image_max_pixsteps()
|
|
||||||
Rename av_fill_image_max_pixstep() to av_fill_image_max_pixsteps().
|
|
||||||
|
|
||||||
2010-08-18 - r24827 - lavcore 0.5.0 - av_fill_image_max_pixstep()
|
|
||||||
Add av_fill_image_max_pixstep() in imgutils.h.
|
|
||||||
|
|
||||||
2010-08-17 - r24814 - lavu 50.24.0 - AV_NE()
|
|
||||||
Add the AV_NE macro.
|
|
||||||
|
|
||||||
2010-08-17 - r24811 - lavfi 1.36.0 - audio framework
|
|
||||||
Implement AVFilterBufferRefAudioProps struct for audio properties,
|
|
||||||
get_audio_buffer(), filter_samples() functions and related changes.
|
|
||||||
|
|
||||||
2010-08-12 - r24787 - lavcore 0.4.0 - av_get_image_linesize()
|
|
||||||
Add av_get_image_linesize() in imgutils.h.
|
|
||||||
|
|
||||||
2010-08-11 - r24773 - lavfi 1.34.0 - AVFilterBufferRef
|
|
||||||
Resize data and linesize arrays in AVFilterBufferRef to 8.
|
|
||||||
|
|
||||||
This change breaks libavfilter API/ABI.
|
|
||||||
|
|
||||||
2010-08-11 - r24768 - lavc 52.85.0 - av_picture_data_copy()
|
|
||||||
Add av_picture_data_copy in avcodec.h.
|
|
||||||
|
|
||||||
2010-08-11 - r24765 - lavfi 1.33.0 - avfilter_open()
|
|
||||||
Change avfilter_open() signature:
|
|
||||||
AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name) ->
|
|
||||||
int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name);
|
|
||||||
|
|
||||||
This change breaks libavfilter API/ABI.
|
|
||||||
|
|
||||||
2010-08-11 - r24763 - lavfi 1.32.0 - AVFilterBufferRef
|
|
||||||
Add a type field to AVFilterBufferRef, and move video specific
|
|
||||||
properties to AVFilterBufferRefVideoProps.
|
|
||||||
|
|
||||||
This change breaks libavfilter API/ABI.
|
|
||||||
|
|
||||||
2010-08-07 - r24732 - lavfi 1.31.0 - AVFilterLink
|
|
||||||
Rename AVFilterLink fields:
|
|
||||||
AVFilterLink.srcpic -> AVFilterLink.src_buf
|
|
||||||
AVFilterLink.cur_pic -> AVFilterLink.cur_buf
|
|
||||||
AVFilterLink.outpic -> AVFilterLink.out_buf
|
|
||||||
|
|
||||||
2010-08-07 - r24731 - lavfi 1.30.0
|
|
||||||
Rename functions and fields:
|
|
||||||
avfilter_(un)ref_pic -> avfilter_(un)ref_buffer
|
|
||||||
avfilter_copy_picref_props -> avfilter_copy_buffer_ref_props
|
|
||||||
AVFilterBufferRef.pic -> AVFilterBufferRef.buffer
|
|
||||||
|
|
||||||
2010-08-07 - r24730 - lavfi 1.29.0 - AVFilterBufferRef
|
|
||||||
Rename AVFilterPicRef to AVFilterBufferRef.
|
|
||||||
|
|
||||||
2010-08-07 - r24728 - lavfi 1.28.0 - AVFilterBuffer
|
|
||||||
Move format field from AVFilterBuffer to AVFilterPicRef.
|
|
||||||
|
|
||||||
2010-08-06 - r24709 - lavcore 0.3.0 - av_check_image_size()
|
|
||||||
Deprecate avcodec_check_dimensions() in favor of the function
|
|
||||||
av_check_image_size() defined in libavcore/imgutils.h.
|
|
||||||
|
|
||||||
2010-07-30 - r24592 - lavfi 1.27.0 - AVFilterBuffer
|
|
||||||
Increase size of the arrays AVFilterBuffer.data and
|
|
||||||
AVFilterBuffer.linesize from 4 to 8.
|
|
||||||
|
|
||||||
This change breaks libavfilter ABI.
|
|
||||||
|
|
||||||
2010-07-29 - r24583 - lavcore 0.2.0 - imgutils.h
|
|
||||||
Add functions av_fill_image_linesizes() and
|
|
||||||
av_fill_image_pointers(), declared in libavcore/imgutils.h.
|
|
||||||
|
|
||||||
2010-07-27 - r24518 - lavcore 0.1.0 - parseutils.h
|
|
||||||
Deprecate av_parse_video_frame_size() and av_parse_video_frame_rate()
|
|
||||||
defined in libavcodec in favor of the newly added functions
|
|
||||||
av_parse_video_size() and av_parse_video_rate() declared in
|
|
||||||
libavcore/parseutils.h.
|
|
||||||
|
|
||||||
2010-07-23 - r24439 - lavu 50.23.0 - mathematics.h
|
|
||||||
Add the M_PHI constant definition.
|
|
||||||
|
|
||||||
2010-07-22 - r24424 - lavfi 1.26.0 - media format generalization
|
|
||||||
Add a type field to AVFilterLink.
|
|
||||||
|
|
||||||
Change the field types:
|
|
||||||
enum PixelFormat format -> int format in AVFilterBuffer
|
|
||||||
enum PixelFormat *formats -> int *formats in AVFilterFormats
|
|
||||||
enum PixelFormat *format -> int format in AVFilterLink
|
|
||||||
|
|
||||||
Change the function signatures:
|
|
||||||
AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts); ->
|
|
||||||
AVFilterFormats *avfilter_make_format_list(const int *fmts);
|
|
||||||
|
|
||||||
int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt); ->
|
|
||||||
int avfilter_add_format (AVFilterFormats **avff, int fmt);
|
|
||||||
|
|
||||||
AVFilterFormats *avfilter_all_colorspaces(void); ->
|
|
||||||
AVFilterFormats *avfilter_all_formats (enum AVMediaType type);
|
|
||||||
|
|
||||||
This change breaks libavfilter API/ABI.
|
|
||||||
|
|
||||||
2010-07-21 - r24393 - lavcore 0.0.0
|
|
||||||
Add libavcore.
|
|
||||||
|
|
||||||
2010-07-17 - r24291 - lavfi 1.25.0 - AVFilterBuffer
|
|
||||||
Remove w and h fields from AVFilterBuffer.
|
|
||||||
|
|
||||||
2010-07-17 - r24284 - lavfi 1.24.0 - AVFilterBuffer
|
|
||||||
Rename AVFilterPic to AVFilterBuffer.
|
|
||||||
|
|
||||||
2010-07-17 - r24278 - lavf 52.74.0 - url_fskip()
|
|
||||||
Make url_fskip() return an int error code instead of void.
|
|
||||||
|
|
||||||
2010-07-11 - r24199 - lavc 52.83.0
|
|
||||||
Add AVCodecContext.lpc_type and AVCodecContext.lpc_passes fields.
|
|
||||||
Add AVLPCType enum.
|
|
||||||
Deprecate AVCodecContext.use_lpc.
|
|
||||||
|
|
||||||
2010-07-11 - r24185 - lavc 52.82.0 - avsubtitle_free()
|
|
||||||
Add a function for free the contents of a AVSubtitle generated by
|
|
||||||
avcodec_decode_subtitle.
|
|
||||||
|
|
||||||
2010-07-11 - r24174 - lavu 50.22.0 - bswap.h and intreadwrite.h
|
|
||||||
Make the bswap.h and intreadwrite.h API public.
|
|
||||||
|
|
||||||
2010-07-08 - r24101 - lavu 50.21.0 - pixdesc.h
|
|
||||||
Rename read/write_line() to av_read/write_image_line().
|
|
||||||
|
|
||||||
2010-07-07 - r24091 - lavfi 1.21.0 - avfilter_copy_picref_props()
|
|
||||||
Add avfilter_copy_picref_props().
|
|
||||||
|
|
||||||
2010-07-03 - r24021 - lavc 52.79.0
|
|
||||||
Add FF_COMPLIANCE_UNOFFICIAL and change all instances of
|
|
||||||
FF_COMPLIANCE_INOFFICIAL to use FF_COMPLIANCE_UNOFFICIAL.
|
|
||||||
|
|
||||||
2010-07-02 - r23985 - lavu 50.20.0 - lfg.h
|
|
||||||
Export av_lfg_init(), av_lfg_get(), av_mlfg_get(), and av_bmg_get() through
|
|
||||||
lfg.h.
|
|
||||||
|
|
||||||
2010-06-28 - r23835 - lavfi 1.20.1 - av_parse_color()
|
|
||||||
Extend av_parse_color() syntax, make it accept an alpha value specifier and
|
|
||||||
set the alpha value to 255 by default.
|
|
||||||
|
|
||||||
2010-06-22 - r23706 - lavf 52.71.0 - URLProtocol.priv_data_size, priv_data_class
|
|
||||||
Add priv_data_size and priv_data_class to URLProtocol.
|
|
||||||
|
|
||||||
2010-06-22 - r23704 - lavf 52.70.0 - url_alloc(), url_connect()
|
|
||||||
Add url_alloc() and url_connect().
|
|
||||||
|
|
||||||
2010-06-22 - r23702 - lavf 52.69.0 - av_register_protocol2()
|
|
||||||
Add av_register_protocol2(), deprecating av_register_protocol().
|
|
||||||
|
|
||||||
2010-06-09 - r23551 - lavu 50.19.0 - av_compare_mod()
|
|
||||||
Add av_compare_mod() to libavutil/mathematics.h.
|
|
||||||
|
|
||||||
2010-06-05 - r23485 - lavu 50.18.0 - eval API
|
|
||||||
Make the eval API public.
|
|
||||||
|
|
||||||
2010-06-04 - r23461 - lavu 50.17.0 - AV_BASE64_SIZE
|
|
||||||
Add AV_BASE64_SIZE() macro.
|
|
||||||
|
|
||||||
2010-06-02 - r23421 - lavc 52.73.0 - av_get_codec_tag_string()
|
|
||||||
Add av_get_codec_tag_string().
|
|
||||||
|
|
||||||
2010-06-01 - r31301 - lsws 0.11.0 - convertPalette API
|
2010-06-01 - r31301 - lsws 0.11.0 - convertPalette API
|
||||||
Add sws_convertPalette8ToPacked32() and sws_convertPalette8ToPacked24().
|
Add sws_convertPalette8ToPacked32 and sws_convertPalette8ToPacked24
|
||||||
|
|
||||||
2010-05-26 - r23334 - lavc 52.72.0 - CODEC_CAP_EXPERIMENTAL
|
2010-05-26 - r23334 - lavc 52.72.0 - CODEC_CAP_EXPERIMENTAL
|
||||||
Add CODEC_CAP_EXPERIMENTAL flag.
|
Add CODEC_CAP_EXPERIMENTAL flag.
|
||||||
NOTE: this was backported to 0.6
|
|
||||||
|
|
||||||
2010-05-23 - r23255 - lavu 50.16.0 - av_get_random_seed()
|
|
||||||
Add av_get_random_seed().
|
|
||||||
|
|
||||||
2010-05-18 - r23161 - lavf 52.63.0 - AVFMT_FLAG_RTP_HINT
|
2010-05-18 - r23161 - lavf 52.63.0 - AVFMT_FLAG_RTP_HINT
|
||||||
Add AVFMT_FLAG_RTP_HINT as possible value for AVFormatContext.flags.
|
Add AVFMT_FLAG_RTP_HINT as possible value for AVFormatContext.flags
|
||||||
NOTE: this was backported to 0.6
|
|
||||||
|
|
||||||
2010-05-09 - r23066 - lavfi 1.20.0 - AVFilterPicRef
|
|
||||||
Add interlaced and top_field_first fields to AVFilterPicRef.
|
|
||||||
|
|
||||||
------------------------------8<-------------------------------------
|
|
||||||
0.6 branch was cut here
|
|
||||||
----------------------------->8--------------------------------------
|
|
||||||
|
|
||||||
2010-05-01 - r23002 - lavf 52.62.0 - probe function
|
2010-05-01 - r23002 - lavf 52.62.0 - probe function
|
||||||
Add av_probe_input_format2 to API, it allows ignoring probe
|
Add av_probe_input_format2 to API, it allows ignoring probe
|
||||||
@@ -736,7 +30,7 @@ API changes, most recent first:
|
|||||||
existing tags.
|
existing tags.
|
||||||
|
|
||||||
2010-04-01 - r22753 - lavc 52.66.0
|
2010-04-01 - r22753 - lavc 52.66.0
|
||||||
Add avcodec_get_edge_width().
|
Add avcodec_get_edge_width()
|
||||||
|
|
||||||
2010-03-31 - r22750 - lavc 52.65.0
|
2010-03-31 - r22750 - lavc 52.65.0
|
||||||
Add avcodec_copy_context().
|
Add avcodec_copy_context().
|
||||||
@@ -755,7 +49,7 @@ API changes, most recent first:
|
|||||||
Implement av_strerror().
|
Implement av_strerror().
|
||||||
|
|
||||||
2010-03-23 - r22649 - lavc 52.60.0 - av_dct_init()
|
2010-03-23 - r22649 - lavc 52.60.0 - av_dct_init()
|
||||||
Support DCT-I and DST-I.
|
Support DCT-I and DST-I
|
||||||
|
|
||||||
2010-03-15 - r22540 - lavf 52.56.0 - AVFormatContext.start_time_realtime
|
2010-03-15 - r22540 - lavf 52.56.0 - AVFormatContext.start_time_realtime
|
||||||
Add AVFormatContext.start_time_realtime field.
|
Add AVFormatContext.start_time_realtime field.
|
||||||
@@ -789,13 +83,13 @@ API changes, most recent first:
|
|||||||
2010-01-30 - r21545 - lavu 50.8.0 - av_get_pix_fmt()
|
2010-01-30 - r21545 - lavu 50.8.0 - av_get_pix_fmt()
|
||||||
Add av_get_pix_fmt().
|
Add av_get_pix_fmt().
|
||||||
|
|
||||||
2010-01-21 - r30381 - lsws 0.9.0 - sws_scale()
|
2010-01-21 - r30381 - lsws 0.9.0 - sws_scale
|
||||||
Change constness attributes of sws_scale() parameters.
|
Change constness attributes of sws_scale() parameters.
|
||||||
|
|
||||||
2010-01-10 - r21121 - lavfi 1.15.0 - avfilter_graph_config_links()
|
2010-01-10 - r21121 - lavfi 1.15.0 - avfilter_graph_config_links()
|
||||||
Add a log_ctx parameter to avfilter_graph_config_links().
|
Add a log_ctx parameter to avfilter_graph_config_links().
|
||||||
|
|
||||||
2010-01-07 - r30236 - lsws 0.8.0 - sws_isSupported{In,Out}put()
|
2010-01-07 - r30236 - lsws 0.8.0 - sws_isSupported{In,Out}put
|
||||||
Add sws_isSupportedInput() and sws_isSupportedOutput() functions.
|
Add sws_isSupportedInput() and sws_isSupportedOutput() functions.
|
||||||
|
|
||||||
2010-01-06 - r21035 - lavfi 1.14.0 - avfilter_add_colorspace()
|
2010-01-06 - r21035 - lavfi 1.14.0 - avfilter_add_colorspace()
|
||||||
@@ -812,8 +106,7 @@ API changes, most recent first:
|
|||||||
Add av_guess_format(), it should be used in place of guess_format().
|
Add av_guess_format(), it should be used in place of guess_format().
|
||||||
|
|
||||||
2009-12-13 - r20834 - lavf 52.43.0 - metadata API
|
2009-12-13 - r20834 - lavf 52.43.0 - metadata API
|
||||||
Add av_metadata_set2(), AV_METADATA_DONT_STRDUP_KEY and
|
Add av_metadata_set2(), AV_METADATA_DONT_STRDUP_KEY and AV_METADATA_DONT_STRDUP_VAL.
|
||||||
AV_METADATA_DONT_STRDUP_VAL.
|
|
||||||
|
|
||||||
2009-12-13 - r20829 - lavu 50.7.0 - avstring.h API
|
2009-12-13 - r20829 - lavu 50.7.0 - avstring.h API
|
||||||
Add av_d2str().
|
Add av_d2str().
|
||||||
@@ -879,10 +172,10 @@ API changes, most recent first:
|
|||||||
When the lock manager is registered, FFmpeg is guaranteed to behave
|
When the lock manager is registered, FFmpeg is guaranteed to behave
|
||||||
correctly in a multi-threaded application.
|
correctly in a multi-threaded application.
|
||||||
|
|
||||||
2009-04-30 - r18719 - lavc 52.28.0 - av_free_packet()
|
2009-04-30 - r18719 - lavc 52.28.0 - av_free_packet
|
||||||
av_free_packet() is no longer an inline function. It is now exported.
|
av_free_packet() is no longer an inline function. It is now exported.
|
||||||
|
|
||||||
2009-04-11 - r18431 - lavc 52.25.0 - deprecate av_destruct_packet_nofree()
|
2009-04-11 - r18431 - lavc 52.25.0 - deprecate av_destruct_packet_nofree
|
||||||
Please use NULL instead. This has been supported since r16506
|
Please use NULL instead. This has been supported since r16506
|
||||||
(lavf > 52.23.1, lavc > 52.10.0).
|
(lavf > 52.23.1, lavc > 52.10.0).
|
||||||
|
|
||||||
@@ -892,7 +185,7 @@ API changes, most recent first:
|
|||||||
avcodec_decode_subtitle2(). These new functions take an AVPacket *pkt
|
avcodec_decode_subtitle2(). These new functions take an AVPacket *pkt
|
||||||
argument instead of a const uint8_t *buf / int buf_size pair.
|
argument instead of a const uint8_t *buf / int buf_size pair.
|
||||||
|
|
||||||
2009-04-03 - r18321 - lavu 50.3.0 - av_fifo_space()
|
2009-04-03 - r18321 - lavu 50.3.0 - av_fifo_space
|
||||||
Introduce the av_fifo_space() function.
|
Introduce the av_fifo_space() function.
|
||||||
|
|
||||||
2009-04-02 - r18317 - lavc 52.23.0 - AVPacket
|
2009-04-02 - r18317 - lavc 52.23.0 - AVPacket
|
||||||
|
46
doc/Makefile
46
doc/Makefile
@@ -1,46 +0,0 @@
|
|||||||
MANPAGES = $(PROGS-yes:%=doc/%.1)
|
|
||||||
PODPAGES = $(PROGS-yes:%=doc/%.pod)
|
|
||||||
HTMLPAGES = $(PROGS-yes:%=doc/%.html)
|
|
||||||
|
|
||||||
DOCS = $(addprefix doc/, developer.html faq.html general.html libavfilter.html) $(HTMLPAGES) $(MANPAGES) $(PODPAGES)
|
|
||||||
|
|
||||||
all-$(CONFIG_DOC): documentation
|
|
||||||
|
|
||||||
documentation: $(DOCS)
|
|
||||||
|
|
||||||
TEXIDEP = awk '/^@include/ { printf "$@: $(@D)/%s\n", $$2 }' <$< >$(@:%=%.d)
|
|
||||||
|
|
||||||
doc/%.html: TAG = HTML
|
|
||||||
doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.init
|
|
||||||
$(Q)$(TEXIDEP)
|
|
||||||
$(M)texi2html -monolithic --init-file $(SRC_PATH)/doc/t2h.init --output $@ $<
|
|
||||||
|
|
||||||
doc/%.pod: TAG = POD
|
|
||||||
doc/%.pod: doc/%.texi
|
|
||||||
$(Q)$(TEXIDEP)
|
|
||||||
$(M)$(SRC_PATH)/doc/texi2pod.pl $< $@
|
|
||||||
|
|
||||||
doc/%.1: TAG = MAN
|
|
||||||
doc/%.1: doc/%.pod
|
|
||||||
$(M)pod2man --section=1 --center=" " --release=" " $< > $@
|
|
||||||
|
|
||||||
$(DOCS): | doc
|
|
||||||
OBJDIRS += doc
|
|
||||||
|
|
||||||
install-progs-$(CONFIG_DOC): install-man
|
|
||||||
|
|
||||||
install-man: $(MANPAGES)
|
|
||||||
$(Q)mkdir -p "$(MANDIR)/man1"
|
|
||||||
$(INSTALL) -m 644 $(MANPAGES) "$(MANDIR)/man1"
|
|
||||||
|
|
||||||
uninstall: uninstall-man
|
|
||||||
|
|
||||||
uninstall-man:
|
|
||||||
$(RM) $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
|
|
||||||
|
|
||||||
clean::
|
|
||||||
$(RM) doc/*.html doc/*.pod doc/*.1 $(CLEANSUFFIXES:%=doc/%)
|
|
||||||
|
|
||||||
-include $(wildcard $(DOCS:%=%.d))
|
|
||||||
|
|
||||||
.PHONY: documentation
|
|
@@ -1,65 +0,0 @@
|
|||||||
Release Notes
|
|
||||||
=============
|
|
||||||
|
|
||||||
* 0.8 "Love" June, 2011
|
|
||||||
* 0.7.1 "Peace" June, 2011 (identical to 0.8 but using 0.6 ABI/API)
|
|
||||||
|
|
||||||
|
|
||||||
General notes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
This release enables frame-based multithreaded decoding for a number of codecs,
|
|
||||||
including theora, huffyuv, VP8, H.263, mpeg4 and H.264. Additionally, there has
|
|
||||||
been a major cleanup of
|
|
||||||
both internal and external APIs. For this reason, the major versions of all
|
|
||||||
libraries except libpostproc have been bumped. This means that 0.8 can be installed
|
|
||||||
side-by-side with previous releases, on the other hand applications need to be
|
|
||||||
recompiled to use 0.8.
|
|
||||||
|
|
||||||
Other important changes are more than 200 bugfixes, known regressions were fixed
|
|
||||||
w.r.t 0.5 and 0.6, additions of decoders including, but not limited to,
|
|
||||||
AMR-WB, single stream LATM/LOAS, G.722 ADPCM, a native VP8 decoder
|
|
||||||
and HE-AACv2. Additionally, many new de/muxers such as WebM in Matroska, Apple
|
|
||||||
HTTP Live Streaming, SAP, IEC 61937 (S/PDIF) have been added.
|
|
||||||
|
|
||||||
See the Changelog file for a list of significant changes.
|
|
||||||
|
|
||||||
Bugreports against FFmpeg git master or the most recent FFmpeg release are
|
|
||||||
accepted. If you are experiencing issues with any formally released version of
|
|
||||||
FFmpeg, please try git master to check if the issue still exists. If it does,
|
|
||||||
make your report against the development code following the usual bug reporting
|
|
||||||
guidelines.
|
|
||||||
|
|
||||||
Note, if you have difficulty building for mingw, try --disable-outdev=sdl
|
|
||||||
|
|
||||||
|
|
||||||
API changes
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Please see git log of the public headers or the file doc/APIchanges for
|
|
||||||
programmer-centric information. Note that some long-time deprecated APIs have
|
|
||||||
been removed. Also, a number of additional APIs have been deprecated and might
|
|
||||||
be removed in the next release.
|
|
||||||
|
|
||||||
|
|
||||||
Other notable changes
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
- high quality dithering in swscale to fix banding issues
|
|
||||||
- ffmpeg is now interactive and various information can be turned on/off while its running
|
|
||||||
- resolution changing support in ffmpeg
|
|
||||||
- sdl output device
|
|
||||||
- optimizations in libavfilter that make it much faster
|
|
||||||
- split, buffer, select, lut, negate filters amongth others
|
|
||||||
- more than 50 new video filters from mplayers libmpcodecs
|
|
||||||
- many ARM NEON optimizations
|
|
||||||
- nonfree libfaad support for AAC decoding removed
|
|
||||||
- 4:4:4 H.264 decoding
|
|
||||||
- 9/10bit H.264 decoding
|
|
||||||
- Win64 Assembler support
|
|
||||||
- native MMSH/MMST support
|
|
||||||
- Windows TV demuxing
|
|
||||||
- native AMR-WB decoding
|
|
||||||
- native GSM-MS decoding
|
|
||||||
- SMPTE 302M decoding
|
|
||||||
- AVS encoding
|
|
90
doc/TODO
Normal file
90
doc/TODO
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
ffmpeg TODO list:
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Fabrice's TODO list: (unordered)
|
||||||
|
-------------------
|
||||||
|
Short term:
|
||||||
|
|
||||||
|
- use AVFMTCTX_DISCARD_PKT in ffplay so that DV has a chance to work
|
||||||
|
- add RTSP regression test (both client and server)
|
||||||
|
- make ffserver allocate AVFormatContext
|
||||||
|
- clean up (incompatible change, for 0.5.0):
|
||||||
|
* AVStream -> AVComponent
|
||||||
|
* AVFormatContext -> AVInputStream/AVOutputStream
|
||||||
|
* suppress rate_emu from AVCodecContext
|
||||||
|
- add new float/integer audio filterting and conversion : suppress
|
||||||
|
CODEC_ID_PCM_xxc and use CODEC_ID_RAWAUDIO.
|
||||||
|
- fix telecine and frame rate conversion
|
||||||
|
|
||||||
|
Long term (ask me if you want to help):
|
||||||
|
|
||||||
|
- commit new imgconvert API and new PIX_FMT_xxx alpha formats
|
||||||
|
- commit new LGPL'ed float and integer-only AC3 decoder
|
||||||
|
- add WMA integer-only decoder
|
||||||
|
- add new MPEG4-AAC audio decoder (both integer-only and float version)
|
||||||
|
|
||||||
|
Michael's TODO list: (unordered) (if anyone wanna help with sth, just ask)
|
||||||
|
-------------------
|
||||||
|
- optimize H264 CABAC
|
||||||
|
- more optimizations
|
||||||
|
- simper rate control
|
||||||
|
|
||||||
|
Francois' TODO list: (unordered, without any timeframe)
|
||||||
|
-------------------
|
||||||
|
- test MACE decoder against the openquicktime one as suggested by A'rpi
|
||||||
|
- BeOS audio input grabbing backend
|
||||||
|
- BeOS video input grabbing backend
|
||||||
|
- publish my BeOS libposix on BeBits so I can officially support ffserver :)
|
||||||
|
- check the whole code for thread-safety (global and init stuff)
|
||||||
|
|
||||||
|
Philip'a TODO list: (alphabetically ordered) (please help)
|
||||||
|
------------------
|
||||||
|
- Add a multi-ffm filetype so that feeds can be recorded into multiple files rather
|
||||||
|
than one big file.
|
||||||
|
- Authenticated users support -- where the authentication is in the URL
|
||||||
|
- Change ASF files so that the embedded timestamp in the frames is right rather
|
||||||
|
than being an offset from the start of the stream
|
||||||
|
- Make ffm files more resilient to changes in the codec structures so that you
|
||||||
|
can play old ffm files.
|
||||||
|
|
||||||
|
Baptiste's TODO list:
|
||||||
|
-----------------
|
||||||
|
- mov edit list support (AVEditList)
|
||||||
|
- YUV 10 bit per component support "2vuy"
|
||||||
|
- mxf muxer
|
||||||
|
- mpeg2 non linear quantizer
|
||||||
|
|
||||||
|
unassigned TODO: (unordered)
|
||||||
|
---------------
|
||||||
|
- use AVFrame for audio codecs too
|
||||||
|
- rework aviobuf.c buffering strategy and fix url_fskip
|
||||||
|
- generate optimal huffman tables for mjpeg encoding
|
||||||
|
- fix ffserver regression tests
|
||||||
|
- support xvids motion estimation
|
||||||
|
- support x264s motion estimation
|
||||||
|
- support x264s rate control
|
||||||
|
- SNOW: non translational motion compensation
|
||||||
|
- SNOW: more optimal quantization
|
||||||
|
- SNOW: 4x4 block support
|
||||||
|
- SNOW: 1/8 pel motion compensation support
|
||||||
|
- SNOW: iterative motion estimation based on subsampled images
|
||||||
|
- SNOW: try B frames and MCTF and see how their PSNR/bitrate/complexity behaves
|
||||||
|
- SNOW: try to use the wavelet transformed MC-ed reference frame as context for the entropy coder
|
||||||
|
- SNOW: think about/analyize how to make snow use multiple cpus/threads
|
||||||
|
- SNOW: finish spec
|
||||||
|
- FLAC: lossy encoding (viterbi and naive scalar quantization)
|
||||||
|
- libavfilter
|
||||||
|
- JPEG2000 decoder & encoder
|
||||||
|
- MPEG4 GMC encoding support
|
||||||
|
- macroblock based pixel format (better cache locality, somewhat complex, one paper claimed it faster for high res)
|
||||||
|
- regression tests for codecs which do not have an encoder (I+P-frame bitstream in svn)
|
||||||
|
- add support for using mplayers video filters to ffmpeg
|
||||||
|
- H264 encoder
|
||||||
|
- per MB ratecontrol (so VCD and such do work better)
|
||||||
|
- write a script which iteratively changes all functions between always_inline and noinline and benchmarks the result to find the best set of inlined functions
|
||||||
|
- convert all the non SIMD asm into small asm vs. C testcases and submit them to the gcc devels so they can improve gcc
|
||||||
|
- generic audio mixing API
|
||||||
|
- extract PES packetizer from PS muxer and use it for new TS muxer
|
||||||
|
- implement automatic AVBistreamFilter activation
|
||||||
|
- make cabac encoder use bytestream (see http://trac.videolan.org/x264/changeset/?format=diff&new=651)
|
||||||
|
- merge imdct and windowing, the current code does considerable amounts of redundant work
|
@@ -19,6 +19,7 @@ integer.c 128bit integer math
|
|||||||
lls.c
|
lls.c
|
||||||
mathematics.c greatest common divisor, integer sqrt, integer log2, ...
|
mathematics.c greatest common divisor, integer sqrt, integer log2, ...
|
||||||
mem.c memory allocation routines with guaranteed alignment
|
mem.c memory allocation routines with guaranteed alignment
|
||||||
|
softfloat.c
|
||||||
|
|
||||||
Headers:
|
Headers:
|
||||||
bswap.h big/little/native-endian conversion code
|
bswap.h big/little/native-endian conversion code
|
||||||
|
@@ -1,77 +0,0 @@
|
|||||||
@chapter Bitstream Filters
|
|
||||||
@c man begin BITSTREAM FILTERS
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported bitstream
|
|
||||||
filters are enabled by default. You can list all available ones using
|
|
||||||
the configure option @code{--list-bsfs}.
|
|
||||||
|
|
||||||
You can disable all the bitstream filters using the configure option
|
|
||||||
@code{--disable-bsfs}, and selectively enable any bitstream filter using
|
|
||||||
the option @code{--enable-bsf=BSF}, or you can disable a particular
|
|
||||||
bitstream filter using the option @code{--disable-bsf=BSF}.
|
|
||||||
|
|
||||||
The option @code{-bsfs} of the ff* tools will display the list of
|
|
||||||
all the supported bitstream filters included in your build.
|
|
||||||
|
|
||||||
Below is a description of the currently available bitstream filters.
|
|
||||||
|
|
||||||
@section aac_adtstoasc
|
|
||||||
|
|
||||||
@section chomp
|
|
||||||
|
|
||||||
@section dump_extradata
|
|
||||||
|
|
||||||
@section h264_mp4toannexb
|
|
||||||
|
|
||||||
@section imx_dump_header
|
|
||||||
|
|
||||||
@section mjpeg2jpeg
|
|
||||||
|
|
||||||
Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
|
|
||||||
|
|
||||||
MJPEG is a video codec wherein each video frame is essentially a
|
|
||||||
JPEG image. The individual frames can be extracted without loss,
|
|
||||||
e.g. by
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -i ../some_mjpeg.avi -vcodec copy frames_%d.jpg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Unfortunately, these chunks are incomplete JPEG images, because
|
|
||||||
they lack the DHT segment required for decoding. Quoting from
|
|
||||||
@url{http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml}:
|
|
||||||
|
|
||||||
Avery Lee, writing in the rec.video.desktop newsgroup in 2001,
|
|
||||||
commented that "MJPEG, or at least the MJPEG in AVIs having the
|
|
||||||
MJPG fourcc, is restricted JPEG with a fixed -- and *omitted* --
|
|
||||||
Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2,
|
|
||||||
and it must use basic Huffman encoding, not arithmetic or
|
|
||||||
progressive. . . . You can indeed extract the MJPEG frames and
|
|
||||||
decode them with a regular JPEG decoder, but you have to prepend
|
|
||||||
the DHT segment to them, or else the decoder won't have any idea
|
|
||||||
how to decompress the data. The exact table necessary is given in
|
|
||||||
the OpenDML spec."
|
|
||||||
|
|
||||||
This bitstream filter patches the header of frames extracted from an MJPEG
|
|
||||||
stream (carrying the AVI1 header ID and lacking a DHT segment) to
|
|
||||||
produce fully qualified JPEG images.
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -i mjpeg-movie.avi -vcodec copy -vbsf mjpeg2jpeg frame_%d.jpg
|
|
||||||
exiftran -i -9 frame*.jpg
|
|
||||||
ffmpeg -i frame_%d.jpg -vcodec copy rotated.avi
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section mjpega_dump_header
|
|
||||||
|
|
||||||
@section movsub
|
|
||||||
|
|
||||||
@section mp3_header_compress
|
|
||||||
|
|
||||||
@section mp3_header_decompress
|
|
||||||
|
|
||||||
@section noise
|
|
||||||
|
|
||||||
@section remove_extradata
|
|
||||||
|
|
||||||
@c man end BITSTREAM FILTERS
|
|
@@ -1,50 +0,0 @@
|
|||||||
FFmpeg currently uses a custom build system, this text attempts to document
|
|
||||||
some of its obscure features and options.
|
|
||||||
|
|
||||||
Makefile variables:
|
|
||||||
|
|
||||||
V
|
|
||||||
Disable the default terse mode, the full command issued by make and its
|
|
||||||
output will be shown on the screen.
|
|
||||||
|
|
||||||
DESTDIR
|
|
||||||
Destination directory for the install targets, useful to prepare packages
|
|
||||||
or install FFmpeg in cross-environments.
|
|
||||||
|
|
||||||
Makefile targets:
|
|
||||||
|
|
||||||
all
|
|
||||||
Default target, builds all the libraries and the executables.
|
|
||||||
|
|
||||||
fate
|
|
||||||
Run the fate test suite, note you must have installed it
|
|
||||||
|
|
||||||
fate-list
|
|
||||||
Will list all fate/regression test targets
|
|
||||||
|
|
||||||
install
|
|
||||||
Install headers, libraries and programs.
|
|
||||||
|
|
||||||
libavformat/output-example
|
|
||||||
Build the libavformat basic example.
|
|
||||||
|
|
||||||
libavcodec/api-example
|
|
||||||
Build the libavcodec basic example.
|
|
||||||
|
|
||||||
libswscale/swscale-test
|
|
||||||
Build the swscale self-test (useful also as example).
|
|
||||||
|
|
||||||
|
|
||||||
Useful standard make commands:
|
|
||||||
make -t <target>
|
|
||||||
Touch all files that otherwise would be build, this is useful to reduce
|
|
||||||
unneeded rebuilding when changing headers, but note you must force rebuilds
|
|
||||||
of files that actually need it by hand then.
|
|
||||||
|
|
||||||
make -j<num>
|
|
||||||
rebuild with multiple jobs at the same time. Faster on multi processor systems
|
|
||||||
|
|
||||||
make -k
|
|
||||||
continue build in case of errors, this is useful for the regression tests
|
|
||||||
sometimes but note it will still not run all reg tests.
|
|
||||||
|
|
@@ -1,50 +0,0 @@
|
|||||||
@chapter Decoders
|
|
||||||
@c man begin DECODERS
|
|
||||||
|
|
||||||
Decoders are configured elements in FFmpeg which allow the decoding of
|
|
||||||
multimedia streams.
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported native decoders
|
|
||||||
are enabled by default. Decoders requiring an external library must be enabled
|
|
||||||
manually via the corresponding @code{--enable-lib} option. You can list all
|
|
||||||
available decoders using the configure option @code{--list-decoders}.
|
|
||||||
|
|
||||||
You can disable all the decoders with the configure option
|
|
||||||
@code{--disable-decoders} and selectively enable / disable single decoders
|
|
||||||
with the options @code{--enable-decoder=@var{DECODER}} /
|
|
||||||
@code{--disable-decoder=@var{DECODER}}.
|
|
||||||
|
|
||||||
The option @code{-codecs} of the ff* tools will display the list of
|
|
||||||
enabled decoders.
|
|
||||||
|
|
||||||
@c man end DECODERS
|
|
||||||
|
|
||||||
@chapter Video Decoders
|
|
||||||
@c man begin VIDEO DECODERS
|
|
||||||
|
|
||||||
A description of some of the currently available video decoders
|
|
||||||
follows.
|
|
||||||
|
|
||||||
@section rawvideo
|
|
||||||
|
|
||||||
Rawvideo decoder.
|
|
||||||
|
|
||||||
This decoder decodes rawvideo streams.
|
|
||||||
|
|
||||||
@subsection Options
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
@item top @var{top_field_first}
|
|
||||||
Specify the assumed field type of the input video.
|
|
||||||
@table @option
|
|
||||||
@item -1
|
|
||||||
the video is assumed to be progressive (default)
|
|
||||||
@item 0
|
|
||||||
bottom-field-first is assumed
|
|
||||||
@item 1
|
|
||||||
top-field-first is assumed
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@c man end VIDEO DECODERS
|
|
@@ -1,78 +0,0 @@
|
|||||||
@chapter Demuxers
|
|
||||||
@c man begin DEMUXERS
|
|
||||||
|
|
||||||
Demuxers are configured elements in FFmpeg which allow to read the
|
|
||||||
multimedia streams from a particular type of file.
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported demuxers
|
|
||||||
are enabled by default. You can list all available ones using the
|
|
||||||
configure option "--list-demuxers".
|
|
||||||
|
|
||||||
You can disable all the demuxers using the configure option
|
|
||||||
"--disable-demuxers", and selectively enable a single demuxer with
|
|
||||||
the option "--enable-demuxer=@var{DEMUXER}", or disable it
|
|
||||||
with the option "--disable-demuxer=@var{DEMUXER}".
|
|
||||||
|
|
||||||
The option "-formats" of the ff* tools will display the list of
|
|
||||||
enabled demuxers.
|
|
||||||
|
|
||||||
The description of some of the currently available demuxers follows.
|
|
||||||
|
|
||||||
@section image2
|
|
||||||
|
|
||||||
Image file demuxer.
|
|
||||||
|
|
||||||
This demuxer reads from a list of image files specified by a pattern.
|
|
||||||
|
|
||||||
The pattern may contain the string "%d" or "%0@var{N}d", which
|
|
||||||
specifies the position of the characters representing a sequential
|
|
||||||
number in each filename matched by the pattern. If the form
|
|
||||||
"%d0@var{N}d" is used, the string representing the number in each
|
|
||||||
filename is 0-padded and @var{N} is the total number of 0-padded
|
|
||||||
digits representing the number. The literal character '%' can be
|
|
||||||
specified in the pattern with the string "%%".
|
|
||||||
|
|
||||||
If the pattern contains "%d" or "%0@var{N}d", the first filename of
|
|
||||||
the file list specified by the pattern must contain a number
|
|
||||||
inclusively contained between 0 and 4, all the following numbers must
|
|
||||||
be sequential. This limitation may be hopefully fixed.
|
|
||||||
|
|
||||||
The pattern may contain a suffix which is used to automatically
|
|
||||||
determine the format of the images contained in the files.
|
|
||||||
|
|
||||||
For example the pattern "img-%03d.bmp" will match a sequence of
|
|
||||||
filenames of the form @file{img-001.bmp}, @file{img-002.bmp}, ...,
|
|
||||||
@file{img-010.bmp}, etc.; the pattern "i%%m%%g-%d.jpg" will match a
|
|
||||||
sequence of filenames of the form @file{i%m%g-1.jpg},
|
|
||||||
@file{i%m%g-2.jpg}, ..., @file{i%m%g-10.jpg}, etc.
|
|
||||||
|
|
||||||
The size, the pixel format, and the format of each image must be the
|
|
||||||
same for all the files in the sequence.
|
|
||||||
|
|
||||||
The following example shows how to use @file{ffmpeg} for creating a
|
|
||||||
video from the images in the file sequence @file{img-001.jpeg},
|
|
||||||
@file{img-002.jpeg}, ..., assuming an input framerate of 10 frames per
|
|
||||||
second:
|
|
||||||
@example
|
|
||||||
ffmpeg -r 10 -f image2 -i 'img-%03d.jpeg' out.avi
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note that the pattern must not necessarily contain "%d" or
|
|
||||||
"%0@var{N}d", for example to convert a single image file
|
|
||||||
@file{img.jpeg} you can employ the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -f image2 -i img.jpeg img.png
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section applehttp
|
|
||||||
|
|
||||||
Apple HTTP Live Streaming demuxer.
|
|
||||||
|
|
||||||
This demuxer presents all AVStreams from all variant streams.
|
|
||||||
The id field is set to the bitrate variant index number. By setting
|
|
||||||
the discard flags on AVStreams (by pressing 'a' or 'v' in ffplay),
|
|
||||||
the caller can decide which variant streams to actually receive.
|
|
||||||
The total bitrate of the variant that the stream belongs to is
|
|
||||||
available in a metadata key named "variant_bitrate".
|
|
||||||
|
|
||||||
@c man end INPUT DEVICES
|
|
@@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
@settitle Developer Documentation
|
@settitle Developer Documentation
|
||||||
@titlepage
|
@titlepage
|
||||||
|
@sp 7
|
||||||
@center @titlefont{Developer Documentation}
|
@center @titlefont{Developer Documentation}
|
||||||
|
@sp 3
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
@top
|
|
||||||
|
|
||||||
@contents
|
|
||||||
|
|
||||||
@chapter Developers Guide
|
@chapter Developers Guide
|
||||||
|
|
||||||
@@ -34,7 +33,6 @@ You can use libavcodec or libavformat in your commercial program, but
|
|||||||
@emph{any patch you make must be published}. The best way to proceed is
|
@emph{any patch you make must be published}. The best way to proceed is
|
||||||
to send your patches to the FFmpeg mailing list.
|
to send your patches to the FFmpeg mailing list.
|
||||||
|
|
||||||
|
|
||||||
@anchor{Coding Rules}
|
@anchor{Coding Rules}
|
||||||
@section Coding Rules
|
@section Coding Rules
|
||||||
|
|
||||||
@@ -55,8 +53,10 @@ These features are supported by all compilers we care about, so we will not
|
|||||||
accept patches to remove their use unless they absolutely do not impair
|
accept patches to remove their use unless they absolutely do not impair
|
||||||
clarity and performance.
|
clarity and performance.
|
||||||
|
|
||||||
All code must compile with recent versions of GCC and a number of other
|
All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also
|
||||||
currently supported compilers. To ensure compatibility, please do not use
|
compiles with several other compilers, such as the Compaq ccc compiler
|
||||||
|
or Sun Studio 9, and we would like to keep it that way unless it would
|
||||||
|
be exceedingly involved. To ensure compatibility, please do not use any
|
||||||
additional C99 features or GCC extensions. Especially watch out for:
|
additional C99 features or GCC extensions. Especially watch out for:
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
@@ -73,7 +73,7 @@ Indent size is 4.
|
|||||||
The presentation is one inspired by 'indent -i4 -kr -nut'.
|
The presentation is one inspired by 'indent -i4 -kr -nut'.
|
||||||
The TAB character is forbidden outside of Makefiles as is any
|
The TAB character is forbidden outside of Makefiles as is any
|
||||||
form of trailing whitespace. Commits containing either will be
|
form of trailing whitespace. Commits containing either will be
|
||||||
rejected by the git repository.
|
rejected by the Subversion repository.
|
||||||
|
|
||||||
The main priority in FFmpeg is simplicity and small code size in order to
|
The main priority in FFmpeg is simplicity and small code size in order to
|
||||||
minimize the bug count.
|
minimize the bug count.
|
||||||
@@ -85,7 +85,7 @@ above them explaining what the function does, even if it is just one sentence.
|
|||||||
All structures and their member variables should be documented, too.
|
All structures and their member variables should be documented, too.
|
||||||
@example
|
@example
|
||||||
/**
|
/**
|
||||||
* @@file
|
* @@file mpeg.c
|
||||||
* MPEG codec.
|
* MPEG codec.
|
||||||
* @@author ...
|
* @@author ...
|
||||||
*/
|
*/
|
||||||
@@ -149,9 +149,9 @@ should also be avoided if they don't make the code easier to understand.
|
|||||||
Also if you have doubts about splitting or not splitting, do not hesitate to
|
Also if you have doubts about splitting or not splitting, do not hesitate to
|
||||||
ask/discuss it on the developer mailing list.
|
ask/discuss it on the developer mailing list.
|
||||||
@item
|
@item
|
||||||
Do not change behavior of the programs (renaming options etc) or public
|
Do not change behavior of the program (renaming options etc) without
|
||||||
API or ABI without first discussing it on the ffmpeg-devel mailing list.
|
first discussing it on the ffmpeg-devel mailing list. Do not remove
|
||||||
Do not remove functionality from the code. Just improve!
|
functionality from the code. Just improve!
|
||||||
|
|
||||||
Note: Redundant code can be removed.
|
Note: Redundant code can be removed.
|
||||||
@item
|
@item
|
||||||
@@ -179,13 +179,10 @@ should also be avoided if they don't make the code easier to understand.
|
|||||||
Always fill out the commit log message. Describe in a few lines what you
|
Always fill out the commit log message. Describe in a few lines what you
|
||||||
changed and why. You can refer to mailing list postings if you fix a
|
changed and why. You can refer to mailing list postings if you fix a
|
||||||
particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
|
particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
|
||||||
Recommanded format:
|
|
||||||
area changed: Short 1 line description
|
|
||||||
|
|
||||||
details describing what and why and giving references.
|
|
||||||
@item
|
@item
|
||||||
Make sure the author of the commit is set correctly. (see git commit --author)
|
If you apply a patch by someone else, include the name and email address in
|
||||||
If you apply a patch, send an
|
the log message. Since the ffmpeg-cvslog mailing list is publicly
|
||||||
|
archived you should add some SPAM protection to the email address. Send an
|
||||||
answer to ffmpeg-devel (or wherever you got the patch from) saying that
|
answer to ffmpeg-devel (or wherever you got the patch from) saying that
|
||||||
you applied the patch.
|
you applied the patch.
|
||||||
@item
|
@item
|
||||||
@@ -243,11 +240,10 @@ Note, these rules are mostly borrowed from the MPlayer project.
|
|||||||
|
|
||||||
@section Submitting patches
|
@section Submitting patches
|
||||||
|
|
||||||
First, read the @ref{Coding Rules} above if you did not yet, in particular
|
First, (@pxref{Coding Rules}) above if you did not yet.
|
||||||
the rules regarding patch submission.
|
|
||||||
|
|
||||||
When you submit your patch, please use @code{git format-patch} or
|
When you submit your patch, try to send a unified diff (diff '-up'
|
||||||
@code{git send-email}. We cannot read other diffs :-)
|
option). We cannot read other diffs :-)
|
||||||
|
|
||||||
Also please do not submit a patch which contains several unrelated changes.
|
Also please do not submit a patch which contains several unrelated changes.
|
||||||
Split it into separate, self-contained pieces. This does not mean splitting
|
Split it into separate, self-contained pieces. This does not mean splitting
|
||||||
@@ -259,13 +255,13 @@ for us and greatly increases your chances of getting your patch applied.
|
|||||||
Use the patcheck tool of FFmpeg to check your patch.
|
Use the patcheck tool of FFmpeg to check your patch.
|
||||||
The tool is located in the tools directory.
|
The tool is located in the tools directory.
|
||||||
|
|
||||||
Run the @ref{Regression Tests} before submitting a patch in order to verify
|
Run the regression tests before submitting a patch so that you can
|
||||||
it does not cause unexpected problems.
|
verify that there are no big problems.
|
||||||
|
|
||||||
Patches should be posted as base64 encoded attachments (or any other
|
Patches should be posted as base64 encoded attachments (or any other
|
||||||
encoding which ensures that the patch will not be trashed during
|
encoding which ensures that the patch will not be trashed during
|
||||||
transmission) to the ffmpeg-devel mailing list, see
|
transmission) to the ffmpeg-devel mailing list, see
|
||||||
@url{http://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel}
|
@url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel}
|
||||||
|
|
||||||
It also helps quite a bit if you tell us what the patch does (for example
|
It also helps quite a bit if you tell us what the patch does (for example
|
||||||
'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant
|
'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant
|
||||||
@@ -293,8 +289,8 @@ send a reminder by email. Your patch should eventually be dealt with.
|
|||||||
Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or
|
Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or
|
||||||
AVInputFormat/AVOutputFormat struct?
|
AVInputFormat/AVOutputFormat struct?
|
||||||
@item
|
@item
|
||||||
Did you bump the minor version number (and reset the micro version
|
Did you bump the minor version number in @file{avcodec.h} or
|
||||||
number) in @file{avcodec.h} or @file{avformat.h}?
|
@file{avformat.h}?
|
||||||
@item
|
@item
|
||||||
Did you register it in @file{allcodecs.c} or @file{allformats.c}?
|
Did you register it in @file{allcodecs.c} or @file{allformats.c}?
|
||||||
@item
|
@item
|
||||||
@@ -315,31 +311,22 @@ send a reminder by email. Your patch should eventually be dealt with.
|
|||||||
If it depends on a parser or a library, did you add that dependency in
|
If it depends on a parser or a library, did you add that dependency in
|
||||||
configure?
|
configure?
|
||||||
@item
|
@item
|
||||||
Did you @code{git add} the appropriate files before committing?
|
Did you "svn add" the appropriate files before commiting?
|
||||||
@item
|
|
||||||
Did you make sure it compiles standalone, i.e. with
|
|
||||||
@code{configure --disable-everything --enable-decoder=foo}
|
|
||||||
(or @code{--enable-demuxer} or whatever your component is)?
|
|
||||||
@end enumerate
|
@end enumerate
|
||||||
|
|
||||||
|
|
||||||
@section patch submission checklist
|
@section patch submission checklist
|
||||||
|
|
||||||
@enumerate
|
@enumerate
|
||||||
@item
|
@item
|
||||||
Does 'make fate' pass with the patch applied?
|
Do the regression tests pass with the patch applied?
|
||||||
@item
|
@item
|
||||||
Was the patch generated with git format-patch or send-email?
|
Does @code{make checkheaders} pass with the patch applied?
|
||||||
@item
|
@item
|
||||||
Did you sign off your patch? (git commit -s)
|
Is the patch a unified diff?
|
||||||
See @url{http://kerneltrap.org/files/Jeremy/DCO.txt} for the meaning
|
|
||||||
of sign off.
|
|
||||||
@item
|
@item
|
||||||
Did you provide a clear git commit log message?
|
Is the patch against latest FFmpeg SVN?
|
||||||
@item
|
@item
|
||||||
Is the patch against latest FFmpeg git master branch?
|
Are you subscribed to ffmpeg-dev?
|
||||||
@item
|
|
||||||
Are you subscribed to ffmpeg-devel?
|
|
||||||
(the list is subscribers only due to spam)
|
(the list is subscribers only due to spam)
|
||||||
@item
|
@item
|
||||||
Have you checked that the changes are minimal, so that the same cannot be
|
Have you checked that the changes are minimal, so that the same cannot be
|
||||||
@@ -355,6 +342,9 @@ send a reminder by email. Your patch should eventually be dealt with.
|
|||||||
Did you test your decoder or demuxer against damaged data? If no, see
|
Did you test your decoder or demuxer against damaged data? If no, see
|
||||||
tools/trasher and the noise bitstream filter. Your decoder or demuxer
|
tools/trasher and the noise bitstream filter. Your decoder or demuxer
|
||||||
should not crash or end in a (near) infinite loop when fed damaged data.
|
should not crash or end in a (near) infinite loop when fed damaged data.
|
||||||
|
@item
|
||||||
|
Is the patch created from the root of the source tree, so it can be
|
||||||
|
applied with @code{patch -p0}?
|
||||||
@item
|
@item
|
||||||
Does the patch not mix functional and cosmetic changes?
|
Does the patch not mix functional and cosmetic changes?
|
||||||
@item
|
@item
|
||||||
@@ -391,15 +381,13 @@ send a reminder by email. Your patch should eventually be dealt with.
|
|||||||
Lines with similar content should be aligned vertically when doing so
|
Lines with similar content should be aligned vertically when doing so
|
||||||
improves readability.
|
improves readability.
|
||||||
@item
|
@item
|
||||||
Consider to add a regression test for your code.
|
Did you provide a suggestion for a clear commit log message?
|
||||||
@item
|
|
||||||
If you added YASM code please check that things still work with --disable-yasm
|
|
||||||
@end enumerate
|
@end enumerate
|
||||||
|
|
||||||
@section Patch review process
|
@section Patch review process
|
||||||
|
|
||||||
All patches posted to ffmpeg-devel will be reviewed, unless they contain a
|
All patches posted to ffmpeg-devel will be reviewed, unless they contain a
|
||||||
clear note that the patch is not for the git master branch.
|
clear note that the patch is not for SVN.
|
||||||
Reviews and comments will be posted as replies to the patch on the
|
Reviews and comments will be posted as replies to the patch on the
|
||||||
mailing list. The patch submitter then has to take care of every comment,
|
mailing list. The patch submitter then has to take care of every comment,
|
||||||
that can be by resubmitting a changed patch or by discussion. Resubmitted
|
that can be by resubmitting a changed patch or by discussion. Resubmitted
|
||||||
|
@@ -1,591 +0,0 @@
|
|||||||
@chapter Encoders
|
|
||||||
@c man begin ENCODERS
|
|
||||||
|
|
||||||
Encoders are configured elements in FFmpeg which allow the encoding of
|
|
||||||
multimedia streams.
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported native encoders
|
|
||||||
are enabled by default. Encoders requiring an external library must be enabled
|
|
||||||
manually via the corresponding @code{--enable-lib} option. You can list all
|
|
||||||
available encoders using the configure option @code{--list-encoders}.
|
|
||||||
|
|
||||||
You can disable all the encoders with the configure option
|
|
||||||
@code{--disable-encoders} and selectively enable / disable single encoders
|
|
||||||
with the options @code{--enable-encoder=@var{ENCODER}} /
|
|
||||||
@code{--disable-encoder=@var{ENCODER}}.
|
|
||||||
|
|
||||||
The option @code{-codecs} of the ff* tools will display the list of
|
|
||||||
enabled encoders.
|
|
||||||
|
|
||||||
@c man end ENCODERS
|
|
||||||
|
|
||||||
@chapter Audio Encoders
|
|
||||||
@c man begin AUDIO ENCODERS
|
|
||||||
|
|
||||||
A description of some of the currently available audio encoders
|
|
||||||
follows.
|
|
||||||
|
|
||||||
@section ac3 and ac3_fixed
|
|
||||||
|
|
||||||
AC-3 audio encoders.
|
|
||||||
|
|
||||||
These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as
|
|
||||||
the undocumented RealAudio 3 (a.k.a. dnet).
|
|
||||||
|
|
||||||
The @var{ac3} encoder uses floating-point math, while the @var{ac3_fixed}
|
|
||||||
encoder only uses fixed-point integer math. This does not mean that one is
|
|
||||||
always faster, just that one or the other may be better suited to a
|
|
||||||
particular system. The floating-point encoder will generally produce better
|
|
||||||
quality audio for a given bitrate. The @var{ac3_fixed} encoder is not the
|
|
||||||
default codec for any of the output formats, so it must be specified explicitly
|
|
||||||
using the option @code{-acodec ac3_fixed} in order to use it.
|
|
||||||
|
|
||||||
@subsection AC-3 Metadata
|
|
||||||
|
|
||||||
The AC-3 metadata options are used to set parameters that describe the audio,
|
|
||||||
but in most cases do not affect the audio encoding itself. Some of the options
|
|
||||||
do directly affect or influence the decoding and playback of the resulting
|
|
||||||
bitstream, while others are just for informational purposes. A few of the
|
|
||||||
options will add bits to the output stream that could otherwise be used for
|
|
||||||
audio data, and will thus affect the quality of the output. Those will be
|
|
||||||
indicated accordingly with a note in the option list below.
|
|
||||||
|
|
||||||
These parameters are described in detail in several publicly-available
|
|
||||||
documents.
|
|
||||||
@itemize
|
|
||||||
@item @uref{http://www.atsc.org/cms/standards/a_52-2010.pdf,A/52:2010 - Digital Audio Compression (AC-3) (E-AC-3) Standard}
|
|
||||||
@item @uref{http://www.atsc.org/cms/standards/a_54a_with_corr_1.pdf,A/54 - Guide to the Use of the ATSC Digital Television Standard}
|
|
||||||
@item @uref{http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/18_Metadata.Guide.pdf,Dolby Metadata Guide}
|
|
||||||
@item @uref{http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/46_DDEncodingGuidelines.pdf,Dolby Digital Professional Encoding Guidelines}
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
@subsubsection Metadata Control Options
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -per_frame_metadata @var{boolean}
|
|
||||||
Allow Per-Frame Metadata. Specifies if the encoder should check for changing
|
|
||||||
metadata for each frame.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
The metadata values set at initialization will be used for every frame in the
|
|
||||||
stream. (default)
|
|
||||||
@item 1
|
|
||||||
Metadata values can be changed before encoding each frame.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsubsection Downmix Levels
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -center_mixlev @var{level}
|
|
||||||
Center Mix Level. The amount of gain the decoder should apply to the center
|
|
||||||
channel when downmixing to stereo. This field will only be written to the
|
|
||||||
bitstream if a center channel is present. The value is specified as a scale
|
|
||||||
factor. There are 3 valid values:
|
|
||||||
@table @option
|
|
||||||
@item 0.707
|
|
||||||
Apply -3dB gain
|
|
||||||
@item 0.595
|
|
||||||
Apply -4.5dB gain (default)
|
|
||||||
@item 0.500
|
|
||||||
Apply -6dB gain
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -surround_mixlev @var{level}
|
|
||||||
Surround Mix Level. The amount of gain the decoder should apply to the surround
|
|
||||||
channel(s) when downmixing to stereo. This field will only be written to the
|
|
||||||
bitstream if one or more surround channels are present. The value is specified
|
|
||||||
as a scale factor. There are 3 valid values:
|
|
||||||
@table @option
|
|
||||||
@item 0.707
|
|
||||||
Apply -3dB gain
|
|
||||||
@item 0.500
|
|
||||||
Apply -6dB gain (default)
|
|
||||||
@item 0.000
|
|
||||||
Silence Surround Channel(s)
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsubsection Audio Production Information
|
|
||||||
Audio Production Information is optional information describing the mixing
|
|
||||||
environment. Either none or both of the fields are written to the bitstream.
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -mixing_level @var{number}
|
|
||||||
Mixing Level. Specifies peak sound pressure level (SPL) in the production
|
|
||||||
environment when the mix was mastered. Valid values are 80 to 111, or -1 for
|
|
||||||
unknown or not indicated. The default value is -1, but that value cannot be
|
|
||||||
used if the Audio Production Information is written to the bitstream. Therefore,
|
|
||||||
if the @code{room_type} option is not the default value, the @code{mixing_level}
|
|
||||||
option must not be -1.
|
|
||||||
|
|
||||||
@item -room_type @var{type}
|
|
||||||
Room Type. Describes the equalization used during the final mixing session at
|
|
||||||
the studio or on the dubbing stage. A large room is a dubbing stage with the
|
|
||||||
industry standard X-curve equalization; a small room has flat equalization.
|
|
||||||
This field will not be written to the bitstream if both the @code{mixing_level}
|
|
||||||
option and the @code{room_type} option have the default values.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx notindicated
|
|
||||||
Not Indicated (default)
|
|
||||||
@item 1
|
|
||||||
@itemx large
|
|
||||||
Large Room
|
|
||||||
@item 2
|
|
||||||
@itemx small
|
|
||||||
Small Room
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsubsection Other Metadata Options
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -copyright @var{boolean}
|
|
||||||
Copyright Indicator. Specifies whether a copyright exists for this audio.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx off
|
|
||||||
No Copyright Exists (default)
|
|
||||||
@item 1
|
|
||||||
@itemx on
|
|
||||||
Copyright Exists
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -dialnorm @var{value}
|
|
||||||
Dialogue Normalization. Indicates how far the average dialogue level of the
|
|
||||||
program is below digital 100% full scale (0 dBFS). This parameter determines a
|
|
||||||
level shift during audio reproduction that sets the average volume of the
|
|
||||||
dialogue to a preset level. The goal is to match volume level between program
|
|
||||||
sources. A value of -31dB will result in no volume level change, relative to
|
|
||||||
the source volume, during audio reproduction. Valid values are whole numbers in
|
|
||||||
the range -31 to -1, with -31 being the default.
|
|
||||||
|
|
||||||
@item -dsur_mode @var{mode}
|
|
||||||
Dolby Surround Mode. Specifies whether the stereo signal uses Dolby Surround
|
|
||||||
(Pro Logic). This field will only be written to the bitstream if the audio
|
|
||||||
stream is stereo. Using this option does @b{NOT} mean the encoder will actually
|
|
||||||
apply Dolby Surround processing.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx notindicated
|
|
||||||
Not Indicated (default)
|
|
||||||
@item 1
|
|
||||||
@itemx off
|
|
||||||
Not Dolby Surround Encoded
|
|
||||||
@item 2
|
|
||||||
@itemx on
|
|
||||||
Dolby Surround Encoded
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -original @var{boolean}
|
|
||||||
Original Bit Stream Indicator. Specifies whether this audio is from the
|
|
||||||
original source and not a copy.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx off
|
|
||||||
Not Original Source
|
|
||||||
@item 1
|
|
||||||
@itemx on
|
|
||||||
Original Source (default)
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsection Extended Bitstream Information
|
|
||||||
The extended bitstream options are part of the Alternate Bit Stream Syntax as
|
|
||||||
specified in Annex D of the A/52:2010 standard. It is grouped into 2 parts.
|
|
||||||
If any one parameter in a group is specified, all values in that group will be
|
|
||||||
written to the bitstream. Default values are used for those that are written
|
|
||||||
but have not been specified. If the mixing levels are written, the decoder
|
|
||||||
will use these values instead of the ones specified in the @code{center_mixlev}
|
|
||||||
and @code{surround_mixlev} options if it supports the Alternate Bit Stream
|
|
||||||
Syntax.
|
|
||||||
|
|
||||||
@subsubsection Extended Bitstream Information - Part 1
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -dmix_mode @var{mode}
|
|
||||||
Preferred Stereo Downmix Mode. Allows the user to select either Lt/Rt
|
|
||||||
(Dolby Surround) or Lo/Ro (normal stereo) as the preferred stereo downmix mode.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx notindicated
|
|
||||||
Not Indicated (default)
|
|
||||||
@item 1
|
|
||||||
@itemx ltrt
|
|
||||||
Lt/Rt Downmix Preferred
|
|
||||||
@item 2
|
|
||||||
@itemx loro
|
|
||||||
Lo/Ro Downmix Preferred
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -ltrt_cmixlev @var{level}
|
|
||||||
Lt/Rt Center Mix Level. The amount of gain the decoder should apply to the
|
|
||||||
center channel when downmixing to stereo in Lt/Rt mode.
|
|
||||||
@table @option
|
|
||||||
@item 1.414
|
|
||||||
Apply +3dB gain
|
|
||||||
@item 1.189
|
|
||||||
Apply +1.5dB gain
|
|
||||||
@item 1.000
|
|
||||||
Apply 0dB gain
|
|
||||||
@item 0.841
|
|
||||||
Apply -1.5dB gain
|
|
||||||
@item 0.707
|
|
||||||
Apply -3.0dB gain
|
|
||||||
@item 0.595
|
|
||||||
Apply -4.5dB gain (default)
|
|
||||||
@item 0.500
|
|
||||||
Apply -6.0dB gain
|
|
||||||
@item 0.000
|
|
||||||
Silence Center Channel
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -ltrt_surmixlev @var{level}
|
|
||||||
Lt/Rt Surround Mix Level. The amount of gain the decoder should apply to the
|
|
||||||
surround channel(s) when downmixing to stereo in Lt/Rt mode.
|
|
||||||
@table @option
|
|
||||||
@item 0.841
|
|
||||||
Apply -1.5dB gain
|
|
||||||
@item 0.707
|
|
||||||
Apply -3.0dB gain
|
|
||||||
@item 0.595
|
|
||||||
Apply -4.5dB gain
|
|
||||||
@item 0.500
|
|
||||||
Apply -6.0dB gain (default)
|
|
||||||
@item 0.000
|
|
||||||
Silence Surround Channel(s)
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -loro_cmixlev @var{level}
|
|
||||||
Lo/Ro Center Mix Level. The amount of gain the decoder should apply to the
|
|
||||||
center channel when downmixing to stereo in Lo/Ro mode.
|
|
||||||
@table @option
|
|
||||||
@item 1.414
|
|
||||||
Apply +3dB gain
|
|
||||||
@item 1.189
|
|
||||||
Apply +1.5dB gain
|
|
||||||
@item 1.000
|
|
||||||
Apply 0dB gain
|
|
||||||
@item 0.841
|
|
||||||
Apply -1.5dB gain
|
|
||||||
@item 0.707
|
|
||||||
Apply -3.0dB gain
|
|
||||||
@item 0.595
|
|
||||||
Apply -4.5dB gain (default)
|
|
||||||
@item 0.500
|
|
||||||
Apply -6.0dB gain
|
|
||||||
@item 0.000
|
|
||||||
Silence Center Channel
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -loro_surmixlev @var{level}
|
|
||||||
Lo/Ro Surround Mix Level. The amount of gain the decoder should apply to the
|
|
||||||
surround channel(s) when downmixing to stereo in Lo/Ro mode.
|
|
||||||
@table @option
|
|
||||||
@item 0.841
|
|
||||||
Apply -1.5dB gain
|
|
||||||
@item 0.707
|
|
||||||
Apply -3.0dB gain
|
|
||||||
@item 0.595
|
|
||||||
Apply -4.5dB gain
|
|
||||||
@item 0.500
|
|
||||||
Apply -6.0dB gain (default)
|
|
||||||
@item 0.000
|
|
||||||
Silence Surround Channel(s)
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsubsection Extended Bitstream Information - Part 2
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -dsurex_mode @var{mode}
|
|
||||||
Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX
|
|
||||||
(7.1 matrixed to 5.1). Using this option does @b{NOT} mean the encoder will actually
|
|
||||||
apply Dolby Surround EX processing.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx notindicated
|
|
||||||
Not Indicated (default)
|
|
||||||
@item 1
|
|
||||||
@itemx on
|
|
||||||
Dolby Surround EX On
|
|
||||||
@item 2
|
|
||||||
@itemx off
|
|
||||||
Dolby Surround EX Off
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -dheadphone_mode @var{mode}
|
|
||||||
Dolby Headphone Mode. Indicates whether the stream uses Dolby Headphone
|
|
||||||
encoding (multi-channel matrixed to 2.0 for use with headphones). Using this
|
|
||||||
option does @b{NOT} mean the encoder will actually apply Dolby Headphone
|
|
||||||
processing.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx notindicated
|
|
||||||
Not Indicated (default)
|
|
||||||
@item 1
|
|
||||||
@itemx on
|
|
||||||
Dolby Headphone On
|
|
||||||
@item 2
|
|
||||||
@itemx off
|
|
||||||
Dolby Headphone Off
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -ad_conv_type @var{type}
|
|
||||||
A/D Converter Type. Indicates whether the audio has passed through HDCD A/D
|
|
||||||
conversion.
|
|
||||||
@table @option
|
|
||||||
@item 0
|
|
||||||
@itemx standard
|
|
||||||
Standard A/D Converter (default)
|
|
||||||
@item 1
|
|
||||||
@itemx hdcd
|
|
||||||
HDCD A/D Converter
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsection Other AC-3 Encoding Options
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -stereo_rematrixing @var{boolean}
|
|
||||||
Stereo Rematrixing. Enables/Disables use of rematrixing for stereo input. This
|
|
||||||
is an optional AC-3 feature that increases quality by selectively encoding
|
|
||||||
the left/right channels as mid/side. This option is enabled by default, and it
|
|
||||||
is highly recommended that it be left as enabled except for testing purposes.
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsection Floating-Point-Only AC-3 Encoding Options
|
|
||||||
|
|
||||||
These options are only valid for the floating-point encoder and do not exist
|
|
||||||
for the fixed-point encoder due to the corresponding features not being
|
|
||||||
implemented in fixed-point.
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item -channel_coupling @var{boolean}
|
|
||||||
Enables/Disables use of channel coupling, which is an optional AC-3 feature
|
|
||||||
that increases quality by combining high frequency information from multiple
|
|
||||||
channels into a single channel. The per-channel high frequency information is
|
|
||||||
sent with less accuracy in both the frequency and time domains. This allows
|
|
||||||
more bits to be used for lower frequencies while preserving enough information
|
|
||||||
to reconstruct the high frequencies. This option is enabled by default for the
|
|
||||||
floating-point encoder and should generally be left as enabled except for
|
|
||||||
testing purposes or to increase encoding speed.
|
|
||||||
@table @option
|
|
||||||
@item -1
|
|
||||||
@itemx auto
|
|
||||||
Selected by Encoder (default)
|
|
||||||
@item 0
|
|
||||||
@itemx off
|
|
||||||
Disable Channel Coupling
|
|
||||||
@item 1
|
|
||||||
@itemx on
|
|
||||||
Enable Channel Coupling
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item -cpl_start_band @var{number}
|
|
||||||
Coupling Start Band. Sets the channel coupling start band, from 1 to 15. If a
|
|
||||||
value higher than the bandwidth is used, it will be reduced to 1 less than the
|
|
||||||
coupling end band. If @var{auto} is used, the start band will be determined by
|
|
||||||
the encoder based on the bit rate, sample rate, and channel layout. This option
|
|
||||||
has no effect if channel coupling is disabled.
|
|
||||||
@table @option
|
|
||||||
@item -1
|
|
||||||
@itemx auto
|
|
||||||
Selected by Encoder (default)
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@c man end AUDIO ENCODERS
|
|
||||||
|
|
||||||
@chapter Video Encoders
|
|
||||||
@c man begin VIDEO ENCODERS
|
|
||||||
|
|
||||||
A description of some of the currently available video encoders
|
|
||||||
follows.
|
|
||||||
|
|
||||||
@section libvpx
|
|
||||||
|
|
||||||
VP8 format supported through libvpx.
|
|
||||||
|
|
||||||
Requires the presence of the libvpx headers and library during configuration.
|
|
||||||
You need to explicitly configure the build with @code{--enable-libvpx}.
|
|
||||||
|
|
||||||
@subsection Options
|
|
||||||
|
|
||||||
Mapping from FFmpeg to libvpx options with conversion notes in parentheses.
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item threads
|
|
||||||
g_threads
|
|
||||||
|
|
||||||
@item profile
|
|
||||||
g_profile
|
|
||||||
|
|
||||||
@item vb
|
|
||||||
rc_target_bitrate
|
|
||||||
|
|
||||||
@item g
|
|
||||||
kf_max_dist
|
|
||||||
|
|
||||||
@item keyint_min
|
|
||||||
kf_min_dist
|
|
||||||
|
|
||||||
@item qmin
|
|
||||||
rc_min_quantizer
|
|
||||||
|
|
||||||
@item qmax
|
|
||||||
rc_max_quantizer
|
|
||||||
|
|
||||||
@item bufsize, vb
|
|
||||||
rc_buf_sz
|
|
||||||
@code{(bufsize * 1000 / vb)}
|
|
||||||
|
|
||||||
rc_buf_optimal_sz
|
|
||||||
@code{(bufsize * 1000 / vb * 5 / 6)}
|
|
||||||
|
|
||||||
@item rc_init_occupancy, vb
|
|
||||||
rc_buf_initial_sz
|
|
||||||
@code{(rc_init_occupancy * 1000 / vb)}
|
|
||||||
|
|
||||||
@item rc_buffer_aggressivity
|
|
||||||
rc_undershoot_pct
|
|
||||||
|
|
||||||
@item skip_threshold
|
|
||||||
rc_dropframe_thresh
|
|
||||||
|
|
||||||
@item qcomp
|
|
||||||
rc_2pass_vbr_bias_pct
|
|
||||||
|
|
||||||
@item maxrate, vb
|
|
||||||
rc_2pass_vbr_maxsection_pct
|
|
||||||
@code{(maxrate * 100 / vb)}
|
|
||||||
|
|
||||||
@item minrate, vb
|
|
||||||
rc_2pass_vbr_minsection_pct
|
|
||||||
@code{(minrate * 100 / vb)}
|
|
||||||
|
|
||||||
@item minrate, maxrate, vb
|
|
||||||
@code{VPX_CBR}
|
|
||||||
@code{(minrate == maxrate == vb)}
|
|
||||||
|
|
||||||
@item crf
|
|
||||||
@code{VPX_CQ}, @code{VP8E_SET_CQ_LEVEL}
|
|
||||||
|
|
||||||
@item quality
|
|
||||||
@table @option
|
|
||||||
@item @var{best}
|
|
||||||
@code{VPX_DL_BEST_QUALITY}
|
|
||||||
@item @var{good}
|
|
||||||
@code{VPX_DL_GOOD_QUALITY}
|
|
||||||
@item @var{realtime}
|
|
||||||
@code{VPX_DL_REALTIME}
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item speed
|
|
||||||
@code{VP8E_SET_CPUUSED}
|
|
||||||
|
|
||||||
@item nr
|
|
||||||
@code{VP8E_SET_NOISE_SENSITIVITY}
|
|
||||||
|
|
||||||
@item mb_threshold
|
|
||||||
@code{VP8E_SET_STATIC_THRESHOLD}
|
|
||||||
|
|
||||||
@item slices
|
|
||||||
@code{VP8E_SET_TOKEN_PARTITIONS}
|
|
||||||
|
|
||||||
@item Alternate reference frame related
|
|
||||||
@table @option
|
|
||||||
@item vp8flags altref
|
|
||||||
@code{VP8E_SET_ENABLEAUTOALTREF}
|
|
||||||
@item @var{arnr_max_frames}
|
|
||||||
@code{VP8E_SET_ARNR_MAXFRAMES}
|
|
||||||
@item @var{arnr_type}
|
|
||||||
@code{VP8E_SET_ARNR_TYPE}
|
|
||||||
@item @var{arnr_strength}
|
|
||||||
@code{VP8E_SET_ARNR_STRENGTH}
|
|
||||||
@item @var{rc_lookahead}
|
|
||||||
g_lag_in_frames
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@item vp8flags error_resilient
|
|
||||||
g_error_resilient
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
For more information about libvpx see:
|
|
||||||
@url{http://www.webmproject.org/}
|
|
||||||
|
|
||||||
@section libx264
|
|
||||||
|
|
||||||
H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 format supported through
|
|
||||||
libx264.
|
|
||||||
|
|
||||||
Requires the presence of the libx264 headers and library during
|
|
||||||
configuration. You need to explicitly configure the build with
|
|
||||||
@code{--enable-libx264}.
|
|
||||||
|
|
||||||
@subsection Options
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item preset @var{preset_name}
|
|
||||||
Set the encoding preset.
|
|
||||||
|
|
||||||
@item tune @var{tune_name}
|
|
||||||
Tune the encoding params.
|
|
||||||
Deprecated in favor of @var{x264_opts}
|
|
||||||
|
|
||||||
@item fastfirstpass @var{bool}
|
|
||||||
Use fast settings when encoding first pass, default value is 1.
|
|
||||||
Deprecated in favor of @var{x264_opts}.
|
|
||||||
|
|
||||||
@item profile @var{profile_name}
|
|
||||||
Set profile restrictions.
|
|
||||||
Deprecated in favor of @var{x264_opts}.
|
|
||||||
|
|
||||||
@item level @var{level}
|
|
||||||
Specify level (as defined by Annex A).
|
|
||||||
Deprecated in favor of @var{x264_opts}.
|
|
||||||
|
|
||||||
@item passlogfile @var{filename}
|
|
||||||
Specify filename for 2 pass stats.
|
|
||||||
Deprecated in favor of @var{x264_opts}.
|
|
||||||
|
|
||||||
@item wpredp @var{wpred_type}
|
|
||||||
Specify Weighted prediction for P-frames.
|
|
||||||
Deprecated in favor of @var{x264_opts}.
|
|
||||||
|
|
||||||
@item x264opts @var{options}
|
|
||||||
Allow to set any x264 option, see x264 manual for a list.
|
|
||||||
|
|
||||||
@var{options} is a list of @var{key}=@var{value} couples separated by
|
|
||||||
":".
|
|
||||||
@end table
|
|
||||||
|
|
||||||
For example to specify libx264 encoding options with @file{ffmpeg}:
|
|
||||||
@example
|
|
||||||
ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
|
|
||||||
@end example
|
|
||||||
|
|
||||||
For more information about libx264 and the supported options see:
|
|
||||||
@url{http://www.videolan.org/developers/x264.html}
|
|
||||||
|
|
||||||
@c man end VIDEO ENCODERS
|
|
158
doc/eval.texi
158
doc/eval.texi
@@ -1,158 +0,0 @@
|
|||||||
@chapter Expression Evaluation
|
|
||||||
@c man begin EXPRESSION EVALUATION
|
|
||||||
|
|
||||||
When evaluating an arithemetic expression, FFmpeg uses an internal
|
|
||||||
formula evaluator, implemented through the @file{libavutil/eval.h}
|
|
||||||
interface.
|
|
||||||
|
|
||||||
An expression may contain unary, binary operators, constants, and
|
|
||||||
functions.
|
|
||||||
|
|
||||||
Two expressions @var{expr1} and @var{expr2} can be combined to form
|
|
||||||
another expression "@var{expr1};@var{expr2}".
|
|
||||||
@var{expr1} and @var{expr2} are evaluated in turn, and the new
|
|
||||||
expression evaluates to the value of @var{expr2}.
|
|
||||||
|
|
||||||
The following binary operators are available: @code{+}, @code{-},
|
|
||||||
@code{*}, @code{/}, @code{^}.
|
|
||||||
|
|
||||||
The following unary operators are available: @code{+}, @code{-}.
|
|
||||||
|
|
||||||
The following functions are available:
|
|
||||||
@table @option
|
|
||||||
@item sinh(x)
|
|
||||||
@item cosh(x)
|
|
||||||
@item tanh(x)
|
|
||||||
@item sin(x)
|
|
||||||
@item cos(x)
|
|
||||||
@item tan(x)
|
|
||||||
@item atan(x)
|
|
||||||
@item asin(x)
|
|
||||||
@item acos(x)
|
|
||||||
@item exp(x)
|
|
||||||
@item log(x)
|
|
||||||
@item abs(x)
|
|
||||||
@item squish(x)
|
|
||||||
@item gauss(x)
|
|
||||||
@item isnan(x)
|
|
||||||
Return 1.0 if @var{x} is NAN, 0.0 otherwise.
|
|
||||||
|
|
||||||
@item mod(x, y)
|
|
||||||
@item max(x, y)
|
|
||||||
@item min(x, y)
|
|
||||||
@item eq(x, y)
|
|
||||||
@item gte(x, y)
|
|
||||||
@item gt(x, y)
|
|
||||||
@item lte(x, y)
|
|
||||||
@item lt(x, y)
|
|
||||||
@item st(var, expr)
|
|
||||||
Allow to store the value of the expression @var{expr} in an internal
|
|
||||||
variable. @var{var} specifies the number of the variable where to
|
|
||||||
store the value, and it is a value ranging from 0 to 9. The function
|
|
||||||
returns the value stored in the internal variable.
|
|
||||||
|
|
||||||
@item ld(var)
|
|
||||||
Allow to load the value of the internal variable with number
|
|
||||||
@var{var}, which was previosly stored with st(@var{var}, @var{expr}).
|
|
||||||
The function returns the loaded value.
|
|
||||||
|
|
||||||
@item while(cond, expr)
|
|
||||||
Evaluate expression @var{expr} while the expression @var{cond} is
|
|
||||||
non-zero, and returns the value of the last @var{expr} evaluation, or
|
|
||||||
NAN if @var{cond} was always false.
|
|
||||||
|
|
||||||
@item ceil(expr)
|
|
||||||
Round the value of expression @var{expr} upwards to the nearest
|
|
||||||
integer. For example, "ceil(1.5)" is "2.0".
|
|
||||||
|
|
||||||
@item floor(expr)
|
|
||||||
Round the value of expression @var{expr} downwards to the nearest
|
|
||||||
integer. For example, "floor(-1.5)" is "-2.0".
|
|
||||||
|
|
||||||
@item trunc(expr)
|
|
||||||
Round the value of expression @var{expr} towards zero to the nearest
|
|
||||||
integer. For example, "trunc(-1.5)" is "-1.0".
|
|
||||||
|
|
||||||
@item sqrt(expr)
|
|
||||||
Compute the square root of @var{expr}. This is equivalent to
|
|
||||||
"(@var{expr})^.5".
|
|
||||||
|
|
||||||
@item not(expr)
|
|
||||||
Return 1.0 if @var{expr} is zero, 0.0 otherwise.
|
|
||||||
|
|
||||||
@item pow(x, y)
|
|
||||||
Compute the power of @var{x} elevated @var{y}, it is equivalent to
|
|
||||||
"(@var{x})^(@var{y})".
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Note that:
|
|
||||||
|
|
||||||
@code{*} works like AND
|
|
||||||
|
|
||||||
@code{+} works like OR
|
|
||||||
|
|
||||||
thus
|
|
||||||
@example
|
|
||||||
if A then B else C
|
|
||||||
@end example
|
|
||||||
is equivalent to
|
|
||||||
@example
|
|
||||||
A*B + not(A)*C
|
|
||||||
@end example
|
|
||||||
|
|
||||||
In your C code, you can extend the list of unary and binary functions,
|
|
||||||
and define recognized constants, so that they are available for your
|
|
||||||
expressions.
|
|
||||||
|
|
||||||
The evaluator also recognizes the International System number
|
|
||||||
postfixes. If 'i' is appended after the postfix, powers of 2 are used
|
|
||||||
instead of powers of 10. The 'B' postfix multiplies the value for 8,
|
|
||||||
and can be appended after another postfix or used alone. This allows
|
|
||||||
using for example 'KB', 'MiB', 'G' and 'B' as postfix.
|
|
||||||
|
|
||||||
Follows the list of available International System postfixes, with
|
|
||||||
indication of the corresponding powers of 10 and of 2.
|
|
||||||
@table @option
|
|
||||||
@item y
|
|
||||||
-24 / -80
|
|
||||||
@item z
|
|
||||||
-21 / -70
|
|
||||||
@item a
|
|
||||||
-18 / -60
|
|
||||||
@item f
|
|
||||||
-15 / -50
|
|
||||||
@item p
|
|
||||||
-12 / -40
|
|
||||||
@item n
|
|
||||||
-9 / -30
|
|
||||||
@item u
|
|
||||||
-6 / -20
|
|
||||||
@item m
|
|
||||||
-3 / -10
|
|
||||||
@item c
|
|
||||||
-2
|
|
||||||
@item d
|
|
||||||
-1
|
|
||||||
@item h
|
|
||||||
2
|
|
||||||
@item k
|
|
||||||
3 / 10
|
|
||||||
@item K
|
|
||||||
3 / 10
|
|
||||||
@item M
|
|
||||||
6 / 20
|
|
||||||
@item G
|
|
||||||
9 / 30
|
|
||||||
@item T
|
|
||||||
12 / 40
|
|
||||||
@item P
|
|
||||||
15 / 40
|
|
||||||
@item E
|
|
||||||
18 / 50
|
|
||||||
@item Z
|
|
||||||
21 / 60
|
|
||||||
@item Y
|
|
||||||
24 / 70
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@c man end
|
|
@@ -1,21 +0,0 @@
|
|||||||
# use pkg-config for getting CFLAGS abd LDFLAGS
|
|
||||||
FFMPEG_LIBS=libavdevice libavformat libavfilter libavcodec libswscale libavutil
|
|
||||||
CFLAGS+=$(shell pkg-config --cflags $(FFMPEG_LIBS))
|
|
||||||
LDFLAGS+=$(shell pkg-config --libs $(FFMPEG_LIBS))
|
|
||||||
|
|
||||||
EXAMPLES=encoding filtering metadata muxing
|
|
||||||
|
|
||||||
OBJS=$(addsuffix .o,$(EXAMPLES))
|
|
||||||
|
|
||||||
%: %.o
|
|
||||||
$(CC) $< $(LDFLAGS) -o $@
|
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
$(CC) $< $(CFLAGS) -c -o $@
|
|
||||||
|
|
||||||
.phony: all clean
|
|
||||||
|
|
||||||
all: $(OBJS) $(EXAMPLES)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf $(EXAMPLES) $(OBJS)
|
|
@@ -1,230 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010 Nicolas George
|
|
||||||
* Copyright (c) 2011 Stefano Sabatini
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* API example for decoding and filtering
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _XOPEN_SOURCE 600 /* for usleep */
|
|
||||||
|
|
||||||
#include <libavcodec/avcodec.h>
|
|
||||||
#include <libavformat/avformat.h>
|
|
||||||
#include <libavfilter/avfiltergraph.h>
|
|
||||||
#include <libavfilter/vsink_buffer.h>
|
|
||||||
#include <libavfilter/vsrc_buffer.h>
|
|
||||||
|
|
||||||
const char *filter_descr = "scale=78:24";
|
|
||||||
|
|
||||||
static AVFormatContext *fmt_ctx;
|
|
||||||
static AVCodecContext *dec_ctx;
|
|
||||||
AVFilterContext *buffersink_ctx;
|
|
||||||
AVFilterContext *buffersrc_ctx;
|
|
||||||
AVFilterGraph *filter_graph;
|
|
||||||
static int video_stream_index = -1;
|
|
||||||
static int64_t last_pts = AV_NOPTS_VALUE;
|
|
||||||
|
|
||||||
static int open_input_file(const char *filename)
|
|
||||||
{
|
|
||||||
int ret, i;
|
|
||||||
AVCodec *dec;
|
|
||||||
|
|
||||||
if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ret = av_find_stream_info(fmt_ctx)) < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* select the video stream */
|
|
||||||
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0);
|
|
||||||
if (ret < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
video_stream_index = ret;
|
|
||||||
dec_ctx = fmt_ctx->streams[video_stream_index]->codec;
|
|
||||||
|
|
||||||
/* init the video decoder */
|
|
||||||
if ((ret = avcodec_open(dec_ctx, dec)) < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Cannot open video decoder\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int init_filters(const char *filters_descr)
|
|
||||||
{
|
|
||||||
char args[512];
|
|
||||||
int ret;
|
|
||||||
AVFilter *buffersrc = avfilter_get_by_name("buffer");
|
|
||||||
AVFilter *buffersink = avfilter_get_by_name("buffersink");
|
|
||||||
AVFilterInOut *outputs = avfilter_inout_alloc();
|
|
||||||
AVFilterInOut *inputs = avfilter_inout_alloc();
|
|
||||||
enum PixelFormat pix_fmts[] = { PIX_FMT_GRAY8, PIX_FMT_NONE };
|
|
||||||
filter_graph = avfilter_graph_alloc();
|
|
||||||
|
|
||||||
/* buffer video source: the decoded frames from the decoder will be inserted here. */
|
|
||||||
snprintf(args, sizeof(args), "%d:%d:%d:%d:%d:%d:%d",
|
|
||||||
dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt,
|
|
||||||
dec_ctx->time_base.num, dec_ctx->time_base.den,
|
|
||||||
dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
|
|
||||||
ret = avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "in",
|
|
||||||
args, NULL, filter_graph);
|
|
||||||
if (ret < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* buffer video sink: to terminate the filter chain. */
|
|
||||||
ret = avfilter_graph_create_filter(&buffersink_ctx, buffersink, "out",
|
|
||||||
NULL, pix_fmts, filter_graph);
|
|
||||||
if (ret < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Endpoints for the filter graph. */
|
|
||||||
outputs->name = av_strdup("in");
|
|
||||||
outputs->filter_ctx = buffersrc_ctx;
|
|
||||||
outputs->pad_idx = 0;
|
|
||||||
outputs->next = NULL;
|
|
||||||
|
|
||||||
inputs->name = av_strdup("out");
|
|
||||||
inputs->filter_ctx = buffersink_ctx;
|
|
||||||
inputs->pad_idx = 0;
|
|
||||||
inputs->next = NULL;
|
|
||||||
|
|
||||||
if ((ret = avfilter_graph_parse(filter_graph, filter_descr,
|
|
||||||
&inputs, &outputs, NULL)) < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void display_picref(AVFilterBufferRef *picref, AVRational time_base)
|
|
||||||
{
|
|
||||||
int x, y;
|
|
||||||
uint8_t *p0, *p;
|
|
||||||
int64_t delay;
|
|
||||||
|
|
||||||
if (picref->pts != AV_NOPTS_VALUE) {
|
|
||||||
if (last_pts != AV_NOPTS_VALUE) {
|
|
||||||
/* sleep roughly the right amount of time;
|
|
||||||
* usleep is in microseconds, just like AV_TIME_BASE. */
|
|
||||||
delay = av_rescale_q(picref->pts - last_pts,
|
|
||||||
time_base, AV_TIME_BASE_Q);
|
|
||||||
if (delay > 0 && delay < 1000000)
|
|
||||||
usleep(delay);
|
|
||||||
}
|
|
||||||
last_pts = picref->pts;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Trivial ASCII grayscale display. */
|
|
||||||
p0 = picref->data[0];
|
|
||||||
puts("\033c");
|
|
||||||
for (y = 0; y < picref->video->h; y++) {
|
|
||||||
p = p0;
|
|
||||||
for (x = 0; x < picref->video->w; x++)
|
|
||||||
putchar(" .-+#"[*(p++) / 52]);
|
|
||||||
putchar('\n');
|
|
||||||
p0 += picref->linesize[0];
|
|
||||||
}
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
AVPacket packet;
|
|
||||||
AVFrame frame;
|
|
||||||
int got_frame;
|
|
||||||
|
|
||||||
if (argc != 2) {
|
|
||||||
fprintf(stderr, "Usage: %s file\n", argv[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
avcodec_register_all();
|
|
||||||
av_register_all();
|
|
||||||
avfilter_register_all();
|
|
||||||
|
|
||||||
if ((ret = open_input_file(argv[1]) < 0))
|
|
||||||
goto end;
|
|
||||||
if ((ret = init_filters(filter_descr)) < 0)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* read all packets */
|
|
||||||
while (1) {
|
|
||||||
AVFilterBufferRef *picref;
|
|
||||||
if ((ret = av_read_frame(fmt_ctx, &packet)) < 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (packet.stream_index == video_stream_index) {
|
|
||||||
avcodec_get_frame_defaults(&frame);
|
|
||||||
got_frame = 0;
|
|
||||||
ret = avcodec_decode_video2(dec_ctx, &frame, &got_frame, &packet);
|
|
||||||
av_free_packet(&packet);
|
|
||||||
if (ret < 0) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Error decoding video\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (got_frame) {
|
|
||||||
if (frame.pts == AV_NOPTS_VALUE)
|
|
||||||
frame.pts = frame.pkt_dts == AV_NOPTS_VALUE ?
|
|
||||||
frame.pkt_dts : frame.pkt_pts;
|
|
||||||
/* push the decoded frame into the filtergraph */
|
|
||||||
av_vsrc_buffer_add_frame(buffersrc_ctx, &frame);
|
|
||||||
|
|
||||||
/* pull filtered pictures from the filtergraph */
|
|
||||||
while (avfilter_poll_frame(buffersink_ctx->inputs[0])) {
|
|
||||||
av_vsink_buffer_get_video_buffer_ref(buffersink_ctx, &picref, 0);
|
|
||||||
if (picref) {
|
|
||||||
display_picref(picref, buffersink_ctx->inputs[0]->time_base);
|
|
||||||
avfilter_unref_buffer(picref);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end:
|
|
||||||
avfilter_graph_free(&filter_graph);
|
|
||||||
if (dec_ctx)
|
|
||||||
avcodec_close(dec_ctx);
|
|
||||||
av_close_input_file(fmt_ctx);
|
|
||||||
|
|
||||||
if (ret < 0 && ret != AVERROR_EOF) {
|
|
||||||
char buf[1024];
|
|
||||||
av_strerror(ret, buf, sizeof(buf));
|
|
||||||
fprintf(stderr, "Error occurred: %s\n", buf);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
@@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 Reinhard Tartler
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Shows how the metadata API can be used in application programs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <libavformat/avformat.h>
|
|
||||||
#include <libavutil/dict.h>
|
|
||||||
|
|
||||||
int main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
AVFormatContext *fmt_ctx = NULL;
|
|
||||||
AVDictionaryEntry *tag = NULL;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (argc != 2) {
|
|
||||||
printf("usage: %s <input_file>\n"
|
|
||||||
"example program to demonstrate the use of the libavformat metadata API.\n"
|
|
||||||
"\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
av_register_all();
|
|
||||||
if ((ret = avformat_open_input(&fmt_ctx, argv[1], NULL, NULL)))
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))
|
|
||||||
printf("%s=%s\n", tag->key, tag->value);
|
|
||||||
|
|
||||||
avformat_free_context(fmt_ctx);
|
|
||||||
return 0;
|
|
||||||
}
|
|
85
doc/faq.texi
85
doc/faq.texi
@@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
@settitle FFmpeg FAQ
|
@settitle FFmpeg FAQ
|
||||||
@titlepage
|
@titlepage
|
||||||
|
@sp 7
|
||||||
@center @titlefont{FFmpeg FAQ}
|
@center @titlefont{FFmpeg FAQ}
|
||||||
|
@sp 3
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
@top
|
|
||||||
|
|
||||||
@contents
|
|
||||||
|
|
||||||
@chapter General Questions
|
@chapter General Questions
|
||||||
|
|
||||||
@@ -21,11 +20,10 @@ request more timely and/or frequent releases unless you are willing to
|
|||||||
help out creating them.
|
help out creating them.
|
||||||
|
|
||||||
@section I have a problem with an old version of FFmpeg; where should I report it?
|
@section I have a problem with an old version of FFmpeg; where should I report it?
|
||||||
Nowhere. We do not support old FFmpeg versions in any way, we simply lack
|
Nowhere. Upgrade to the latest release or if there is no recent release upgrade
|
||||||
the time, motivation and manpower to do so. If you have a problem with an
|
to Subversion HEAD. You could also try to report it. Maybe you will get lucky and
|
||||||
old version of FFmpeg, upgrade to the latest git snapshot. If you
|
become the first person in history to get an answer different from "upgrade
|
||||||
still experience the problem, then you can report it according to the
|
to Subversion HEAD".
|
||||||
guidelines in @url{http://ffmpeg.org/bugreports.html}.
|
|
||||||
|
|
||||||
@section Why doesn't FFmpeg support feature [xyz]?
|
@section Why doesn't FFmpeg support feature [xyz]?
|
||||||
|
|
||||||
@@ -46,8 +44,8 @@ Likely reasons
|
|||||||
@itemize
|
@itemize
|
||||||
@item We are busy and haven't had time yet to read your report or
|
@item We are busy and haven't had time yet to read your report or
|
||||||
investigate the issue.
|
investigate the issue.
|
||||||
@item You didn't follow @url{http://ffmpeg.org/bugreports.html}.
|
@item You didn't follow bugreports.html.
|
||||||
@item You didn't use git master.
|
@item You didn't use Subversion HEAD.
|
||||||
@item You reported a segmentation fault without gdb output.
|
@item You reported a segmentation fault without gdb output.
|
||||||
@item You describe a problem but not how to reproduce it.
|
@item You describe a problem but not how to reproduce it.
|
||||||
@item It's unclear if you use ffmpeg as command line tool or use
|
@item It's unclear if you use ffmpeg as command line tool or use
|
||||||
@@ -87,7 +85,7 @@ The following list of video codecs should work on most Windows systems:
|
|||||||
.asf only
|
.asf only
|
||||||
@item mpeg4
|
@item mpeg4
|
||||||
Only if you have some MPEG-4 codec like ffdshow or Xvid installed.
|
Only if you have some MPEG-4 codec like ffdshow or Xvid installed.
|
||||||
@item mpeg1video
|
@item mpeg1
|
||||||
.mpg only
|
.mpg only
|
||||||
@end table
|
@end table
|
||||||
Note, ASF files often have .wmv or .wma extensions in Windows. It should also
|
Note, ASF files often have .wmv or .wma extensions in Windows. It should also
|
||||||
@@ -99,9 +97,9 @@ The following list of audio codecs should work on most Windows systems:
|
|||||||
@table @option
|
@table @option
|
||||||
@item adpcm_ima_wav
|
@item adpcm_ima_wav
|
||||||
@item adpcm_ms
|
@item adpcm_ms
|
||||||
@item pcm_s16le
|
@item pcm
|
||||||
always
|
always
|
||||||
@item libmp3lame
|
@item mp3
|
||||||
If some MP3 codec like LAME is installed.
|
If some MP3 codec like LAME is installed.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@@ -123,8 +121,7 @@ problem and an NP-hard problem...
|
|||||||
|
|
||||||
@section ffmpeg does not work; what is wrong?
|
@section ffmpeg does not work; what is wrong?
|
||||||
|
|
||||||
Try a @code{make distclean} in the ffmpeg source directory before the build.
|
Try a @code{make distclean} in the ffmpeg source directory before the build. If this does not help see
|
||||||
If this does not help see
|
|
||||||
(@url{http://ffmpeg.org/bugreports.html}).
|
(@url{http://ffmpeg.org/bugreports.html}).
|
||||||
|
|
||||||
@section How do I encode single pictures into movies?
|
@section How do I encode single pictures into movies?
|
||||||
@@ -148,7 +145,7 @@ that match @code{*jpg} to the @file{/tmp} directory in the sequence of
|
|||||||
@file{img001.jpg}, @file{img002.jpg} and so on.
|
@file{img001.jpg}, @file{img002.jpg} and so on.
|
||||||
|
|
||||||
@example
|
@example
|
||||||
x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
|
x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
If you want to sequence them by oldest modified first, substitute
|
If you want to sequence them by oldest modified first, substitute
|
||||||
@@ -198,6 +195,19 @@ quite logical that there is a small reduction of quality. This is not a bug.
|
|||||||
|
|
||||||
Use @file{-} as file name.
|
Use @file{-} as file name.
|
||||||
|
|
||||||
|
@section Why does the chrominance data seem to be sampled at a different time from the luminance data on bt8x8 captures on Linux?
|
||||||
|
|
||||||
|
This is a well-known bug in the bt8x8 driver. For 2.4.26 there is a patch at
|
||||||
|
(@url{http://svn.ffmpeg.org/michael/trunk/patches/bttv-420-2.4.26.patch?view=co}). This may also
|
||||||
|
apply cleanly to other 2.4-series kernels.
|
||||||
|
|
||||||
|
@section How do I avoid the ugly aliasing artifacts in bt8x8 captures on Linux?
|
||||||
|
|
||||||
|
Pass 'combfilter=1 lumafilter=1' to the bttv driver. Note though that 'combfilter=1'
|
||||||
|
will cause somewhat too strong filtering. A fix is to apply (@url{http://svn.ffmpeg.org/michael/trunk/patches/bttv-comb-2.4.26.patch?view=co})
|
||||||
|
or (@url{http://svn.ffmpeg.org/michael/trunk/patches/bttv-comb-2.6.6.patch?view=co})
|
||||||
|
and pass 'combfilter=2'.
|
||||||
|
|
||||||
@section -f jpeg doesn't work.
|
@section -f jpeg doesn't work.
|
||||||
|
|
||||||
Try '-f image2 test%d.jpg'.
|
Try '-f image2 test%d.jpg'.
|
||||||
@@ -223,11 +233,11 @@ default.
|
|||||||
@item needed stuff
|
@item needed stuff
|
||||||
-acodec libfaac -vcodec mpeg4 width<=320 height<=240
|
-acodec libfaac -vcodec mpeg4 width<=320 height<=240
|
||||||
@item working stuff
|
@item working stuff
|
||||||
mv4, title
|
4mv, title
|
||||||
@item non-working stuff
|
@item non-working stuff
|
||||||
B-frames
|
B-frames
|
||||||
@item example command line
|
@item example command line
|
||||||
ffmpeg -i input -acodec libfaac -ab 128k -vcodec mpeg4 -b 1200k -mbd 2 -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -s 320x180 -metadata title=X output.mp4
|
ffmpeg -i input -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv -trellis 2 -aic 2 -cmp 2 -subcmp 2 -s 320x180 -metadata title=X output.mp4
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@section How do I encode videos which play on the PSP?
|
@section How do I encode videos which play on the PSP?
|
||||||
@@ -236,11 +246,11 @@ ffmpeg -i input -acodec libfaac -ab 128k -vcodec mpeg4 -b 1200k -mbd 2 -flags +m
|
|||||||
@item needed stuff
|
@item needed stuff
|
||||||
-acodec libfaac -vcodec mpeg4 width*height<=76800 width%16=0 height%16=0 -ar 24000 -r 30000/1001 or 15000/1001 -f psp
|
-acodec libfaac -vcodec mpeg4 width*height<=76800 width%16=0 height%16=0 -ar 24000 -r 30000/1001 or 15000/1001 -f psp
|
||||||
@item working stuff
|
@item working stuff
|
||||||
mv4, title
|
4mv, title
|
||||||
@item non-working stuff
|
@item non-working stuff
|
||||||
B-frames
|
B-frames
|
||||||
@item example command line
|
@item example command line
|
||||||
ffmpeg -i input -acodec libfaac -ab 128k -vcodec mpeg4 -b 1200k -ar 24000 -mbd 2 -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -metadata title=X -f psp output.mp4
|
ffmpeg -i input -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -ar 24000 -mbd 2 -flags +4mv -trellis 2 -aic 2 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -metadata title=X -f psp output.mp4
|
||||||
@item needed stuff for H.264
|
@item needed stuff for H.264
|
||||||
-acodec libfaac -vcodec libx264 width*height<=76800 width%16=0? height%16=0? -ar 48000 -coder 1 -r 30000/1001 or 15000/1001 -f psp
|
-acodec libfaac -vcodec libx264 width*height<=76800 width%16=0? height%16=0? -ar 48000 -coder 1 -r 30000/1001 or 15000/1001 -f psp
|
||||||
@item working stuff for H.264
|
@item working stuff for H.264
|
||||||
@@ -248,16 +258,16 @@ title, loop filter
|
|||||||
@item non-working stuff for H.264
|
@item non-working stuff for H.264
|
||||||
CAVLC
|
CAVLC
|
||||||
@item example command line
|
@item example command line
|
||||||
ffmpeg -i input -acodec libfaac -ab 128k -vcodec libx264 -b 1200k -ar 48000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -metadata title=X -f psp -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 output.mp4
|
ffmpeg -i input -acodec libfaac -ab 128kb -vcodec libx264 -b 1200kb -ar 48000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -metadata title=X -f psp -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 output.mp4
|
||||||
@item higher resolution for newer PSP firmwares, width<=480, height<=272
|
@item higher resolution for newer PSP firmwares, width<=480, height<=272
|
||||||
-vcodec libx264 -level 21 -coder 1 -f psp
|
-vcodec libx264 -level 21 -coder 1 -f psp
|
||||||
@item example command line
|
@item example command line
|
||||||
ffmpeg -i input -acodec libfaac -ab 128k -ac 2 -ar 48000 -vcodec libx264 -level 21 -b 640k -coder 1 -f psp -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -g 250 -s 480x272 output.mp4
|
ffmpeg -i input -acodec libfaac -ab 128kb -ac 2 -ar 48000 -vcodec libx264 -level 21 -b 640kb -coder 1 -f psp -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -g 250 -s 480x272 output.mp4
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@section Which are good parameters for encoding high quality MPEG-4?
|
@section Which are good parameters for encoding high quality MPEG-4?
|
||||||
|
|
||||||
'-mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1/2',
|
'-mbd rd -flags +4mv+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1/2',
|
||||||
things to try: '-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd'.
|
things to try: '-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd'.
|
||||||
|
|
||||||
@section Which are good parameters for encoding high quality MPEG-1/MPEG-2?
|
@section Which are good parameters for encoding high quality MPEG-1/MPEG-2?
|
||||||
@@ -276,18 +286,19 @@ material, and try '-top 0/1' if the result looks really messed-up.
|
|||||||
If you have built FFmpeg with @code{./configure --enable-avisynth}
|
If you have built FFmpeg with @code{./configure --enable-avisynth}
|
||||||
(only possible on MinGW/Cygwin platforms),
|
(only possible on MinGW/Cygwin platforms),
|
||||||
then you may use any file that DirectShow can read as input.
|
then you may use any file that DirectShow can read as input.
|
||||||
|
(Be aware that this feature has been recently added,
|
||||||
|
so you will need to help yourself in case of problems.)
|
||||||
|
|
||||||
Just create an "input.avs" text file with this single line ...
|
Just create an "input.avs" text file with this single line ...
|
||||||
@example
|
@example
|
||||||
DirectShowSource("C:\path to your file\yourfile.asf")
|
DirectShowSource("C:\path to your file\yourfile.asf")
|
||||||
@end example
|
@end example
|
||||||
... and then feed that text file to ffmpeg:
|
... and then feed that text file to FFmpeg:
|
||||||
@example
|
@example
|
||||||
ffmpeg -i input.avs
|
ffmpeg -i input.avs
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
For ANY other help on Avisynth, please visit the
|
For ANY other help on Avisynth, please visit @url{http://www.avisynth.org/}.
|
||||||
@uref{http://www.avisynth.org/, Avisynth homepage}.
|
|
||||||
|
|
||||||
@section How can I join video files?
|
@section How can I join video files?
|
||||||
|
|
||||||
@@ -350,7 +361,7 @@ ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
|
|||||||
rm temp[12].[av] all.[av]
|
rm temp[12].[av] all.[av]
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@section The ffmpeg program does not respect the -maxrate setting, some frames are bigger than maxrate/fps.
|
@section FFmpeg does not adhere to the -maxrate setting, some frames are bigger than maxrate/fps.
|
||||||
|
|
||||||
Read the MPEG spec about video buffer verifier.
|
Read the MPEG spec about video buffer verifier.
|
||||||
|
|
||||||
@@ -419,13 +430,13 @@ No. These tools are too bloated and they complicate the build.
|
|||||||
FFmpeg is already organized in a highly modular manner and does not need to
|
FFmpeg is already organized in a highly modular manner and does not need to
|
||||||
be rewritten in a formal object language. Further, many of the developers
|
be rewritten in a formal object language. Further, many of the developers
|
||||||
favor straight C; it works for them. For more arguments on this matter,
|
favor straight C; it works for them. For more arguments on this matter,
|
||||||
read @uref{http://www.tux.org/lkml/#s15, "Programming Religion"}.
|
read "Programming Religion" at (@url{http://www.tux.org/lkml/#s15}).
|
||||||
|
|
||||||
@section Why are the ffmpeg programs devoid of debugging symbols?
|
@section Why are the ffmpeg programs devoid of debugging symbols?
|
||||||
|
|
||||||
The build process creates ffmpeg_g, ffplay_g, etc. which contain full debug
|
The build process creates ffmpeg_g, ffplay_g, etc. which contain full debug
|
||||||
information. Those binaries are stripped to create ffmpeg, ffplay, etc. If
|
information. Those binaries are stripped to create ffmpeg, ffplay, etc. If
|
||||||
you need the debug information, use the *_g versions.
|
you need the debug information, used the *_g versions.
|
||||||
|
|
||||||
@section I do not like the LGPL, can I contribute code under the GPL instead?
|
@section I do not like the LGPL, can I contribute code under the GPL instead?
|
||||||
|
|
||||||
@@ -449,15 +460,10 @@ encompassing your FFmpeg includes using @code{extern "C"}.
|
|||||||
|
|
||||||
See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3}
|
See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3}
|
||||||
|
|
||||||
@section I'm using libavutil from within my C++ application but the compiler complains about 'UINT64_C' was not declared in this scope
|
|
||||||
|
|
||||||
Libav is a pure C project using C99 math features, in order to enable C++
|
|
||||||
to use them you have to append -D__STDC_CONSTANT_MACROS to your CXXFLAGS
|
|
||||||
|
|
||||||
@section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?
|
@section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?
|
||||||
|
|
||||||
You have to implement a URLProtocol, see @file{libavformat/file.c} in
|
You have to implement a URLProtocol, see libavformat/file.c in FFmpeg
|
||||||
FFmpeg and @file{libmpdemux/demux_lavf.c} in MPlayer sources.
|
and libmpdemux/demux_lavf.c in MPlayer sources.
|
||||||
|
|
||||||
@section I get "No compatible shell script interpreter found." in MSys.
|
@section I get "No compatible shell script interpreter found." in MSys.
|
||||||
|
|
||||||
@@ -467,13 +473,18 @@ The standard MSys bash (2.04) is broken. You need to install 2.05 or later.
|
|||||||
|
|
||||||
The standard MSys install doesn't come with pr. You need to get it from the coreutils package.
|
The standard MSys install doesn't come with pr. You need to get it from the coreutils package.
|
||||||
|
|
||||||
|
@section I tried to pass RTP packets into a decoder, but it doesn't work.
|
||||||
|
|
||||||
|
RTP is a container format like any other, you must first depacketize the
|
||||||
|
codec frames/samples stored in RTP and then feed to the decoder.
|
||||||
|
|
||||||
@section Where can I find libav* headers for Pascal/Delphi?
|
@section Where can I find libav* headers for Pascal/Delphi?
|
||||||
|
|
||||||
see @url{http://www.iversenit.dk/dev/ffmpeg-headers/}
|
see @url{http://www.iversenit.dk/dev/ffmpeg-headers/}
|
||||||
|
|
||||||
@section Where is the documentation about ffv1, msmpeg4, asv1, 4xm?
|
@section Where is the documentation about ffv1, msmpeg4, asv1, 4xm?
|
||||||
|
|
||||||
see @url{http://www.ffmpeg.org/~michael/}
|
see @url{http://svn.ffmpeg.org/michael/trunk/docs/}
|
||||||
|
|
||||||
@section How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?
|
@section How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?
|
||||||
|
|
||||||
|
45
doc/fate.txt
45
doc/fate.txt
@@ -1,45 +0,0 @@
|
|||||||
FATE Automated Testing Environment
|
|
||||||
|
|
||||||
FATE provides a regression testsuite that can be run locally or configured
|
|
||||||
to send reports to fate.ffmpeg.org.
|
|
||||||
In order to run, it needs a large amount of data (samples and references)
|
|
||||||
that is provided separately from the actual source distribution.
|
|
||||||
|
|
||||||
Use the following command to get the fate test samples
|
|
||||||
|
|
||||||
# make fate-rsync SAMPLES=fate-suite/
|
|
||||||
|
|
||||||
To inform the build system about the testsuite location, pass
|
|
||||||
`--samples=<path to the samples>` to configure or set the SAMPLES Make
|
|
||||||
variable or the FATE_SAMPLES environment variable to a suitable value.
|
|
||||||
|
|
||||||
For information on how to set up FATE to send results to the official FFmpeg
|
|
||||||
testing framework, please refer to the following wiki page:
|
|
||||||
http://wiki.multimedia.cx/index.php?title=FATE
|
|
||||||
|
|
||||||
FATE Makefile targets:
|
|
||||||
|
|
||||||
fate-list
|
|
||||||
Will list all fate/regression test targets.
|
|
||||||
|
|
||||||
fate
|
|
||||||
Run the FATE test suite (requires the fate-suite dataset).
|
|
||||||
|
|
||||||
Fate Makefile variables:
|
|
||||||
|
|
||||||
V
|
|
||||||
Verbosity level, can be set to 0, 1 or 2.
|
|
||||||
* 0: show just the test arguments
|
|
||||||
* 1: show just the command used in the test
|
|
||||||
* 2: show everything
|
|
||||||
|
|
||||||
SAMPLES
|
|
||||||
Specify or override the path to the FATE samples at make time, it has a
|
|
||||||
meaning only while running the regression tests.
|
|
||||||
|
|
||||||
THREADS
|
|
||||||
Specify how many threads to use while running regression tests, it is
|
|
||||||
quite useful to detect thread-related regressions.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
make V=1 SAMPLES=/var/fate/samples THREADS=2 fate
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
172
doc/ffmpeg_powerpc_performance_evaluation_howto.txt
Normal file
172
doc/ffmpeg_powerpc_performance_evaluation_howto.txt
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
FFmpeg & evaluating performance on the PowerPC Architecture HOWTO
|
||||||
|
|
||||||
|
(c) 2003-2004 Romain Dolbeau <romain@dolbeau.org>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
I - Introduction
|
||||||
|
|
||||||
|
The PowerPC architecture and its SIMD extension AltiVec offer some
|
||||||
|
interesting tools to evaluate performance and improve the code.
|
||||||
|
This document tries to explain how to use those tools with FFmpeg.
|
||||||
|
|
||||||
|
The architecture itself offers two ways to evaluate the performance of
|
||||||
|
a given piece of code:
|
||||||
|
|
||||||
|
1) The Time Base Registers (TBL)
|
||||||
|
2) The Performance Monitor Counter Registers (PMC)
|
||||||
|
|
||||||
|
The first ones are always available, always active, but they're not very
|
||||||
|
accurate: the registers increment by one every four *bus* cycles. On
|
||||||
|
my 667 Mhz tiBook (ppc7450), this means once every twenty *processor*
|
||||||
|
cycles. So we won't use that.
|
||||||
|
|
||||||
|
The PMC are much more useful: not only can they report cycle-accurate
|
||||||
|
timing, but they can also be used to monitor many other parameters,
|
||||||
|
such as the number of AltiVec stalls for every kind of instruction,
|
||||||
|
or instruction cache misses. The downside is that not all processors
|
||||||
|
support the PMC (all G3, all G4 and the 970 do support them), and
|
||||||
|
they're inactive by default - you need to activate them with a
|
||||||
|
dedicated tool. Also, the number of available PMC depends on the
|
||||||
|
procesor: the various 604 have 2, the various 75x (aka. G3) have 4,
|
||||||
|
and the various 74xx (aka G4) have 6.
|
||||||
|
|
||||||
|
*WARNING*: The PowerPC 970 is not very well documented, and its PMC
|
||||||
|
registers are 64 bits wide. To properly notify the code, you *must*
|
||||||
|
tune for the 970 (using --tune=970), or the code will assume 32 bit
|
||||||
|
registers.
|
||||||
|
|
||||||
|
|
||||||
|
II - Enabling FFmpeg PowerPC performance support
|
||||||
|
|
||||||
|
This needs to be done by hand. First, you need to configure FFmpeg as
|
||||||
|
usual, but add the "--powerpc-perf-enable" option. For instance:
|
||||||
|
|
||||||
|
#####
|
||||||
|
./configure --prefix=/usr/local/ffmpeg-svn --cc=gcc-3.3 --tune=7450 --powerpc-perf-enable
|
||||||
|
#####
|
||||||
|
|
||||||
|
This will configure FFmpeg to install inside /usr/local/ffmpeg-svn,
|
||||||
|
compiling with gcc-3.3 (you should try to use this one or a newer
|
||||||
|
gcc), and tuning for the PowerPC 7450 (i.e. the newer G4; as a rule of
|
||||||
|
thumb, those at 550Mhz and more). It will also enable the PMC.
|
||||||
|
|
||||||
|
You may also edit the file "config.h" to enable the following line:
|
||||||
|
|
||||||
|
#####
|
||||||
|
// #define ALTIVEC_USE_REFERENCE_C_CODE 1
|
||||||
|
#####
|
||||||
|
|
||||||
|
If you enable this line, then the code will not make use of AltiVec,
|
||||||
|
but will use the reference C code instead. This is useful to compare
|
||||||
|
performance between two versions of the code.
|
||||||
|
|
||||||
|
Also, the number of enabled PMC is defined in "libavcodec/ppc/dsputil_ppc.h":
|
||||||
|
|
||||||
|
#####
|
||||||
|
#define POWERPC_NUM_PMC_ENABLED 4
|
||||||
|
#####
|
||||||
|
|
||||||
|
If you have a G4 CPU, you can enable all 6 PMC. DO NOT enable more
|
||||||
|
PMC than available on your CPU!
|
||||||
|
|
||||||
|
Then, simply compile FFmpeg as usual (make && make install).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
III - Using FFmpeg PowerPC performance support
|
||||||
|
|
||||||
|
This FFmeg can be used exactly as usual. But before exiting, FFmpeg
|
||||||
|
will dump a per-function report that looks like this:
|
||||||
|
|
||||||
|
#####
|
||||||
|
PowerPC performance report
|
||||||
|
Values are from the PMC registers, and represent whatever the
|
||||||
|
registers are set to record.
|
||||||
|
Function "gmc1_altivec" (pmc1):
|
||||||
|
min: 231
|
||||||
|
max: 1339867
|
||||||
|
avg: 558.25 (255302)
|
||||||
|
Function "gmc1_altivec" (pmc2):
|
||||||
|
min: 93
|
||||||
|
max: 2164
|
||||||
|
avg: 267.31 (255302)
|
||||||
|
Function "gmc1_altivec" (pmc3):
|
||||||
|
min: 72
|
||||||
|
max: 1987
|
||||||
|
avg: 276.20 (255302)
|
||||||
|
(...)
|
||||||
|
#####
|
||||||
|
|
||||||
|
In this example, PMC1 was set to record CPU cycles, PMC2 was set to
|
||||||
|
record AltiVec Permute Stall Cycles, and PMC3 was set to record AltiVec
|
||||||
|
Issue Stalls.
|
||||||
|
|
||||||
|
The function "gmc1_altivec" was monitored 255302 times, and the
|
||||||
|
minimum execution time was 231 processor cycles. The max and average
|
||||||
|
aren't much use, as it's very likely the OS interrupted execution for
|
||||||
|
reasons of its own :-(
|
||||||
|
|
||||||
|
With the exact same settings and source file, but using the reference C
|
||||||
|
code we get:
|
||||||
|
|
||||||
|
#####
|
||||||
|
PowerPC performance report
|
||||||
|
Values are from the PMC registers, and represent whatever the
|
||||||
|
registers are set to record.
|
||||||
|
Function "gmc1_altivec" (pmc1):
|
||||||
|
min: 592
|
||||||
|
max: 2532235
|
||||||
|
avg: 962.88 (255302)
|
||||||
|
Function "gmc1_altivec" (pmc2):
|
||||||
|
min: 0
|
||||||
|
max: 33
|
||||||
|
avg: 0.00 (255302)
|
||||||
|
Function "gmc1_altivec" (pmc3):
|
||||||
|
min: 0
|
||||||
|
max: 350
|
||||||
|
avg: 0.03 (255302)
|
||||||
|
(...)
|
||||||
|
#####
|
||||||
|
|
||||||
|
592 cycles, so the fastest AltiVec execution is about 2.5x faster than
|
||||||
|
the fastest C execution in this example. It's not perfect but it's not
|
||||||
|
bad (well I wrote this function so I can't say otherwise :-).
|
||||||
|
|
||||||
|
Once you have that kind of report, you can try to improve things by
|
||||||
|
finding what goes wrong and fixing it; in the example above, one
|
||||||
|
should try to diminish the number of AltiVec stalls, as this *may*
|
||||||
|
improve performance.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IV) Enabling the PMC in Mac OS X
|
||||||
|
|
||||||
|
This is easy. Use "Monster" and "monster". Those tools come from
|
||||||
|
Apple's CHUD package, and can be found hidden in the developer web
|
||||||
|
site & FTP site. "MONster" is the graphical application, use it to
|
||||||
|
generate a config file specifying what each register should
|
||||||
|
monitor. Then use the command-line application "monster" to use that
|
||||||
|
config file, and enjoy the results.
|
||||||
|
|
||||||
|
Note that "MONster" can be used for many other things, but it's
|
||||||
|
documented by Apple, it's not my subject.
|
||||||
|
|
||||||
|
If you are using CHUD 4.4.2 or later, you'll notice that MONster is
|
||||||
|
no longer available. It's been superseeded by Shark, where
|
||||||
|
configuration of PMCs is available as a plugin.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
V) Enabling the PMC on Linux
|
||||||
|
|
||||||
|
On linux you may use oprofile from http://oprofile.sf.net, depending on the
|
||||||
|
version and the cpu you may need to apply a patch[1] to access a set of the
|
||||||
|
possibile counters from the userspace application. You can always define them
|
||||||
|
using the kernel interface /dev/oprofile/* .
|
||||||
|
|
||||||
|
[1] http://dev.gentoo.org/~lu_zero/development/oprofile-g4-20060423.patch
|
||||||
|
|
||||||
|
--
|
||||||
|
Romain Dolbeau <romain@dolbeau.org>
|
||||||
|
Luca Barbato <lu_zero@gentoo.org>
|
@@ -1,31 +1,30 @@
|
|||||||
\input texinfo @c -*- texinfo -*-
|
\input texinfo @c -*- texinfo -*-
|
||||||
|
|
||||||
@settitle ffplay Documentation
|
@settitle FFplay Documentation
|
||||||
@titlepage
|
@titlepage
|
||||||
@center @titlefont{ffplay Documentation}
|
@sp 7
|
||||||
|
@center @titlefont{FFplay Documentation}
|
||||||
|
@sp 3
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
@top
|
|
||||||
|
|
||||||
@contents
|
@chapter Introduction
|
||||||
|
|
||||||
@chapter Synopsis
|
|
||||||
|
|
||||||
@example
|
|
||||||
@c man begin SYNOPSIS
|
|
||||||
ffplay [options] [@file{input_file}]
|
|
||||||
@c man end
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@chapter Description
|
|
||||||
@c man begin DESCRIPTION
|
@c man begin DESCRIPTION
|
||||||
|
|
||||||
FFplay is a very simple and portable media player using the FFmpeg
|
FFplay is a very simple and portable media player using the FFmpeg
|
||||||
libraries and the SDL library. It is mostly used as a testbed for the
|
libraries and the SDL library. It is mostly used as a testbed for the
|
||||||
various FFmpeg APIs.
|
various FFmpeg APIs.
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@chapter Options
|
@chapter Invocation
|
||||||
|
|
||||||
|
@section Syntax
|
||||||
|
@example
|
||||||
|
@c man begin SYNOPSIS
|
||||||
|
ffplay [options] @file{input_file}
|
||||||
|
@c man end
|
||||||
|
@end example
|
||||||
|
|
||||||
@c man begin OPTIONS
|
@c man begin OPTIONS
|
||||||
|
|
||||||
@include fftools-common-opts.texi
|
@include fftools-common-opts.texi
|
||||||
@@ -38,9 +37,8 @@ Force displayed width.
|
|||||||
@item -y @var{height}
|
@item -y @var{height}
|
||||||
Force displayed height.
|
Force displayed height.
|
||||||
@item -s @var{size}
|
@item -s @var{size}
|
||||||
Set frame size (WxH or abbreviation), needed for videos which do
|
Set frame size (WxH or abbreviation), needed for videos which don't
|
||||||
not contain a header with the frame size like raw YUV. This option
|
contain a header with the frame size like raw YUV.
|
||||||
has been deprecated in favor of private options, try -video_size.
|
|
||||||
@item -an
|
@item -an
|
||||||
Disable audio.
|
Disable audio.
|
||||||
@item -vn
|
@item -vn
|
||||||
@@ -59,44 +57,21 @@ Force format.
|
|||||||
Set window title (default is the input filename).
|
Set window title (default is the input filename).
|
||||||
@item -loop @var{number}
|
@item -loop @var{number}
|
||||||
Loops movie playback <number> times. 0 means forever.
|
Loops movie playback <number> times. 0 means forever.
|
||||||
@item -showmode @var{mode}
|
|
||||||
Set the show mode to use.
|
|
||||||
Available values for @var{mode} are:
|
|
||||||
@table @samp
|
|
||||||
@item 0, video
|
|
||||||
show video
|
|
||||||
@item 1, waves
|
|
||||||
show audio waves
|
|
||||||
@item 2, rdft
|
|
||||||
show audio frequency band using RDFT ((Inverse) Real Discrete Fourier Transform)
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Default value is "video", if video is not present or cannot be played
|
|
||||||
"rdft" is automatically selected.
|
|
||||||
|
|
||||||
You can interactively cycle through the available show modes by
|
|
||||||
pressing the key @key{w}.
|
|
||||||
|
|
||||||
@item -vf @var{filter_graph}
|
|
||||||
@var{filter_graph} is a description of the filter graph to apply to
|
|
||||||
the input video.
|
|
||||||
Use the option "-filters" to show all the available filters (including
|
|
||||||
also sources and sinks).
|
|
||||||
|
|
||||||
@item -i @var{input_file}
|
|
||||||
Read @var{input_file}.
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@section Advanced options
|
@section Advanced options
|
||||||
@table @option
|
@table @option
|
||||||
@item -pix_fmt @var{format}
|
@item -pix_fmt @var{format}
|
||||||
Set pixel format.
|
Set pixel format.
|
||||||
This option has been deprecated in favor of private options, try -pixel_format.
|
|
||||||
@item -stats
|
@item -stats
|
||||||
Show the stream duration, the codec parameters, the current position in
|
Show the stream duration, the codec parameters, the current position in
|
||||||
the stream and the audio/video synchronisation drift.
|
the stream and the audio/video synchronisation drift.
|
||||||
|
@item -debug
|
||||||
|
Print specific debug info.
|
||||||
@item -bug
|
@item -bug
|
||||||
Work around bugs.
|
Work around bugs.
|
||||||
|
@item -vismv
|
||||||
|
Visualize motion vectors.
|
||||||
@item -fast
|
@item -fast
|
||||||
Non-spec-compliant optimizations.
|
Non-spec-compliant optimizations.
|
||||||
@item -genpts
|
@item -genpts
|
||||||
@@ -128,12 +103,6 @@ Select the desired subtitle stream number, counting from 0. The number
|
|||||||
refers to the list of all the input subtitle streams. If it is greater
|
refers to the list of all the input subtitle streams. If it is greater
|
||||||
than the number of subtitle streams minus one, then the last one is
|
than the number of subtitle streams minus one, then the last one is
|
||||||
selected, if it is negative the subtitle rendering is disabled.
|
selected, if it is negative the subtitle rendering is disabled.
|
||||||
@item -autoexit
|
|
||||||
Exit when video is done playing.
|
|
||||||
@item -exitonkeydown
|
|
||||||
Exit if any key is pressed.
|
|
||||||
@item -exitonmousedown
|
|
||||||
Exit if any mouse button is pressed.
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@section While playing
|
@section While playing
|
||||||
@@ -173,26 +142,17 @@ Seek to percentage in file corresponding to fraction of width.
|
|||||||
|
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@include eval.texi
|
|
||||||
@include decoders.texi
|
|
||||||
@include demuxers.texi
|
|
||||||
@include muxers.texi
|
|
||||||
@include indevs.texi
|
|
||||||
@include outdevs.texi
|
|
||||||
@include protocols.texi
|
|
||||||
@include filters.texi
|
|
||||||
|
|
||||||
@ignore
|
@ignore
|
||||||
|
|
||||||
@setfilename ffplay
|
@setfilename ffplay
|
||||||
@settitle FFplay media player
|
@settitle FFplay media player
|
||||||
|
|
||||||
@c man begin SEEALSO
|
@c man begin SEEALSO
|
||||||
ffmpeg(1), ffprobe(1), ffserver(1) and the FFmpeg HTML documentation
|
ffmpeg(1), ffserver(1) and the HTML documentation of @file{ffmpeg}.
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@c man begin AUTHORS
|
@c man begin AUTHOR
|
||||||
The FFmpeg developers
|
Fabrice Bellard
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@end ignore
|
@end ignore
|
@@ -1,28 +1,17 @@
|
|||||||
\input texinfo @c -*- texinfo -*-
|
\input texinfo @c -*- texinfo -*-
|
||||||
|
|
||||||
@settitle ffprobe Documentation
|
@settitle FFprobe Documentation
|
||||||
@titlepage
|
@titlepage
|
||||||
@center @titlefont{ffprobe Documentation}
|
@sp 7
|
||||||
|
@center @titlefont{FFprobe Documentation}
|
||||||
|
@sp 3
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
@top
|
@chapter Introduction
|
||||||
|
|
||||||
@contents
|
|
||||||
|
|
||||||
@chapter Synopsis
|
|
||||||
|
|
||||||
The generic syntax is:
|
|
||||||
|
|
||||||
@example
|
|
||||||
@c man begin SYNOPSIS
|
|
||||||
ffprobe [options] [@file{input_file}]
|
|
||||||
@c man end
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@chapter Description
|
|
||||||
@c man begin DESCRIPTION
|
@c man begin DESCRIPTION
|
||||||
|
|
||||||
ffprobe gathers information from multimedia streams and prints it in
|
FFprobe gathers information from multimedia streams and prints it in
|
||||||
human- and machine-readable fashion.
|
human- and machine-readable fashion.
|
||||||
|
|
||||||
For example it can be used to check the format of the container used
|
For example it can be used to check the format of the container used
|
||||||
@@ -33,7 +22,7 @@ If a filename is specified in input, ffprobe will try to open and
|
|||||||
probe the file content. If the file cannot be opened or recognized as
|
probe the file content. If the file cannot be opened or recognized as
|
||||||
a multimedia file, a positive exit code is returned.
|
a multimedia file, a positive exit code is returned.
|
||||||
|
|
||||||
ffprobe may be employed both as a standalone application or in
|
FFprobe may be employed both as a standalone application or in
|
||||||
combination with a textual filter, which may perform more
|
combination with a textual filter, which may perform more
|
||||||
sophisticated processing, e.g. statistical processing or plotting.
|
sophisticated processing, e.g. statistical processing or plotting.
|
||||||
|
|
||||||
@@ -41,7 +30,7 @@ Options are used to list some of the formats supported by ffprobe or
|
|||||||
for specifying which information to display, and for setting how
|
for specifying which information to display, and for setting how
|
||||||
ffprobe will show it.
|
ffprobe will show it.
|
||||||
|
|
||||||
ffprobe output is designed to be easily parsable by a textual filter,
|
FFprobe output is designed to be easily parsable by a textual filter,
|
||||||
and consists of one or more sections of the form:
|
and consists of one or more sections of the form:
|
||||||
@example
|
@example
|
||||||
[SECTION]
|
[SECTION]
|
||||||
@@ -52,12 +41,23 @@ keyN=valN
|
|||||||
@end example
|
@end example
|
||||||
|
|
||||||
Metadata tags stored in the container or in the streams are recognized
|
Metadata tags stored in the container or in the streams are recognized
|
||||||
and printed in the corresponding "FORMAT" or "STREAM" section, and
|
and printed in the corresponding ``FORMAT'' or ``STREAM'' section, and
|
||||||
are prefixed by the string "TAG:".
|
are prefixed by the string ``TAG:''.
|
||||||
|
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@chapter Options
|
@chapter Invocation
|
||||||
|
|
||||||
|
@section Syntax
|
||||||
|
|
||||||
|
The generic syntax is:
|
||||||
|
|
||||||
|
@example
|
||||||
|
@c man begin SYNOPSIS
|
||||||
|
ffprobe [options] [@file{input_file}]
|
||||||
|
@c man end
|
||||||
|
@end example
|
||||||
|
|
||||||
@c man begin OPTIONS
|
@c man begin OPTIONS
|
||||||
|
|
||||||
@include fftools-common-opts.texi
|
@include fftools-common-opts.texi
|
||||||
@@ -66,6 +66,9 @@ are prefixed by the string "TAG:".
|
|||||||
|
|
||||||
@table @option
|
@table @option
|
||||||
|
|
||||||
|
@item -convert_tags
|
||||||
|
Convert the tag names in the format container to the generic FFmpeg tag names.
|
||||||
|
|
||||||
@item -f @var{format}
|
@item -f @var{format}
|
||||||
Force format to use.
|
Force format to use.
|
||||||
|
|
||||||
@@ -73,8 +76,8 @@ Force format to use.
|
|||||||
Show the unit of the displayed values.
|
Show the unit of the displayed values.
|
||||||
|
|
||||||
@item -prefix
|
@item -prefix
|
||||||
Use SI prefixes for the displayed values.
|
Show a SI prefixes of the displayed values.
|
||||||
Unless the "-byte_binary_prefix" option is used all the prefixes
|
Unless ``-byte_binary_prefix'' option is used all the prefix
|
||||||
are decimal.
|
are decimal.
|
||||||
|
|
||||||
@item -byte_binary_prefix
|
@item -byte_binary_prefix
|
||||||
@@ -85,51 +88,32 @@ Use sexagesimal format HH:MM:SS.MICROSECONDS for time values.
|
|||||||
|
|
||||||
@item -pretty
|
@item -pretty
|
||||||
Prettify the format of the displayed values, it corresponds to the
|
Prettify the format of the displayed values, it corresponds to the
|
||||||
options "-unit -prefix -byte_binary_prefix -sexagesimal".
|
options ``-unit -prefix -byte_binary_prefix -sexagesimal''.
|
||||||
|
|
||||||
@item -show_format
|
@item -show_format
|
||||||
Show information about the container format of the input multimedia
|
Show information about the container format of the input multimedia
|
||||||
stream.
|
stream.
|
||||||
|
|
||||||
All the container format information is printed within a section with
|
All the container format information is printed within a section with
|
||||||
name "FORMAT".
|
name ``FORMAT''.
|
||||||
|
|
||||||
@item -show_packets
|
|
||||||
Show information about each packet contained in the input multimedia
|
|
||||||
stream.
|
|
||||||
|
|
||||||
The information for each single packet is printed within a dedicated
|
|
||||||
section with name "PACKET".
|
|
||||||
|
|
||||||
@item -show_streams
|
@item -show_streams
|
||||||
Show information about each media stream contained in the input
|
Show information about each media stream contained in the input
|
||||||
multimedia stream.
|
multimedia stream.
|
||||||
|
|
||||||
Each media stream information is printed within a dedicated section
|
Each media stream information is printed within a dedicated section
|
||||||
with name "STREAM".
|
with name ``STREAM''.
|
||||||
|
|
||||||
@item -i @var{input_file}
|
|
||||||
Read @var{input_file}.
|
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@include decoders.texi
|
|
||||||
@include demuxers.texi
|
|
||||||
@include protocols.texi
|
|
||||||
@include indevs.texi
|
|
||||||
|
|
||||||
@ignore
|
@ignore
|
||||||
|
|
||||||
@setfilename ffprobe
|
@setfilename ffprobe
|
||||||
@settitle ffprobe media prober
|
@settitle FFprobe media prober
|
||||||
|
|
||||||
@c man begin SEEALSO
|
@c man begin SEEALSO
|
||||||
ffmpeg(1), ffplay(1), ffserver(1) and the FFmpeg HTML documentation
|
ffmpeg(1), ffplay(1), ffserver(1)
|
||||||
@c man end
|
|
||||||
|
|
||||||
@c man begin AUTHORS
|
|
||||||
The FFmpeg developers
|
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@end ignore
|
@end ignore
|
@@ -1,33 +1,22 @@
|
|||||||
\input texinfo @c -*- texinfo -*-
|
\input texinfo @c -*- texinfo -*-
|
||||||
|
|
||||||
@settitle ffserver Documentation
|
@settitle FFserver Documentation
|
||||||
@titlepage
|
@titlepage
|
||||||
@center @titlefont{ffserver Documentation}
|
@sp 7
|
||||||
|
@center @titlefont{FFserver Documentation}
|
||||||
|
@sp 3
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
@top
|
|
||||||
|
|
||||||
@contents
|
@chapter Introduction
|
||||||
|
|
||||||
@chapter Synopsys
|
|
||||||
|
|
||||||
The generic syntax is:
|
|
||||||
|
|
||||||
@example
|
|
||||||
@c man begin SYNOPSIS
|
|
||||||
ffserver [options]
|
|
||||||
@c man end
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@chapter Description
|
|
||||||
@c man begin DESCRIPTION
|
@c man begin DESCRIPTION
|
||||||
|
FFserver is a streaming server for both audio and video. It supports
|
||||||
ffserver is a streaming server for both audio and video. It supports
|
|
||||||
several live feeds, streaming from files and time shifting on live feeds
|
several live feeds, streaming from files and time shifting on live feeds
|
||||||
(you can seek to positions in the past on each live feed, provided you
|
(you can seek to positions in the past on each live feed, provided you
|
||||||
specify a big enough feed storage in ffserver.conf).
|
specify a big enough feed storage in ffserver.conf).
|
||||||
|
|
||||||
ffserver runs in daemon mode by default; that is, it puts itself in
|
FFserver runs in daemon mode by default; that is, it puts itself in
|
||||||
the background and detaches from its TTY, unless it is launched in
|
the background and detaches from its TTY, unless it is launched in
|
||||||
debug mode or a NoDaemon option is specified in the configuration
|
debug mode or a NoDaemon option is specified in the configuration
|
||||||
file.
|
file.
|
||||||
@@ -39,7 +28,7 @@ information.
|
|||||||
|
|
||||||
@section How does it work?
|
@section How does it work?
|
||||||
|
|
||||||
ffserver receives prerecorded files or FFM streams from some ffmpeg
|
FFserver receives prerecorded files or FFM streams from some ffmpeg
|
||||||
instance as input, then streams them over RTP/RTSP/HTTP.
|
instance as input, then streams them over RTP/RTSP/HTTP.
|
||||||
|
|
||||||
An ffserver instance will listen on some port as specified in the
|
An ffserver instance will listen on some port as specified in the
|
||||||
@@ -57,7 +46,7 @@ file.
|
|||||||
|
|
||||||
@section Status stream
|
@section Status stream
|
||||||
|
|
||||||
ffserver supports an HTTP interface which exposes the current status
|
FFserver supports an HTTP interface which exposes the current status
|
||||||
of the server.
|
of the server.
|
||||||
|
|
||||||
Simply point your browser to the address of the special status stream
|
Simply point your browser to the address of the special status stream
|
||||||
@@ -237,7 +226,15 @@ You use this by adding the ?date= to the end of the URL for the stream.
|
|||||||
For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
|
For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@chapter Options
|
@chapter Invocation
|
||||||
|
@section Syntax
|
||||||
|
@example
|
||||||
|
@c man begin SYNOPSIS
|
||||||
|
ffserver [options]
|
||||||
|
@c man end
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@section Options
|
||||||
@c man begin OPTIONS
|
@c man begin OPTIONS
|
||||||
|
|
||||||
@include fftools-common-opts.texi
|
@include fftools-common-opts.texi
|
||||||
@@ -249,8 +246,8 @@ For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
|
|||||||
Use @file{configfile} instead of @file{/etc/ffserver.conf}.
|
Use @file{configfile} instead of @file{/etc/ffserver.conf}.
|
||||||
@item -n
|
@item -n
|
||||||
Enable no-launch mode. This option disables all the Launch directives
|
Enable no-launch mode. This option disables all the Launch directives
|
||||||
within the various <Stream> sections. Since ffserver will not launch
|
within the various <Stream> sections. FFserver will not launch any
|
||||||
any ffmpeg instances, you will have to launch them manually.
|
ffmpeg instance, so you will have to launch them manually.
|
||||||
@item -d
|
@item -d
|
||||||
Enable debug mode. This option increases log verbosity, directs log
|
Enable debug mode. This option increases log verbosity, directs log
|
||||||
messages to stdout and causes ffserver to run in the foreground
|
messages to stdout and causes ffserver to run in the foreground
|
||||||
@@ -261,16 +258,15 @@ rather than as a daemon.
|
|||||||
@ignore
|
@ignore
|
||||||
|
|
||||||
@setfilename ffserver
|
@setfilename ffserver
|
||||||
@settitle ffserver video server
|
@settitle FFserver video server
|
||||||
|
|
||||||
@c man begin SEEALSO
|
@c man begin SEEALSO
|
||||||
|
ffmpeg(1), ffplay(1), the @file{ffmpeg/doc/ffserver.conf} example and
|
||||||
ffmpeg(1), ffplay(1), ffprobe(1), the @file{ffmpeg/doc/ffserver.conf}
|
the HTML documentation of @file{ffmpeg}.
|
||||||
example and the FFmpeg HTML documentation
|
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@c man begin AUTHORS
|
@c man begin AUTHOR
|
||||||
The FFmpeg developers
|
Fabrice Bellard
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@end ignore
|
@end ignore
|
@@ -306,27 +306,6 @@ StartSendOnKey
|
|||||||
#</Stream>
|
#</Stream>
|
||||||
|
|
||||||
|
|
||||||
# Transcode an incoming live feed to another live feed,
|
|
||||||
# using libx264 and video presets
|
|
||||||
|
|
||||||
#<Stream live.h264>
|
|
||||||
#Format rtp
|
|
||||||
#Feed feed1.ffm
|
|
||||||
#VideoCodec libx264
|
|
||||||
#VideoFrameRate 24
|
|
||||||
#VideoBitRate 100
|
|
||||||
#VideoSize 480x272
|
|
||||||
#AVPresetVideo default
|
|
||||||
#AVPresetVideo baseline
|
|
||||||
#AVOptionVideo flags +global_header
|
|
||||||
#
|
|
||||||
#AudioCodec libfaac
|
|
||||||
#AudioBitRate 32
|
|
||||||
#AudioChannels 2
|
|
||||||
#AudioSampleRate 22050
|
|
||||||
#AVOptionAudio flags +global_header
|
|
||||||
#</Stream>
|
|
||||||
|
|
||||||
##################################################################
|
##################################################################
|
||||||
# SDP/multicast examples
|
# SDP/multicast examples
|
||||||
#
|
#
|
||||||
|
@@ -1,16 +1,3 @@
|
|||||||
All the numerical options, if not specified otherwise, accept in input
|
|
||||||
a string representing a number, which may contain one of the
|
|
||||||
International System number postfixes, for example 'K', 'M', 'G'.
|
|
||||||
If 'i' is appended after the postfix, powers of 2 are used instead of
|
|
||||||
powers of 10. The 'B' postfix multiplies the value for 8, and can be
|
|
||||||
appended after another postfix or used alone. This allows using for
|
|
||||||
example 'KB', 'MiB', 'G' and 'B' as postfix.
|
|
||||||
|
|
||||||
Options which do not take arguments are boolean options, and set the
|
|
||||||
corresponding value to true. They can be set to false by prefixing
|
|
||||||
with "no" the option name, for example using "-nofoo" in the
|
|
||||||
commandline will set to false the boolean option with name "foo".
|
|
||||||
|
|
||||||
@section Generic options
|
@section Generic options
|
||||||
|
|
||||||
These options are shared amongst the ff* tools.
|
These options are shared amongst the ff* tools.
|
||||||
@@ -82,37 +69,4 @@ Set the logging level used by the library.
|
|||||||
@item debug
|
@item debug
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
By default the program logs to stderr, if coloring is supported by the
|
|
||||||
terminal, colors are used to mark errors and warnings. Log coloring
|
|
||||||
can be disabled setting the environment variable
|
|
||||||
@env{FFMPEG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
|
|
||||||
the environment variable @env{FFMPEG_FORCE_COLOR}.
|
|
||||||
The use of the environment variable @env{NO_COLOR} is deprecated and
|
|
||||||
will be dropped in a following FFmpeg version.
|
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@section AVOptions
|
|
||||||
|
|
||||||
These options are provided directly by the libavformat, libavdevice and
|
|
||||||
libavcodec libraries. To see the list of available AVOptions, use the
|
|
||||||
@option{-help} option. They are separated into two categories:
|
|
||||||
@table @option
|
|
||||||
@item generic
|
|
||||||
These options can be set for any container, codec or device. Generic options are
|
|
||||||
listed under AVFormatContext options for containers/devices and under
|
|
||||||
AVCodecContext options for codecs.
|
|
||||||
@item private
|
|
||||||
These options are specific to the given container, device or codec. Private
|
|
||||||
options are listed under their corresponding containers/devices/codecs.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
For example to write an ID3v2.3 header instead of a default ID3v2.4 to
|
|
||||||
an MP3 file, use the @option{id3v2_version} private option of the MP3
|
|
||||||
muxer:
|
|
||||||
@example
|
|
||||||
ffmpeg -i input.flac -id3v2_version 3 out.mp3
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note -nooption syntax cannot be used for boolean AVOptions, use -option
|
|
||||||
0/-option 1.
|
|
||||||
|
2144
doc/filters.texi
2144
doc/filters.texi
File diff suppressed because it is too large
Load Diff
225
doc/general.texi
225
doc/general.texi
@@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
@settitle General Documentation
|
@settitle General Documentation
|
||||||
@titlepage
|
@titlepage
|
||||||
|
@sp 7
|
||||||
@center @titlefont{General Documentation}
|
@center @titlefont{General Documentation}
|
||||||
|
@sp 3
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
@top
|
|
||||||
|
|
||||||
@contents
|
|
||||||
|
|
||||||
@chapter external libraries
|
@chapter external libraries
|
||||||
|
|
||||||
@@ -50,7 +49,6 @@ library:
|
|||||||
@item American Laser Games MM @tab @tab X
|
@item American Laser Games MM @tab @tab X
|
||||||
@tab Multimedia format used in games like Mad Dog McCree.
|
@tab Multimedia format used in games like Mad Dog McCree.
|
||||||
@item 3GPP AMR @tab X @tab X
|
@item 3GPP AMR @tab X @tab X
|
||||||
@item Apple HTTP Live Streaming @tab @tab X
|
|
||||||
@item ASF @tab X @tab X
|
@item ASF @tab X @tab X
|
||||||
@item AVI @tab X @tab X
|
@item AVI @tab X @tab X
|
||||||
@item AVISynth @tab @tab X
|
@item AVISynth @tab @tab X
|
||||||
@@ -62,18 +60,15 @@ library:
|
|||||||
@tab Used in some games from Bethesda Softworks.
|
@tab Used in some games from Bethesda Softworks.
|
||||||
@item Bink @tab @tab X
|
@item Bink @tab @tab X
|
||||||
@tab Multimedia format used by many games.
|
@tab Multimedia format used by many games.
|
||||||
@item Bitmap Brothers JV @tab @tab X
|
|
||||||
@tab Used in Z and Z95 games.
|
|
||||||
@item Brute Force & Ignorance @tab @tab X
|
@item Brute Force & Ignorance @tab @tab X
|
||||||
@tab Used in the game Flash Traffic: City of Angels.
|
@tab Used in the game Flash Traffic: City of Angels.
|
||||||
@item BWF @tab X @tab X
|
|
||||||
@item Interplay C93 @tab @tab X
|
@item Interplay C93 @tab @tab X
|
||||||
@tab Used in the game Cyberia from Interplay.
|
@tab Used in the game Cyberia from Interplay.
|
||||||
@item Delphine Software International CIN @tab @tab X
|
@item Delphine Software International CIN @tab @tab X
|
||||||
@tab Multimedia format used by Delphine Software games.
|
@tab Multimedia format used by Delphine Software games.
|
||||||
@item CD+G @tab @tab X
|
@item CD+G @tab @tab X
|
||||||
@tab Video format used by CD+G karaoke disks
|
@tab Video format used by CD+G karaoke disks
|
||||||
@item Core Audio Format @tab X @tab X
|
@item Core Audio Format @tab @tab X
|
||||||
@tab Apple Core Audio Format
|
@tab Apple Core Audio Format
|
||||||
@item CRC testing format @tab X @tab
|
@item CRC testing format @tab X @tab
|
||||||
@item Creative Voice @tab X @tab X
|
@item Creative Voice @tab X @tab X
|
||||||
@@ -82,8 +77,6 @@ library:
|
|||||||
@tab Audio format used in some games by CRYO Interactive Entertainment.
|
@tab Audio format used in some games by CRYO Interactive Entertainment.
|
||||||
@item D-Cinema audio @tab X @tab X
|
@item D-Cinema audio @tab X @tab X
|
||||||
@item Deluxe Paint Animation @tab @tab X
|
@item Deluxe Paint Animation @tab @tab X
|
||||||
@item DFA @tab @tab X
|
|
||||||
@tab This format is used in Chronomaster game
|
|
||||||
@item DV video @tab X @tab X
|
@item DV video @tab X @tab X
|
||||||
@item DXA @tab @tab X
|
@item DXA @tab @tab X
|
||||||
@tab This format is used in the non-Windows version of the Feeble Files
|
@tab This format is used in the non-Windows version of the Feeble Files
|
||||||
@@ -97,7 +90,7 @@ library:
|
|||||||
@tab Only embedded audio is decoded.
|
@tab Only embedded audio is decoded.
|
||||||
@item FLI/FLC/FLX animation @tab @tab X
|
@item FLI/FLC/FLX animation @tab @tab X
|
||||||
@tab .fli/.flc files
|
@tab .fli/.flc files
|
||||||
@item Flash Video (FLV) @tab X @tab X
|
@item Flash Video (FLV) @tab @tab X
|
||||||
@tab Macromedia Flash video files
|
@tab Macromedia Flash video files
|
||||||
@item framecrc testing format @tab X @tab
|
@item framecrc testing format @tab X @tab
|
||||||
@item FunCom ISS @tab @tab X
|
@item FunCom ISS @tab @tab X
|
||||||
@@ -109,27 +102,20 @@ library:
|
|||||||
@item id Quake II CIN video @tab @tab X
|
@item id Quake II CIN video @tab @tab X
|
||||||
@item id RoQ @tab X @tab X
|
@item id RoQ @tab X @tab X
|
||||||
@tab Used in Quake III, Jedi Knight 2, other computer games.
|
@tab Used in Quake III, Jedi Knight 2, other computer games.
|
||||||
@item IEC61937 encapsulation @tab X @tab X
|
@item IEC61937 encapsulation @tab X @tab
|
||||||
@item IFF @tab @tab X
|
@item IFF @tab @tab X
|
||||||
@tab Interchange File Format
|
@tab Interchange File Format
|
||||||
@item Interplay MVE @tab @tab X
|
@item Interplay MVE @tab @tab X
|
||||||
@tab Format used in various Interplay computer games.
|
@tab Format used in various Interplay computer games.
|
||||||
@item IV8 @tab @tab X
|
@item IV8 @tab @tab X
|
||||||
@tab A format generated by IndigoVision 8000 video server.
|
@tab A format generated by IndigoVision 8000 video server.
|
||||||
@item IVF (On2) @tab X @tab X
|
|
||||||
@tab A format used by libvpx
|
|
||||||
@item LMLM4 @tab @tab X
|
@item LMLM4 @tab @tab X
|
||||||
@tab Used by Linux Media Labs MPEG-4 PCI boards
|
@tab Used by Linux Media Labs MPEG-4 PCI boards
|
||||||
@item LXF @tab @tab X
|
|
||||||
@tab VR native stream format, used by Leitch/Harris' video servers.
|
|
||||||
@item Matroska @tab X @tab X
|
@item Matroska @tab X @tab X
|
||||||
@item Matroska audio @tab X @tab
|
@item Matroska audio @tab X @tab
|
||||||
@item FFmpeg metadata @tab X @tab X
|
|
||||||
@tab Metadata in text format.
|
|
||||||
@item MAXIS XA @tab @tab X
|
@item MAXIS XA @tab @tab X
|
||||||
@tab Used in Sim City 3000; file extension .xa.
|
@tab Used in Sim City 3000; file extension .xa.
|
||||||
@item MD Studio @tab @tab X
|
@item MD Studio @tab @tab X
|
||||||
@item Mobotix .mxg @tab @tab X
|
|
||||||
@item Monkey's Audio @tab @tab X
|
@item Monkey's Audio @tab @tab X
|
||||||
@item Motion Pixels MVI @tab @tab X
|
@item Motion Pixels MVI @tab @tab X
|
||||||
@item MOV/QuickTime/MP4 @tab X @tab X
|
@item MOV/QuickTime/MP4 @tab X @tab X
|
||||||
@@ -163,13 +149,12 @@ library:
|
|||||||
@item NUT @tab X @tab X
|
@item NUT @tab X @tab X
|
||||||
@tab NUT Open Container Format
|
@tab NUT Open Container Format
|
||||||
@item Ogg @tab X @tab X
|
@item Ogg @tab X @tab X
|
||||||
@item Playstation Portable PMP @tab @tab X
|
|
||||||
@item TechnoTrend PVA @tab @tab X
|
@item TechnoTrend PVA @tab @tab X
|
||||||
@tab Used by TechnoTrend DVB PCI boards.
|
@tab Used by TechnoTrend DVB PCI boards.
|
||||||
@item QCP @tab @tab X
|
@item QCP @tab @tab X
|
||||||
@item raw ADTS (AAC) @tab X @tab X
|
@item raw ADTS (AAC) @tab X @tab X
|
||||||
@item raw AC-3 @tab X @tab X
|
@item raw AC-3 @tab X @tab X
|
||||||
@item raw Chinese AVS video @tab X @tab X
|
@item raw Chinese AVS video @tab @tab X
|
||||||
@item raw CRI ADX @tab X @tab X
|
@item raw CRI ADX @tab X @tab X
|
||||||
@item raw Dirac @tab X @tab X
|
@item raw Dirac @tab X @tab X
|
||||||
@item raw DNxHD @tab X @tab X
|
@item raw DNxHD @tab X @tab X
|
||||||
@@ -222,12 +207,10 @@ library:
|
|||||||
@item RL2 @tab @tab X
|
@item RL2 @tab @tab X
|
||||||
@tab Audio and video format used in some games by Entertainment Software Partners.
|
@tab Audio and video format used in some games by Entertainment Software Partners.
|
||||||
@item RPL/ARMovie @tab @tab X
|
@item RPL/ARMovie @tab @tab X
|
||||||
@item Lego Mindstorms RSO @tab X @tab X
|
|
||||||
@item RTMP @tab X @tab X
|
@item RTMP @tab X @tab X
|
||||||
@tab Output is performed by publishing stream to RTMP server
|
@tab Output is performed by publishing stream to RTMP server
|
||||||
@item RTP @tab X @tab X
|
@item RTP @tab @tab X
|
||||||
@item RTSP @tab X @tab X
|
@item RTSP @tab X @tab X
|
||||||
@item SAP @tab X @tab X
|
|
||||||
@item SDP @tab @tab X
|
@item SDP @tab @tab X
|
||||||
@item Sega FILM/CPK @tab @tab X
|
@item Sega FILM/CPK @tab @tab X
|
||||||
@tab Used in many Sega Saturn console games.
|
@tab Used in many Sega Saturn console games.
|
||||||
@@ -243,7 +226,6 @@ library:
|
|||||||
@item Sony Wave64 (W64) @tab @tab X
|
@item Sony Wave64 (W64) @tab @tab X
|
||||||
@item SoX native format @tab X @tab X
|
@item SoX native format @tab X @tab X
|
||||||
@item SUN AU format @tab X @tab X
|
@item SUN AU format @tab X @tab X
|
||||||
@item Text files @tab @tab X
|
|
||||||
@item THP @tab @tab X
|
@item THP @tab @tab X
|
||||||
@tab Used on the Nintendo GameCube.
|
@tab Used on the Nintendo GameCube.
|
||||||
@item Tiertex Limited SEQ @tab @tab X
|
@item Tiertex Limited SEQ @tab @tab X
|
||||||
@@ -253,15 +235,12 @@ library:
|
|||||||
@item WAV @tab X @tab X
|
@item WAV @tab X @tab X
|
||||||
@item WavPack @tab @tab X
|
@item WavPack @tab @tab X
|
||||||
@item WebM @tab X @tab X
|
@item WebM @tab X @tab X
|
||||||
@item Windows Televison (WTV) @tab @tab X
|
|
||||||
@item Wing Commander III movie @tab @tab X
|
@item Wing Commander III movie @tab @tab X
|
||||||
@tab Multimedia format used in Origin's Wing Commander III computer game.
|
@tab Multimedia format used in Origin's Wing Commander III computer game.
|
||||||
@item Westwood Studios audio @tab @tab X
|
@item Westwood Studios audio @tab @tab X
|
||||||
@tab Multimedia format used in Westwood Studios games.
|
@tab Multimedia format used in Westwood Studios games.
|
||||||
@item Westwood Studios VQA @tab @tab X
|
@item Westwood Studios VQA @tab @tab X
|
||||||
@tab Multimedia format used in Westwood Studios games.
|
@tab Multimedia format used in Westwood Studios games.
|
||||||
@item xWMA @tab @tab X
|
|
||||||
@tab Microsoft audio container used by XAudio 2.
|
|
||||||
@item YUV4MPEG pipe @tab X @tab X
|
@item YUV4MPEG pipe @tab X @tab X
|
||||||
@item Psygnosis YOP @tab @tab X
|
@item Psygnosis YOP @tab @tab X
|
||||||
@end multitable
|
@end multitable
|
||||||
@@ -281,11 +260,12 @@ following image formats are supported:
|
|||||||
@tab Only uncompressed GIFs are generated.
|
@tab Only uncompressed GIFs are generated.
|
||||||
@item BMP @tab X @tab X
|
@item BMP @tab X @tab X
|
||||||
@tab Microsoft BMP image
|
@tab Microsoft BMP image
|
||||||
@item DPX @tab X @tab X
|
@item DPX @tab @tab X
|
||||||
@tab Digital Picture Exchange
|
@tab Digital Picture Exchange
|
||||||
@item JPEG @tab X @tab X
|
@item JPEG @tab X @tab X
|
||||||
@tab Progressive JPEG is not supported.
|
@tab Progressive JPEG is not supported.
|
||||||
@item JPEG 2000 @tab X @tab X
|
@item JPEG 2000 @tab @tab E
|
||||||
|
@tab decoding supported through external library libopenjpeg
|
||||||
@item JPEG-LS @tab X @tab X
|
@item JPEG-LS @tab X @tab X
|
||||||
@item LJPEG @tab X @tab
|
@item LJPEG @tab X @tab
|
||||||
@tab Lossless JPEG
|
@tab Lossless JPEG
|
||||||
@@ -299,8 +279,6 @@ following image formats are supported:
|
|||||||
@tab Portable GrayMap image
|
@tab Portable GrayMap image
|
||||||
@item PGMYUV @tab X @tab X
|
@item PGMYUV @tab X @tab X
|
||||||
@tab PGM with U and V components in YUV 4:2:0
|
@tab PGM with U and V components in YUV 4:2:0
|
||||||
@item PIC @tab @tab X
|
|
||||||
@tab Pictor/PC Paint
|
|
||||||
@item PNG @tab X @tab X
|
@item PNG @tab X @tab X
|
||||||
@tab 2/4 bpp not supported yet
|
@tab 2/4 bpp not supported yet
|
||||||
@item PPM @tab X @tab X
|
@item PPM @tab X @tab X
|
||||||
@@ -330,13 +308,10 @@ following image formats are supported:
|
|||||||
@item 8088flex TMV @tab @tab X
|
@item 8088flex TMV @tab @tab X
|
||||||
@item 8SVX exponential @tab @tab X
|
@item 8SVX exponential @tab @tab X
|
||||||
@item 8SVX fibonacci @tab @tab X
|
@item 8SVX fibonacci @tab @tab X
|
||||||
@item A64 multicolor @tab X @tab
|
|
||||||
@tab Creates video suitable to be played on a commodore 64 (multicolor mode).
|
|
||||||
@item American Laser Games MM @tab @tab X
|
@item American Laser Games MM @tab @tab X
|
||||||
@tab Used in games like Mad Dog McCree.
|
@tab Used in games like Mad Dog McCree.
|
||||||
@item AMV Video @tab @tab X
|
@item AMV Video @tab @tab X
|
||||||
@tab Used in Chinese MP3 players.
|
@tab Used in Chinese MP3 players.
|
||||||
@item ANSI/ASCII art @tab @tab X
|
|
||||||
@item Apple MJPEG-B @tab @tab X
|
@item Apple MJPEG-B @tab @tab X
|
||||||
@item Apple QuickDraw @tab @tab X
|
@item Apple QuickDraw @tab @tab X
|
||||||
@tab fourcc: qdrw
|
@tab fourcc: qdrw
|
||||||
@@ -359,7 +334,7 @@ following image formats are supported:
|
|||||||
@item Bethesda VID video @tab @tab X
|
@item Bethesda VID video @tab @tab X
|
||||||
@tab Used in some games from Bethesda Softworks.
|
@tab Used in some games from Bethesda Softworks.
|
||||||
@item Bink Video @tab @tab X
|
@item Bink Video @tab @tab X
|
||||||
@item Bitmap Brothers JV video @tab @tab X
|
@tab Support for version 'b' is missing.
|
||||||
@item Brute Force & Ignorance @tab @tab X
|
@item Brute Force & Ignorance @tab @tab X
|
||||||
@tab Used in the game Flash Traffic: City of Angels.
|
@tab Used in the game Flash Traffic: City of Angels.
|
||||||
@item C93 video @tab @tab X
|
@item C93 video @tab @tab X
|
||||||
@@ -368,16 +343,14 @@ following image formats are supported:
|
|||||||
@tab fourcc: CSCD
|
@tab fourcc: CSCD
|
||||||
@item CD+G @tab @tab X
|
@item CD+G @tab @tab X
|
||||||
@tab Video codec for CD+G karaoke disks
|
@tab Video codec for CD+G karaoke disks
|
||||||
@item Chinese AVS video @tab E @tab X
|
@item Chinese AVS video @tab @tab X
|
||||||
@tab AVS1-P2, JiZhun profile, encoding through external library libxavs
|
@tab AVS1-P2, JiZhun profile
|
||||||
@item Delphine Software International CIN video @tab @tab X
|
@item Delphine Software International CIN video @tab @tab X
|
||||||
@tab Codec used in Delphine Software International games.
|
@tab Codec used in Delphine Software International games.
|
||||||
@item Cinepak @tab @tab X
|
@item Cinepak @tab @tab X
|
||||||
@item Cirrus Logic AccuPak @tab @tab X
|
@item Cirrus Logic AccuPak @tab @tab X
|
||||||
@tab fourcc: CLJR
|
@tab fourcc: CLJR
|
||||||
@item Creative YUV (CYUV) @tab @tab X
|
@item Creative YUV (CYUV) @tab @tab X
|
||||||
@item DFA @tab @tab X
|
|
||||||
@tab Codec used in Chronomaster game.
|
|
||||||
@item Dirac @tab E @tab E
|
@item Dirac @tab E @tab E
|
||||||
@tab supported through external libdirac/libschroedinger libraries
|
@tab supported through external libdirac/libschroedinger libraries
|
||||||
@item Deluxe Paint Animation @tab @tab X
|
@item Deluxe Paint Animation @tab @tab X
|
||||||
@@ -401,7 +374,6 @@ following image formats are supported:
|
|||||||
@tab experimental lossless codec (fourcc: FFV1)
|
@tab experimental lossless codec (fourcc: FFV1)
|
||||||
@item Flash Screen Video v1 @tab X @tab X
|
@item Flash Screen Video v1 @tab X @tab X
|
||||||
@tab fourcc: FSV1
|
@tab fourcc: FSV1
|
||||||
@item Flash Screen Video v2 @tab X @tab X
|
|
||||||
@item Flash Video (FLV) @tab X @tab X
|
@item Flash Video (FLV) @tab X @tab X
|
||||||
@tab Sorenson H.263 used in Flash
|
@tab Sorenson H.263 used in Flash
|
||||||
@item Fraps @tab @tab X
|
@item Fraps @tab @tab X
|
||||||
@@ -435,7 +407,6 @@ following image formats are supported:
|
|||||||
@tab Codec used in Worms games.
|
@tab Codec used in Worms games.
|
||||||
@item Kega Game Video (KGV1) @tab @tab X
|
@item Kega Game Video (KGV1) @tab @tab X
|
||||||
@tab Kega emulator screen capture codec.
|
@tab Kega emulator screen capture codec.
|
||||||
@item Lagarith @tab @tab X
|
|
||||||
@item LCL (LossLess Codec Library) MSZH @tab @tab X
|
@item LCL (LossLess Codec Library) MSZH @tab @tab X
|
||||||
@item LCL (LossLess Codec Library) ZLIB @tab E @tab E
|
@item LCL (LossLess Codec Library) ZLIB @tab E @tab E
|
||||||
@item LOCO @tab @tab X
|
@item LOCO @tab @tab X
|
||||||
@@ -447,7 +418,6 @@ following image formats are supported:
|
|||||||
@item Miro VideoXL @tab @tab X
|
@item Miro VideoXL @tab @tab X
|
||||||
@tab fourcc: VIXL
|
@tab fourcc: VIXL
|
||||||
@item MJPEG (Motion JPEG) @tab X @tab X
|
@item MJPEG (Motion JPEG) @tab X @tab X
|
||||||
@item Mobotix MxPEG video @tab @tab X
|
|
||||||
@item Motion Pixels video @tab @tab X
|
@item Motion Pixels video @tab @tab X
|
||||||
@item MPEG-1 video @tab X @tab X
|
@item MPEG-1 video @tab X @tab X
|
||||||
@item MPEG-1/2 video XvMC (X-Video Motion Compensation) @tab @tab X
|
@item MPEG-1/2 video XvMC (X-Video Motion Compensation) @tab @tab X
|
||||||
@@ -455,7 +425,7 @@ following image formats are supported:
|
|||||||
@item MPEG-2 video @tab X @tab X
|
@item MPEG-2 video @tab X @tab X
|
||||||
@item MPEG-4 part 2 @tab X @tab X
|
@item MPEG-4 part 2 @tab X @tab X
|
||||||
@ libxvidcore can be used alternatively for encoding.
|
@ libxvidcore can be used alternatively for encoding.
|
||||||
@item MPEG-4 part 2 Microsoft variant version 1 @tab @tab X
|
@item MPEG-4 part 2 Microsoft variant version 1 @tab X @tab X
|
||||||
@item MPEG-4 part 2 Microsoft variant version 2 @tab X @tab X
|
@item MPEG-4 part 2 Microsoft variant version 2 @tab X @tab X
|
||||||
@item MPEG-4 part 2 Microsoft variant version 3 @tab X @tab X
|
@item MPEG-4 part 2 Microsoft variant version 3 @tab X @tab X
|
||||||
@item Nintendo Gamecube THP video @tab @tab X
|
@item Nintendo Gamecube THP video @tab @tab X
|
||||||
@@ -467,8 +437,8 @@ following image formats are supported:
|
|||||||
@tab fourcc: VP50
|
@tab fourcc: VP50
|
||||||
@item On2 VP6 @tab @tab X
|
@item On2 VP6 @tab @tab X
|
||||||
@tab fourcc: VP60,VP61,VP62
|
@tab fourcc: VP60,VP61,VP62
|
||||||
@item VP8 @tab E @tab X
|
@item VP8 @tab X @tab X
|
||||||
@tab fourcc: VP80, encoding supported through external library libvpx
|
@tab fourcc: VP80, de/encoding supported through external library libvpx
|
||||||
@item planar RGB @tab @tab X
|
@item planar RGB @tab @tab X
|
||||||
@tab fourcc: 8BPS
|
@tab fourcc: 8BPS
|
||||||
@item Q-team QPEG @tab @tab X
|
@item Q-team QPEG @tab @tab X
|
||||||
@@ -480,7 +450,6 @@ following image formats are supported:
|
|||||||
@tab fourcc: 'smc '
|
@tab fourcc: 'smc '
|
||||||
@item QuickTime video (RPZA) @tab @tab X
|
@item QuickTime video (RPZA) @tab @tab X
|
||||||
@tab fourcc: rpza
|
@tab fourcc: rpza
|
||||||
@item R10K AJA Kona 10-bit RGB Codec @tab @tab X
|
|
||||||
@item R210 Quicktime Uncompressed RGB 10-bit @tab @tab X
|
@item R210 Quicktime Uncompressed RGB 10-bit @tab @tab X
|
||||||
@item Raw Video @tab X @tab X
|
@item Raw Video @tab X @tab X
|
||||||
@item RealVideo 1.0 @tab X @tab X
|
@item RealVideo 1.0 @tab X @tab X
|
||||||
@@ -522,8 +491,6 @@ following image formats are supported:
|
|||||||
@tab not completely working
|
@tab not completely working
|
||||||
@item Wing Commander III / Xan @tab @tab X
|
@item Wing Commander III / Xan @tab @tab X
|
||||||
@tab Used in Wing Commander III .MVE files.
|
@tab Used in Wing Commander III .MVE files.
|
||||||
@item Wing Commander IV / Xan @tab @tab X
|
|
||||||
@tab Used in Wing Commander IV.
|
|
||||||
@item Winnov WNV1 @tab @tab X
|
@item Winnov WNV1 @tab @tab X
|
||||||
@item WMV7 @tab X @tab X
|
@item WMV7 @tab X @tab X
|
||||||
@item YAMAHA SMAF @tab X @tab X
|
@item YAMAHA SMAF @tab X @tab X
|
||||||
@@ -543,8 +510,6 @@ following image formats are supported:
|
|||||||
@multitable @columnfractions .4 .1 .1 .4
|
@multitable @columnfractions .4 .1 .1 .4
|
||||||
@item Name @tab Encoding @tab Decoding @tab Comments
|
@item Name @tab Encoding @tab Decoding @tab Comments
|
||||||
@item 8SVX audio @tab @tab X
|
@item 8SVX audio @tab @tab X
|
||||||
@item AAC+ @tab E @tab X
|
|
||||||
@tab encoding supported through external library libaacplus
|
|
||||||
@item AAC @tab E @tab X
|
@item AAC @tab E @tab X
|
||||||
@tab encoding supported through external library libfaac and libvo-aacenc
|
@tab encoding supported through external library libfaac and libvo-aacenc
|
||||||
@item AC-3 @tab IX @tab X
|
@item AC-3 @tab IX @tab X
|
||||||
@@ -560,7 +525,6 @@ following image formats are supported:
|
|||||||
@item ADPCM Electronic Arts R2 @tab @tab X
|
@item ADPCM Electronic Arts R2 @tab @tab X
|
||||||
@item ADPCM Electronic Arts R3 @tab @tab X
|
@item ADPCM Electronic Arts R3 @tab @tab X
|
||||||
@item ADPCM Electronic Arts XAS @tab @tab X
|
@item ADPCM Electronic Arts XAS @tab @tab X
|
||||||
@item ADPCM G.722 @tab X @tab X
|
|
||||||
@item ADPCM G.726 @tab X @tab X
|
@item ADPCM G.726 @tab X @tab X
|
||||||
@item ADPCM IMA AMV @tab @tab X
|
@item ADPCM IMA AMV @tab @tab X
|
||||||
@tab Used in AMV files
|
@tab Used in AMV files
|
||||||
@@ -594,21 +558,19 @@ following image formats are supported:
|
|||||||
@item ADPCM Yamaha @tab X @tab X
|
@item ADPCM Yamaha @tab X @tab X
|
||||||
@item AMR-NB @tab E @tab X
|
@item AMR-NB @tab E @tab X
|
||||||
@tab encoding supported through external library libopencore-amrnb
|
@tab encoding supported through external library libopencore-amrnb
|
||||||
@item AMR-WB @tab E @tab X
|
@item AMR-WB @tab @tab E
|
||||||
@tab encoding supported through external library libvo-amrwbenc
|
@tab decoding supported through external library libopencore-amrwb
|
||||||
@item Apple lossless audio @tab X @tab X
|
@item Apple lossless audio @tab X @tab X
|
||||||
@tab QuickTime fourcc 'alac'
|
@tab QuickTime fourcc 'alac'
|
||||||
@item Atrac 1 @tab @tab X
|
@item Atrac 1 @tab @tab X
|
||||||
@item Atrac 3 @tab @tab X
|
@item Atrac 3 @tab @tab X
|
||||||
@item Bink Audio @tab @tab X
|
@item Bink Audio @tab @tab X
|
||||||
@tab Used in Bink and Smacker files in many games.
|
@tab Used in Bink and Smacker files in many games.
|
||||||
@item CELT (Opus) @tab @tab E
|
|
||||||
@tab decoding supported through external library libcelt
|
|
||||||
@item Delphine Software International CIN audio @tab @tab X
|
@item Delphine Software International CIN audio @tab @tab X
|
||||||
@tab Codec used in Delphine Software International games.
|
@tab Codec used in Delphine Software International games.
|
||||||
@item COOK @tab @tab X
|
@item COOK @tab @tab X
|
||||||
@tab All versions except 5.1 are supported.
|
@tab All versions except 5.1 are supported.
|
||||||
@item DCA (DTS Coherent Acoustics) @tab X @tab X
|
@item DCA (DTS Coherent Acoustics) @tab @tab X
|
||||||
@item DPCM id RoQ @tab X @tab X
|
@item DPCM id RoQ @tab X @tab X
|
||||||
@tab Used in Quake III, Jedi Knight 2, other computer games.
|
@tab Used in Quake III, Jedi Knight 2, other computer games.
|
||||||
@item DPCM Interplay @tab @tab X
|
@item DPCM Interplay @tab @tab X
|
||||||
@@ -620,12 +582,13 @@ following image formats are supported:
|
|||||||
@tab Used in Origin's Wing Commander IV AVI files.
|
@tab Used in Origin's Wing Commander IV AVI files.
|
||||||
@item DSP Group TrueSpeech @tab @tab X
|
@item DSP Group TrueSpeech @tab @tab X
|
||||||
@item DV audio @tab @tab X
|
@item DV audio @tab @tab X
|
||||||
@item Enhanced AC-3 @tab X @tab X
|
@item Enhanced AC-3 @tab @tab X
|
||||||
@item FLAC (Free Lossless Audio Codec) @tab X @tab IX
|
@item FLAC (Free Lossless Audio Codec) @tab X @tab IX
|
||||||
@item GSM @tab E @tab X
|
@item G.729 @tab @tab X
|
||||||
@tab encoding supported through external library libgsm
|
@item GSM @tab E @tab E
|
||||||
@item GSM Microsoft variant @tab E @tab X
|
@tab supported through external library libgsm
|
||||||
@tab encoding supported through external library libgsm
|
@item GSM Microsoft variant @tab E @tab E
|
||||||
|
@tab supported through external library libgsm
|
||||||
@item IMC (Intel Music Coder) @tab @tab X
|
@item IMC (Intel Music Coder) @tab @tab X
|
||||||
@item MACE (Macintosh Audio Compression/Expansion) 3:1 @tab @tab X
|
@item MACE (Macintosh Audio Compression/Expansion) 3:1 @tab @tab X
|
||||||
@item MACE (Macintosh Audio Compression/Expansion) 6:1 @tab @tab X
|
@item MACE (Macintosh Audio Compression/Expansion) 6:1 @tab @tab X
|
||||||
@@ -668,7 +631,7 @@ following image formats are supported:
|
|||||||
@item QCELP / PureVoice @tab @tab X
|
@item QCELP / PureVoice @tab @tab X
|
||||||
@item QDesign Music Codec 2 @tab @tab X
|
@item QDesign Music Codec 2 @tab @tab X
|
||||||
@tab There are still some distortions.
|
@tab There are still some distortions.
|
||||||
@item RealAudio 1.0 (14.4K) @tab X @tab X
|
@item RealAudio 1.0 (14.4K) @tab @tab X
|
||||||
@tab Real 14400 bit/s codec
|
@tab Real 14400 bit/s codec
|
||||||
@item RealAudio 2.0 (28.8K) @tab @tab X
|
@item RealAudio 2.0 (28.8K) @tab @tab X
|
||||||
@tab Real 28800 bit/s codec
|
@tab Real 28800 bit/s codec
|
||||||
@@ -679,7 +642,6 @@ following image formats are supported:
|
|||||||
@item Sierra VMD audio @tab @tab X
|
@item Sierra VMD audio @tab @tab X
|
||||||
@tab Used in Sierra VMD files.
|
@tab Used in Sierra VMD files.
|
||||||
@item Smacker audio @tab @tab X
|
@item Smacker audio @tab @tab X
|
||||||
@item SMPTE 302M AES3 audio @tab @tab X
|
|
||||||
@item Sonic @tab X @tab X
|
@item Sonic @tab X @tab X
|
||||||
@tab experimental codec
|
@tab experimental codec
|
||||||
@item Sonic lossless @tab X @tab X
|
@item Sonic lossless @tab X @tab X
|
||||||
@@ -711,12 +673,10 @@ performance on systems without hardware floating point support).
|
|||||||
|
|
||||||
@multitable @columnfractions .4 .1 .1 .1 .1
|
@multitable @columnfractions .4 .1 .1 .1 .1
|
||||||
@item Name @tab Muxing @tab Demuxing @tab Encoding @tab Decoding
|
@item Name @tab Muxing @tab Demuxing @tab Encoding @tab Decoding
|
||||||
@item SSA/ASS @tab X @tab X @tab X @tab X
|
@item SSA/ASS @tab X @tab X
|
||||||
@item DVB @tab X @tab X @tab X @tab X
|
@item DVB @tab X @tab X @tab X @tab X
|
||||||
@item DVD @tab X @tab X @tab X @tab X
|
@item DVD @tab X @tab X @tab X @tab X
|
||||||
@item MicroDVD @tab X @tab X @tab @tab
|
|
||||||
@item PGS @tab @tab @tab @tab X
|
@item PGS @tab @tab @tab @tab X
|
||||||
@item SubRip (SRT) @tab X @tab X @tab X @tab X
|
|
||||||
@item XSUB @tab @tab @tab X @tab X
|
@item XSUB @tab @tab @tab X @tab X
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@@ -726,11 +686,9 @@ performance on systems without hardware floating point support).
|
|||||||
|
|
||||||
@multitable @columnfractions .4 .1
|
@multitable @columnfractions .4 .1
|
||||||
@item Name @tab Support
|
@item Name @tab Support
|
||||||
@item Apple HTTP Live Streaming @tab X
|
|
||||||
@item file @tab X
|
@item file @tab X
|
||||||
@item Gopher @tab X
|
@item Gopher @tab X
|
||||||
@item HTTP @tab X
|
@item HTTP @tab X
|
||||||
@item MMS @tab X
|
|
||||||
@item pipe @tab X
|
@item pipe @tab X
|
||||||
@item RTP @tab X
|
@item RTP @tab X
|
||||||
@item TCP @tab X
|
@item TCP @tab X
|
||||||
@@ -745,6 +703,7 @@ performance on systems without hardware floating point support).
|
|||||||
@multitable @columnfractions .4 .1 .1
|
@multitable @columnfractions .4 .1 .1
|
||||||
@item Name @tab Input @tab Output
|
@item Name @tab Input @tab Output
|
||||||
@item ALSA @tab X @tab X
|
@item ALSA @tab X @tab X
|
||||||
|
@item BEOS audio @tab X @tab X
|
||||||
@item BKTR @tab X @tab
|
@item BKTR @tab X @tab
|
||||||
@item DV1394 @tab X @tab
|
@item DV1394 @tab X @tab
|
||||||
@item JACK @tab X @tab
|
@item JACK @tab X @tab
|
||||||
@@ -761,10 +720,20 @@ performance on systems without hardware floating point support).
|
|||||||
|
|
||||||
@chapter Platform Specific information
|
@chapter Platform Specific information
|
||||||
|
|
||||||
|
@section BeOS
|
||||||
|
|
||||||
|
BeOS support is broken in mysterious ways.
|
||||||
|
|
||||||
@section DOS
|
@section DOS
|
||||||
|
|
||||||
Using a cross-compiler is preferred for various reasons.
|
Using a cross-compiler is preferred for various reasons.
|
||||||
|
|
||||||
|
@subsection DJGPP
|
||||||
|
|
||||||
|
FFmpeg cannot be compiled because of broken system headers, add
|
||||||
|
@code{--extra-cflags=-U__STRICT_ANSI__} to the configure options as a
|
||||||
|
workaround.
|
||||||
|
|
||||||
@section OS/2
|
@section OS/2
|
||||||
|
|
||||||
For information about compiling FFmpeg on OS/2 see
|
For information about compiling FFmpeg on OS/2 see
|
||||||
@@ -790,6 +759,14 @@ to configure.
|
|||||||
BSD make will not build FFmpeg, you need to install and use GNU Make
|
BSD make will not build FFmpeg, you need to install and use GNU Make
|
||||||
(@file{gmake}).
|
(@file{gmake}).
|
||||||
|
|
||||||
|
@subsubsection FreeBSD
|
||||||
|
|
||||||
|
FreeBSD will not compile out-of-the-box due to broken system headers.
|
||||||
|
Passing @code{--extra-cflags=-D__BSD_VISIBLE} to configure will work
|
||||||
|
around the problem. This may have unexpected sideeffects, so use it at
|
||||||
|
your own risk. If you care about FreeBSD, please make an attempt at
|
||||||
|
getting the system headers fixed.
|
||||||
|
|
||||||
@subsection (Open)Solaris
|
@subsection (Open)Solaris
|
||||||
|
|
||||||
GNU Make is required to build FFmpeg, so you have to invoke (@file{gmake}),
|
GNU Make is required to build FFmpeg, so you have to invoke (@file{gmake}),
|
||||||
@@ -805,13 +782,6 @@ bash directly to work around this:
|
|||||||
bash ./configure
|
bash ./configure
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@subsection Darwin (MacOS X, iPhone)
|
|
||||||
|
|
||||||
MacOS X on PowerPC or ARM (iPhone) requires a preprocessor from
|
|
||||||
@url{http://github.com/yuvi/gas-preprocessor} to build the optimized
|
|
||||||
assembler functions. Just download the Perl script and put it somewhere
|
|
||||||
in your PATH, FFmpeg's configure will pick it up automatically.
|
|
||||||
|
|
||||||
@section Windows
|
@section Windows
|
||||||
|
|
||||||
To get help and instructions for building FFmpeg under Windows, check out
|
To get help and instructions for building FFmpeg under Windows, check out
|
||||||
@@ -822,8 +792,8 @@ the FFmpeg Windows Help Forum at
|
|||||||
|
|
||||||
FFmpeg can be built to run natively on Windows using the MinGW tools. Install
|
FFmpeg can be built to run natively on Windows using the MinGW tools. Install
|
||||||
the latest versions of MSYS and MinGW from @url{http://www.mingw.org/}.
|
the latest versions of MSYS and MinGW from @url{http://www.mingw.org/}.
|
||||||
You can find detailed installation instructions in the download
|
You can find detailed installation
|
||||||
section and the FAQ.
|
instructions in the download section and the FAQ.
|
||||||
|
|
||||||
FFmpeg does not build out-of-the-box with the packages the automated MinGW
|
FFmpeg does not build out-of-the-box with the packages the automated MinGW
|
||||||
installer provides. It also requires coreutils to be installed and many other
|
installer provides. It also requires coreutils to be installed and many other
|
||||||
@@ -840,6 +810,18 @@ are listed below:
|
|||||||
FFmpeg automatically passes @code{-fno-common} to the compiler to work around
|
FFmpeg automatically passes @code{-fno-common} to the compiler to work around
|
||||||
a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}).
|
a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}).
|
||||||
|
|
||||||
|
Within the MSYS shell, configure and make with:
|
||||||
|
|
||||||
|
@example
|
||||||
|
./configure --enable-memalign-hack
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
@end example
|
||||||
|
|
||||||
|
This will install @file{ffmpeg.exe} along with many other development files
|
||||||
|
to @file{/usr/local}. You may specify another install path using the
|
||||||
|
@code{--prefix} option in @file{configure}.
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
@itemize
|
@itemize
|
||||||
@@ -851,14 +833,13 @@ noticeable when running make for a second time (for example in
|
|||||||
@code{make install}).
|
@code{make install}).
|
||||||
|
|
||||||
@item In order to compile FFplay, you must have the MinGW development library
|
@item In order to compile FFplay, you must have the MinGW development library
|
||||||
of @uref{http://www.libsdl.org/, SDL}.
|
of SDL. Get it from @url{http://www.libsdl.org}.
|
||||||
Edit the @file{bin/sdl-config} script so that it points to the correct prefix
|
Edit the @file{bin/sdl-config} script so that it points to the correct prefix
|
||||||
where SDL was installed. Verify that @file{sdl-config} can be launched from
|
where SDL was installed. Verify that @file{sdl-config} can be launched from
|
||||||
the MSYS command line.
|
the MSYS command line.
|
||||||
|
|
||||||
@item By using @code{./configure --enable-shared} when configuring FFmpeg,
|
@item By using @code{./configure --enable-shared} when configuring FFmpeg,
|
||||||
you can build the FFmpeg libraries (e.g. libavutil, libavcodec,
|
you can build libavutil, libavcodec and libavformat as DLLs.
|
||||||
libavformat) as DLLs.
|
|
||||||
|
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
@@ -965,7 +946,7 @@ MSVC++-compatible import libraries.
|
|||||||
@item Build FFmpeg with
|
@item Build FFmpeg with
|
||||||
|
|
||||||
@example
|
@example
|
||||||
./configure --enable-shared
|
./configure --enable-shared --enable-memalign-hack
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
@end example
|
@end example
|
||||||
@@ -973,68 +954,21 @@ make install
|
|||||||
Your install path (@file{/usr/local/} by default) should now have the
|
Your install path (@file{/usr/local/} by default) should now have the
|
||||||
necessary DLL and LIB files under the @file{bin} directory.
|
necessary DLL and LIB files under the @file{bin} directory.
|
||||||
|
|
||||||
Alternatively, build the libraries with a cross compiler, according to
|
@end enumerate
|
||||||
the instructions below in @ref{Cross compilation for Windows with Linux}.
|
|
||||||
|
|
||||||
To use those files with MSVC++, do the same as you would do with
|
To use those files with MSVC++, do the same as you would do with
|
||||||
the static libraries, as described above. But in Step 4,
|
the static libraries, as described above. But in Step 4,
|
||||||
you should only need to add the directory where the LIB files are installed
|
you should only need to add the directory where the LIB files are installed
|
||||||
(i.e. @file{c:\msys\usr\local\bin}). This is not a typo, the LIB files are
|
(i.e. @file{c:\msys\usr\local\bin}). This is not a typo, the LIB files are
|
||||||
installed in the @file{bin} directory. And instead of adding the static
|
installed in the @file{bin} directory. And instead of adding @file{libxx.a}
|
||||||
libraries (@file{libxxx.a} files) you should add the MSVC import libraries
|
files, you should add @file{avcodec.lib}, @file{avformat.lib}, and
|
||||||
(@file{avcodec.lib}, @file{avformat.lib}, and
|
@file{avutil.lib}. There should be no need for @file{libmingwex.a},
|
||||||
@file{avutil.lib}). Note that you should not use the GCC import
|
|
||||||
libraries (@file{libxxx.dll.a} files), as these will give you undefined
|
|
||||||
reference errors. There should be no need for @file{libmingwex.a},
|
|
||||||
@file{libgcc.a}, and @file{wsock32.lib}, nor any other external library
|
@file{libgcc.a}, and @file{wsock32.lib}, nor any other external library
|
||||||
statically linked into the DLLs.
|
statically linked into the DLLs. The @file{bin} directory contains a bunch
|
||||||
|
of DLL files, but the ones that are actually used to run your application
|
||||||
|
are the ones with a major version number in their filenames
|
||||||
|
(i.e. @file{avcodec-51.dll}).
|
||||||
|
|
||||||
FFmpeg headers do not declare global data for Windows DLLs through the usual
|
|
||||||
dllexport/dllimport interface. Such data will be exported properly while
|
|
||||||
building, but to use them in your MSVC++ code you will have to edit the
|
|
||||||
appropriate headers and mark the data as dllimport. For example, in
|
|
||||||
libavutil/pixdesc.h you should have:
|
|
||||||
@example
|
|
||||||
extern __declspec(dllimport) const AVPixFmtDescriptor av_pix_fmt_descriptors[];
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note that using import libraries created by dlltool requires
|
|
||||||
the linker optimization option to be set to
|
|
||||||
"References: Keep Unreferenced Data (@code{/OPT:NOREF})", otherwise
|
|
||||||
the resulting binaries will fail during runtime. This isn't
|
|
||||||
required when using import libraries generated by lib.exe.
|
|
||||||
This issue is reported upstream at
|
|
||||||
@url{http://sourceware.org/bugzilla/show_bug.cgi?id=12633}.
|
|
||||||
|
|
||||||
To create import libraries that work with the @code{/OPT:REF} option
|
|
||||||
(which is enabled by default in Release mode), follow these steps:
|
|
||||||
|
|
||||||
@enumerate
|
|
||||||
|
|
||||||
@item Open @file{Visual Studio 2005 Command Prompt}.
|
|
||||||
|
|
||||||
Alternatively, in a normal command line prompt, call @file{vcvars32.bat}
|
|
||||||
which sets up the environment variables for the Visual C++ tools
|
|
||||||
(the standard location for this file is
|
|
||||||
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat}).
|
|
||||||
|
|
||||||
@item Enter the @file{bin} directory where the created LIB and DLL files
|
|
||||||
are stored.
|
|
||||||
|
|
||||||
@item Generate new import libraries with @file{lib.exe}:
|
|
||||||
|
|
||||||
@example
|
|
||||||
lib /machine:i386 /def:..\lib\avcodec-53.def /out:avcodec.lib
|
|
||||||
lib /machine:i386 /def:..\lib\avdevice-53.def /out:avdevice.lib
|
|
||||||
lib /machine:i386 /def:..\lib\avfilter-2.def /out:avfilter.lib
|
|
||||||
lib /machine:i386 /def:..\lib\avformat-53.def /out:avformat.lib
|
|
||||||
lib /machine:i386 /def:..\lib\avutil-51.def /out:avutil.lib
|
|
||||||
lib /machine:i386 /def:..\lib\swscale-2.def /out:swscale.lib
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@end enumerate
|
|
||||||
|
|
||||||
@anchor{Cross compilation for Windows with Linux}
|
|
||||||
@subsection Cross compilation for Windows with Linux
|
@subsection Cross compilation for Windows with Linux
|
||||||
|
|
||||||
You must use the MinGW cross compilation tools available at
|
You must use the MinGW cross compilation tools available at
|
||||||
@@ -1047,7 +981,8 @@ Then configure FFmpeg with the following options:
|
|||||||
(you can change the cross-prefix according to the prefix chosen for the
|
(you can change the cross-prefix according to the prefix chosen for the
|
||||||
MinGW tools).
|
MinGW tools).
|
||||||
|
|
||||||
Then you can easily test FFmpeg with @uref{http://www.winehq.com/, Wine}.
|
Then you can easily test FFmpeg with Wine
|
||||||
|
(@url{http://www.winehq.com/}).
|
||||||
|
|
||||||
@subsection Compilation under Cygwin
|
@subsection Compilation under Cygwin
|
||||||
|
|
||||||
@@ -1057,7 +992,7 @@ llrint() in its C library.
|
|||||||
Install your Cygwin with all the "Base" packages, plus the
|
Install your Cygwin with all the "Base" packages, plus the
|
||||||
following "Devel" ones:
|
following "Devel" ones:
|
||||||
@example
|
@example
|
||||||
binutils, gcc4-core, make, git, mingw-runtime, texi2html
|
binutils, gcc4-core, make, subversion, mingw-runtime, texi2html
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
And the following "Utils" one:
|
And the following "Utils" one:
|
||||||
@@ -1068,7 +1003,7 @@ diffutils
|
|||||||
Then run
|
Then run
|
||||||
|
|
||||||
@example
|
@example
|
||||||
./configure
|
./configure --enable-static --disable-shared
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
to make a static build.
|
to make a static build.
|
||||||
@@ -1086,11 +1021,11 @@ If you want to build FFmpeg with additional libraries, download Cygwin
|
|||||||
libogg-devel, libvorbis-devel
|
libogg-devel, libvorbis-devel
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
These library packages are only available from
|
These library packages are only available from Cygwin Ports
|
||||||
@uref{http://sourceware.org/cygwinports/, Cygwin Ports}:
|
(@url{http://sourceware.org/cygwinports/}) :
|
||||||
|
|
||||||
@example
|
@example
|
||||||
yasm, libSDL-devel, libdirac-devel, libfaac-devel, libaacplus-devel, libgsm-devel,
|
yasm, libSDL-devel, libdirac-devel, libfaac-devel, libfaad-devel, libgsm-devel,
|
||||||
libmp3lame-devel, libschroedinger1.0-devel, speex-devel, libtheora-devel,
|
libmp3lame-devel, libschroedinger1.0-devel, speex-devel, libtheora-devel,
|
||||||
libxvidcore-devel
|
libxvidcore-devel
|
||||||
@end example
|
@end example
|
||||||
@@ -1115,12 +1050,12 @@ and add some special flags to your configure invocation.
|
|||||||
|
|
||||||
For a static build run
|
For a static build run
|
||||||
@example
|
@example
|
||||||
./configure --target-os=mingw32 --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
|
./configure --target-os=mingw32 --enable-memalign-hack --enable-static --disable-shared --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
and for a build with shared libraries
|
and for a build with shared libraries
|
||||||
@example
|
@example
|
||||||
./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
|
./configure --target-os=mingw32 --enable-memalign-hack --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@bye
|
@bye
|
||||||
|
@@ -1,259 +0,0 @@
|
|||||||
|
|
||||||
About Git write access:
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Before everything else, you should know how to use GIT properly.
|
|
||||||
Luckily Git comes with excellent documentation.
|
|
||||||
|
|
||||||
git --help
|
|
||||||
man git
|
|
||||||
|
|
||||||
shows you the available subcommands,
|
|
||||||
|
|
||||||
git <command> --help
|
|
||||||
man git-<command>
|
|
||||||
|
|
||||||
shows information about the subcommand <command>.
|
|
||||||
|
|
||||||
The most comprehensive manual is the website Git Reference
|
|
||||||
|
|
||||||
http://gitref.org/
|
|
||||||
|
|
||||||
For more information about the Git project, visit
|
|
||||||
|
|
||||||
http://git-scm.com/
|
|
||||||
|
|
||||||
Consult these resources whenever you have problems, they are quite exhaustive.
|
|
||||||
|
|
||||||
You do not need a special username or password.
|
|
||||||
All you need is to provide a ssh public key to the Git server admin.
|
|
||||||
|
|
||||||
What follows now is a basic introduction to Git and some FFmpeg-specific
|
|
||||||
guidelines. Read it at least once, if you are granted commit privileges to the
|
|
||||||
FFmpeg project you are expected to be familiar with these rules.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
I. BASICS:
|
|
||||||
==========
|
|
||||||
|
|
||||||
0. Get GIT:
|
|
||||||
|
|
||||||
You can get git from http://git-scm.com/
|
|
||||||
|
|
||||||
|
|
||||||
1. Cloning the source tree:
|
|
||||||
|
|
||||||
git clone git://git.videolan.org/ffmpeg <target>
|
|
||||||
|
|
||||||
This will put the FFmpeg sources into the directory <target>.
|
|
||||||
|
|
||||||
git clone git@git.videolan.org:ffmpeg <target>
|
|
||||||
|
|
||||||
This will put the FFmpeg sources into the directory <target> and let
|
|
||||||
you push back your changes to the remote repository.
|
|
||||||
|
|
||||||
|
|
||||||
2. Updating the source tree to the latest revision:
|
|
||||||
|
|
||||||
git pull (--ff-only)
|
|
||||||
|
|
||||||
pulls in the latest changes from the tracked branch. The tracked branch
|
|
||||||
can be remote. By default the master branch tracks the branch master in
|
|
||||||
the remote origin.
|
|
||||||
Caveat: Since merge commits are forbidden at least for the initial
|
|
||||||
months of git --ff-only or --rebase (see below) are recommended.
|
|
||||||
--ff-only will fail and not create merge commits if your branch
|
|
||||||
has diverged (has a different history) from the tracked branch.
|
|
||||||
|
|
||||||
2.a Rebasing your local branches:
|
|
||||||
|
|
||||||
git pull --rebase
|
|
||||||
|
|
||||||
fetches the changes from the main repository and replays your local commits
|
|
||||||
over it. This is required to keep all your local changes at the top of
|
|
||||||
FFmpeg's master tree. The master tree will reject pushes with merge commits.
|
|
||||||
|
|
||||||
|
|
||||||
3. Adding/removing files/directories:
|
|
||||||
|
|
||||||
git add [-A] <filename/dirname>
|
|
||||||
git rm [-r] <filename/dirname>
|
|
||||||
|
|
||||||
GIT needs to get notified of all changes you make to your working
|
|
||||||
directory that makes files appear or disappear.
|
|
||||||
Line moves across files are automatically tracked.
|
|
||||||
|
|
||||||
|
|
||||||
4. Showing modifications:
|
|
||||||
|
|
||||||
git diff <filename(s)>
|
|
||||||
|
|
||||||
will show all local modifications in your working directory as unified diff.
|
|
||||||
|
|
||||||
|
|
||||||
5. Inspecting the changelog:
|
|
||||||
|
|
||||||
git log <filename(s)>
|
|
||||||
|
|
||||||
You may also use the graphical tools like gitview or gitk or the web
|
|
||||||
interface available at http://git.videolan.org
|
|
||||||
|
|
||||||
6. Checking source tree status:
|
|
||||||
|
|
||||||
git status
|
|
||||||
|
|
||||||
detects all the changes you made and lists what actions will be taken in case
|
|
||||||
of a commit (additions, modifications, deletions, etc.).
|
|
||||||
|
|
||||||
|
|
||||||
7. Committing:
|
|
||||||
|
|
||||||
git diff --check
|
|
||||||
|
|
||||||
to double check your changes before committing them to avoid trouble later
|
|
||||||
on. All experienced developers do this on each and every commit, no matter
|
|
||||||
how small.
|
|
||||||
Every one of them has been saved from looking like a fool by this many times.
|
|
||||||
It's very easy for stray debug output or cosmetic modifications to slip in,
|
|
||||||
please avoid problems through this extra level of scrutiny.
|
|
||||||
|
|
||||||
For cosmetics-only commits you should get (almost) empty output from
|
|
||||||
|
|
||||||
git diff -w -b <filename(s)>
|
|
||||||
|
|
||||||
Also check the output of
|
|
||||||
|
|
||||||
git status
|
|
||||||
|
|
||||||
to make sure you don't have untracked files or deletions.
|
|
||||||
|
|
||||||
git add [-i|-p|-A] <filenames/dirnames>
|
|
||||||
|
|
||||||
Make sure you have told git your name and email address, e.g. by running
|
|
||||||
git config --global user.name "My Name"
|
|
||||||
git config --global user.email my@email.invalid
|
|
||||||
(--global to set the global configuration for all your git checkouts).
|
|
||||||
|
|
||||||
Git will select the changes to the files for commit. Optionally you can use
|
|
||||||
the interactive or the patch mode to select hunk by hunk what should be
|
|
||||||
added to the commit.
|
|
||||||
|
|
||||||
git commit
|
|
||||||
|
|
||||||
Git will commit the selected changes to your current local branch.
|
|
||||||
|
|
||||||
You will be prompted for a log message in an editor, which is either
|
|
||||||
set in your personal configuration file through
|
|
||||||
|
|
||||||
git config core.editor
|
|
||||||
|
|
||||||
or set by one of the following environment variables:
|
|
||||||
GIT_EDITOR, VISUAL or EDITOR.
|
|
||||||
|
|
||||||
Log messages should be concise but descriptive. Explain why you made a change,
|
|
||||||
what you did will be obvious from the changes themselves most of the time.
|
|
||||||
Saying just "bug fix" or "10l" is bad. Remember that people of varying skill
|
|
||||||
levels look at and educate themselves while reading through your code. Don't
|
|
||||||
include filenames in log messages, Git provides that information.
|
|
||||||
|
|
||||||
Possibly make the commit message have a terse, descriptive first line, an
|
|
||||||
empty line and then a full description. The first line will be used to name
|
|
||||||
the patch by git format-patch.
|
|
||||||
|
|
||||||
|
|
||||||
8. Renaming/moving/copying files or contents of files:
|
|
||||||
|
|
||||||
Git automatically tracks such changes, making those normal commits.
|
|
||||||
|
|
||||||
mv/cp path/file otherpath/otherfile
|
|
||||||
|
|
||||||
git add [-A] .
|
|
||||||
|
|
||||||
git commit
|
|
||||||
|
|
||||||
Do not move, rename or copy files of which you are not the maintainer without
|
|
||||||
discussing it on the mailing list first!
|
|
||||||
|
|
||||||
9. Reverting broken commits
|
|
||||||
|
|
||||||
git revert <commit>
|
|
||||||
|
|
||||||
git revert will generate a revert commit. This will not make the faulty
|
|
||||||
commit disappear from the history.
|
|
||||||
|
|
||||||
git reset <commit>
|
|
||||||
|
|
||||||
git reset will uncommit the changes till <commit> rewriting the current
|
|
||||||
branch history.
|
|
||||||
|
|
||||||
git commit --amend
|
|
||||||
|
|
||||||
allows to amend the last commit details quickly.
|
|
||||||
|
|
||||||
git rebase -i origin/master
|
|
||||||
|
|
||||||
will replay local commits over the main repository allowing to edit,
|
|
||||||
merge or remove some of them in the process.
|
|
||||||
|
|
||||||
Note that the reset, commit --amend and rebase rewrite history, so you
|
|
||||||
should use them ONLY on your local or topic branches.
|
|
||||||
|
|
||||||
The main repository will reject those changes.
|
|
||||||
|
|
||||||
10. Preparing a patchset.
|
|
||||||
|
|
||||||
git format-patch <commit> [-o directory]
|
|
||||||
|
|
||||||
will generate a set of patches out of the current branch starting from
|
|
||||||
commit. By default the patches are created in the current directory.
|
|
||||||
|
|
||||||
11. Sending patches for review
|
|
||||||
|
|
||||||
git send-email <commit list|directory>
|
|
||||||
|
|
||||||
will send the patches created by git format-patch or directly generates
|
|
||||||
them. All the email fields can be configured in the global/local
|
|
||||||
configuration or overridden by command line.
|
|
||||||
|
|
||||||
12. Pushing changes to remote trees
|
|
||||||
|
|
||||||
git push
|
|
||||||
|
|
||||||
Will push the changes to the default remote (origin).
|
|
||||||
Git will prevent you from pushing changes if the local and remote trees are
|
|
||||||
out of sync. Refer to 2 and 2.a to sync the local tree.
|
|
||||||
|
|
||||||
git remote add <name> <url>
|
|
||||||
|
|
||||||
Will add additional remote with a name reference, it is useful if you want
|
|
||||||
to push your local branch for review on a remote host.
|
|
||||||
|
|
||||||
git push <remote> <refspec>
|
|
||||||
|
|
||||||
Will push the changes to the remote repository. Omitting refspec makes git
|
|
||||||
push update all the remote branches matching the local ones.
|
|
||||||
|
|
||||||
13. Finding a specific svn revision
|
|
||||||
|
|
||||||
Since version 1.7.1 git supports ':/foo' syntax for specifying commits
|
|
||||||
based on a regular expression. see man gitrevisions
|
|
||||||
|
|
||||||
git show :/'as revision 23456'
|
|
||||||
|
|
||||||
will show the svn changeset r23456. With older git versions searching in
|
|
||||||
the git log output is the easiest option (especially if a pager with
|
|
||||||
search capabilities is used).
|
|
||||||
This commit can be checked out with
|
|
||||||
|
|
||||||
git checkout -b svn_23456 :/'as revision 23456'
|
|
||||||
|
|
||||||
or for git < 1.7.1 with
|
|
||||||
|
|
||||||
git checkout -b svn_23456 $SHA1
|
|
||||||
|
|
||||||
where $SHA1 is the commit SHA1 from the 'git log' output.
|
|
||||||
|
|
||||||
|
|
||||||
Contact the project admins <root at ffmpeg dot org> if you have technical
|
|
||||||
problems with the GIT server.
|
|
382
doc/indevs.texi
382
doc/indevs.texi
@@ -1,382 +0,0 @@
|
|||||||
@chapter Input Devices
|
|
||||||
@c man begin INPUT DEVICES
|
|
||||||
|
|
||||||
Input devices are configured elements in FFmpeg which allow to access
|
|
||||||
the data coming from a multimedia device attached to your system.
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported input devices
|
|
||||||
are enabled by default. You can list all available ones using the
|
|
||||||
configure option "--list-indevs".
|
|
||||||
|
|
||||||
You can disable all the input devices using the configure option
|
|
||||||
"--disable-indevs", and selectively enable an input device using the
|
|
||||||
option "--enable-indev=@var{INDEV}", or you can disable a particular
|
|
||||||
input device using the option "--disable-indev=@var{INDEV}".
|
|
||||||
|
|
||||||
The option "-formats" of the ff* tools will display the list of
|
|
||||||
supported input devices (amongst the demuxers).
|
|
||||||
|
|
||||||
A description of the currently available input devices follows.
|
|
||||||
|
|
||||||
@section alsa
|
|
||||||
|
|
||||||
ALSA (Advanced Linux Sound Architecture) input device.
|
|
||||||
|
|
||||||
To enable this input device during configuration you need libasound
|
|
||||||
installed on your system.
|
|
||||||
|
|
||||||
This device allows capturing from an ALSA device. The name of the
|
|
||||||
device to capture has to be an ALSA card identifier.
|
|
||||||
|
|
||||||
An ALSA identifier has the syntax:
|
|
||||||
@example
|
|
||||||
hw:@var{CARD}[,@var{DEV}[,@var{SUBDEV}]]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
where the @var{DEV} and @var{SUBDEV} components are optional.
|
|
||||||
|
|
||||||
The three arguments (in order: @var{CARD},@var{DEV},@var{SUBDEV})
|
|
||||||
specify card number or identifier, device number and subdevice number
|
|
||||||
(-1 means any).
|
|
||||||
|
|
||||||
To see the list of cards currently recognized by your system check the
|
|
||||||
files @file{/proc/asound/cards} and @file{/proc/asound/devices}.
|
|
||||||
|
|
||||||
For example to capture with @file{ffmpeg} from an ALSA device with
|
|
||||||
card id 0, you may run the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -f alsa -i hw:0 alsaout.wav
|
|
||||||
@end example
|
|
||||||
|
|
||||||
For more information see:
|
|
||||||
@url{http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html}
|
|
||||||
|
|
||||||
@section bktr
|
|
||||||
|
|
||||||
BSD video input device.
|
|
||||||
|
|
||||||
@section dv1394
|
|
||||||
|
|
||||||
Linux DV 1394 input device.
|
|
||||||
|
|
||||||
@section fbdev
|
|
||||||
|
|
||||||
Linux framebuffer input device.
|
|
||||||
|
|
||||||
The Linux framebuffer is a graphic hardware-independent abstraction
|
|
||||||
layer to show graphics on a computer monitor, typically on the
|
|
||||||
console. It is accessed through a file device node, usually
|
|
||||||
@file{/dev/fb0}.
|
|
||||||
|
|
||||||
For more detailed information read the file
|
|
||||||
Documentation/fb/framebuffer.txt included in the Linux source tree.
|
|
||||||
|
|
||||||
To record from the framebuffer device @file{/dev/fb0} with
|
|
||||||
@file{ffmpeg}:
|
|
||||||
@example
|
|
||||||
ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
|
|
||||||
@end example
|
|
||||||
|
|
||||||
You can take a single screenshot image with the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -f fbdev -vframes 1 -r 1 -i /dev/fb0 screenshot.jpeg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
See also @url{http://linux-fbdev.sourceforge.net/}, and fbset(1).
|
|
||||||
|
|
||||||
@section jack
|
|
||||||
|
|
||||||
JACK input device.
|
|
||||||
|
|
||||||
To enable this input device during configuration you need libjack
|
|
||||||
installed on your system.
|
|
||||||
|
|
||||||
A JACK input device creates one or more JACK writable clients, one for
|
|
||||||
each audio channel, with name @var{client_name}:input_@var{N}, where
|
|
||||||
@var{client_name} is the name provided by the application, and @var{N}
|
|
||||||
is a number which identifies the channel.
|
|
||||||
Each writable client will send the acquired data to the FFmpeg input
|
|
||||||
device.
|
|
||||||
|
|
||||||
Once you have created one or more JACK readable clients, you need to
|
|
||||||
connect them to one or more JACK writable clients.
|
|
||||||
|
|
||||||
To connect or disconnect JACK clients you can use the
|
|
||||||
@file{jack_connect} and @file{jack_disconnect} programs, or do it
|
|
||||||
through a graphical interface, for example with @file{qjackctl}.
|
|
||||||
|
|
||||||
To list the JACK clients and their properties you can invoke the command
|
|
||||||
@file{jack_lsp}.
|
|
||||||
|
|
||||||
Follows an example which shows how to capture a JACK readable client
|
|
||||||
with @file{ffmpeg}.
|
|
||||||
@example
|
|
||||||
# Create a JACK writable client with name "ffmpeg".
|
|
||||||
$ ffmpeg -f jack -i ffmpeg -y out.wav
|
|
||||||
|
|
||||||
# Start the sample jack_metro readable client.
|
|
||||||
$ jack_metro -b 120 -d 0.2 -f 4000
|
|
||||||
|
|
||||||
# List the current JACK clients.
|
|
||||||
$ jack_lsp -c
|
|
||||||
system:capture_1
|
|
||||||
system:capture_2
|
|
||||||
system:playback_1
|
|
||||||
system:playback_2
|
|
||||||
ffmpeg:input_1
|
|
||||||
metro:120_bpm
|
|
||||||
|
|
||||||
# Connect metro to the ffmpeg writable client.
|
|
||||||
$ jack_connect metro:120_bpm ffmpeg:input_1
|
|
||||||
@end example
|
|
||||||
|
|
||||||
For more information read:
|
|
||||||
@url{http://jackaudio.org/}
|
|
||||||
|
|
||||||
@section libdc1394
|
|
||||||
|
|
||||||
IIDC1394 input device, based on libdc1394 and libraw1394.
|
|
||||||
|
|
||||||
@section openal
|
|
||||||
|
|
||||||
The OpenAL input device provides audio capture on all systems with a
|
|
||||||
working OpenAL 1.1 implementation.
|
|
||||||
|
|
||||||
To enable this input device during configuration, you need OpenAL
|
|
||||||
headers and libraries installed on your system, and need to configure
|
|
||||||
FFmpeg with @code{--enable-openal}.
|
|
||||||
|
|
||||||
OpenAL headers and libraries should be provided as part of your OpenAL
|
|
||||||
implementation, or as an additional download (an SDK). Depending on your
|
|
||||||
installation you may need to specify additional flags via the
|
|
||||||
@code{--extra-cflags} and @code{--extra-ldflags} for allowing the build
|
|
||||||
system to locate the OpenAL headers and libraries.
|
|
||||||
|
|
||||||
An incomplete list of OpenAL implementations follows:
|
|
||||||
|
|
||||||
@table @strong
|
|
||||||
@item Creative
|
|
||||||
The official Windows implementation, providing hardware acceleration
|
|
||||||
with supported devices and software fallback.
|
|
||||||
See @url{http://openal.org/}.
|
|
||||||
@item OpenAL Soft
|
|
||||||
Portable, open source (LGPL) software implementation. Includes
|
|
||||||
backends for the most common sound APIs on the Windows, Linux,
|
|
||||||
Solaris, and BSD operating systems.
|
|
||||||
See @url{http://kcat.strangesoft.net/openal.html}.
|
|
||||||
@item Apple
|
|
||||||
OpenAL is part of Core Audio, the official Mac OS X Audio interface.
|
|
||||||
See @url{http://developer.apple.com/technologies/mac/audio-and-video.html}
|
|
||||||
@end table
|
|
||||||
|
|
||||||
This device allows to capture from an audio input device handled
|
|
||||||
through OpenAL.
|
|
||||||
|
|
||||||
You need to specify the name of the device to capture in the provided
|
|
||||||
filename. If the empty string is provided, the device will
|
|
||||||
automatically select the default device. You can get the list of the
|
|
||||||
supported devices by using the option @var{list_devices}.
|
|
||||||
|
|
||||||
@subsection Options
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item channels
|
|
||||||
Set the number of channels in the captured audio. Only the values
|
|
||||||
@option{1} (monaural) and @option{2} (stereo) are currently supported.
|
|
||||||
Defaults to @option{2}.
|
|
||||||
|
|
||||||
@item sample_size
|
|
||||||
Set the sample size (in bits) of the captured audio. Only the values
|
|
||||||
@option{8} and @option{16} are currently supported. Defaults to
|
|
||||||
@option{16}.
|
|
||||||
|
|
||||||
@item sample_rate
|
|
||||||
Set the sample rate (in Hz) of the captured audio.
|
|
||||||
Defaults to @option{44.1k}.
|
|
||||||
|
|
||||||
@item list_devices
|
|
||||||
If set to @option{true}, print a list of devices and exit.
|
|
||||||
Defaults to @option{false}.
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsection Examples
|
|
||||||
|
|
||||||
Print the list of OpenAL supported devices and exit:
|
|
||||||
@example
|
|
||||||
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Capture from the OpenAL device @file{DR-BT101 via PulseAudio}:
|
|
||||||
@example
|
|
||||||
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Capture from the default device (note the empty string '' as filename):
|
|
||||||
@example
|
|
||||||
$ ffmpeg -f openal -i '' out.ogg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Capture from two devices simultaneously, writing to two different files,
|
|
||||||
within the same @file{ffmpeg} command:
|
|
||||||
@example
|
|
||||||
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
|
|
||||||
@end example
|
|
||||||
Note: not all OpenAL implementations support multiple simultaneous capture -
|
|
||||||
try the latest OpenAL Soft if the above does not work.
|
|
||||||
|
|
||||||
@section oss
|
|
||||||
|
|
||||||
Open Sound System input device.
|
|
||||||
|
|
||||||
The filename to provide to the input device is the device node
|
|
||||||
representing the OSS input device, and is usually set to
|
|
||||||
@file{/dev/dsp}.
|
|
||||||
|
|
||||||
For example to grab from @file{/dev/dsp} using @file{ffmpeg} use the
|
|
||||||
command:
|
|
||||||
@example
|
|
||||||
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
|
|
||||||
@end example
|
|
||||||
|
|
||||||
For more information about OSS see:
|
|
||||||
@url{http://manuals.opensound.com/usersguide/dsp.html}
|
|
||||||
|
|
||||||
@section sndio
|
|
||||||
|
|
||||||
sndio input device.
|
|
||||||
|
|
||||||
To enable this input device during configuration you need libsndio
|
|
||||||
installed on your system.
|
|
||||||
|
|
||||||
The filename to provide to the input device is the device node
|
|
||||||
representing the sndio input device, and is usually set to
|
|
||||||
@file{/dev/audio0}.
|
|
||||||
|
|
||||||
For example to grab from @file{/dev/audio0} using @file{ffmpeg} use the
|
|
||||||
command:
|
|
||||||
@example
|
|
||||||
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section video4linux and video4linux2
|
|
||||||
|
|
||||||
Video4Linux and Video4Linux2 input video devices.
|
|
||||||
|
|
||||||
The name of the device to grab is a file device node, usually Linux
|
|
||||||
systems tend to automatically create such nodes when the device
|
|
||||||
(e.g. an USB webcam) is plugged into the system, and has a name of the
|
|
||||||
kind @file{/dev/video@var{N}}, where @var{N} is a number associated to
|
|
||||||
the device.
|
|
||||||
|
|
||||||
Video4Linux and Video4Linux2 devices only support a limited set of
|
|
||||||
@var{width}x@var{height} sizes and framerates. You can check which are
|
|
||||||
supported for example with the command @file{dov4l} for Video4Linux
|
|
||||||
devices and the command @file{v4l-info} for Video4Linux2 devices.
|
|
||||||
|
|
||||||
If the size for the device is set to 0x0, the input device will
|
|
||||||
try to autodetect the size to use.
|
|
||||||
Only for the video4linux2 device, if the frame rate is set to 0/0 the
|
|
||||||
input device will use the frame rate value already set in the driver.
|
|
||||||
|
|
||||||
Video4Linux support is deprecated since Linux 2.6.30, and will be
|
|
||||||
dropped in later versions.
|
|
||||||
|
|
||||||
Follow some usage examples of the video4linux devices with the ff*
|
|
||||||
tools.
|
|
||||||
@example
|
|
||||||
# Grab and show the input of a video4linux device, frame rate is set
|
|
||||||
# to the default of 25/1.
|
|
||||||
ffplay -s 320x240 -f video4linux /dev/video0
|
|
||||||
|
|
||||||
# Grab and show the input of a video4linux2 device, autoadjust size.
|
|
||||||
ffplay -f video4linux2 /dev/video0
|
|
||||||
|
|
||||||
# Grab and record the input of a video4linux2 device, autoadjust size,
|
|
||||||
# frame rate value defaults to 0/0 so it is read from the video4linux2
|
|
||||||
# driver.
|
|
||||||
ffmpeg -f video4linux2 -i /dev/video0 out.mpeg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section vfwcap
|
|
||||||
|
|
||||||
VfW (Video for Windows) capture input device.
|
|
||||||
|
|
||||||
The filename passed as input is the capture driver number, ranging from
|
|
||||||
0 to 9. You may use "list" as filename to print a list of drivers. Any
|
|
||||||
other filename will be interpreted as device number 0.
|
|
||||||
|
|
||||||
@section x11grab
|
|
||||||
|
|
||||||
X11 video input device.
|
|
||||||
|
|
||||||
This device allows to capture a region of an X11 display.
|
|
||||||
|
|
||||||
The filename passed as input has the syntax:
|
|
||||||
@example
|
|
||||||
[@var{hostname}]:@var{display_number}.@var{screen_number}[+@var{x_offset},@var{y_offset}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@var{hostname}:@var{display_number}.@var{screen_number} specifies the
|
|
||||||
X11 display name of the screen to grab from. @var{hostname} can be
|
|
||||||
ommitted, and defaults to "localhost". The environment variable
|
|
||||||
@env{DISPLAY} contains the default display name.
|
|
||||||
|
|
||||||
@var{x_offset} and @var{y_offset} specify the offsets of the grabbed
|
|
||||||
area with respect to the top-left border of the X11 screen. They
|
|
||||||
default to 0.
|
|
||||||
|
|
||||||
Check the X11 documentation (e.g. man X) for more detailed information.
|
|
||||||
|
|
||||||
Use the @file{dpyinfo} program for getting basic information about the
|
|
||||||
properties of your X11 display (e.g. grep for "name" or "dimensions").
|
|
||||||
|
|
||||||
For example to grab from @file{:0.0} using @file{ffmpeg}:
|
|
||||||
@example
|
|
||||||
ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg
|
|
||||||
|
|
||||||
# Grab at position 10,20.
|
|
||||||
ffmpeg -f x11grab -r 25 -s cif -i :0.0+10,20 out.mpg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@subsection @var{follow_mouse} AVOption
|
|
||||||
|
|
||||||
The syntax is:
|
|
||||||
@example
|
|
||||||
-follow_mouse centered|@var{PIXELS}
|
|
||||||
@end example
|
|
||||||
|
|
||||||
When it is specified with "centered", the grabbing region follows the mouse
|
|
||||||
pointer and keeps the pointer at the center of region; otherwise, the region
|
|
||||||
follows only when the mouse pointer reaches within @var{PIXELS} (greater than
|
|
||||||
zero) to the edge of region.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
@example
|
|
||||||
ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 out.mpg
|
|
||||||
|
|
||||||
# Follows only when the mouse pointer reaches within 100 pixels to edge
|
|
||||||
ffmpeg -f x11grab -follow_mouse 100 -r 25 -s cif -i :0.0 out.mpg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@subsection @var{show_region} AVOption
|
|
||||||
|
|
||||||
The syntax is:
|
|
||||||
@example
|
|
||||||
-show_region 1
|
|
||||||
@end example
|
|
||||||
|
|
||||||
If @var{show_region} AVOption is specified with @var{1}, then the grabbing
|
|
||||||
region will be indicated on screen. With this option, it's easy to know what is
|
|
||||||
being grabbed if only a portion of the screen is grabbed.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
@example
|
|
||||||
ffmpeg -f x11grab -show_region 1 -r 25 -s cif -i :0.0+10,20 out.mpg
|
|
||||||
|
|
||||||
# With follow_mouse
|
|
||||||
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -r 25 -s cif -i :0.0 out.mpg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@c man end INPUT DEVICES
|
|
@@ -5,17 +5,34 @@ NOTE: This is a draft.
|
|||||||
|
|
||||||
Overview:
|
Overview:
|
||||||
---------
|
---------
|
||||||
FFmpeg uses Trac for tracking issues, new issues and changes to
|
FFmpeg uses Roundup for tracking issues, new issues and changes to
|
||||||
existing issues can be done through a web interface.
|
existing issues can be done through a web interface and through email.
|
||||||
It is possible to subscribe to individual issues by adding yourself to the
|
It is possible to subscribe to individual issues by adding yourself to the
|
||||||
nosy list or to subscribe to the ffmpeg-issues mailing list which receives
|
nosy list or to subscribe to the ffmpeg-issues mailing list which receives
|
||||||
a mail for every change to every issue. Replies to such mails will also
|
a mail for every change to every issue. Replies to such mails will also
|
||||||
be properly added to the respective issue.
|
be properly added to the respective issue.
|
||||||
(the above does all work already after light testing)
|
(the above does all work already after light testing)
|
||||||
The subscription URL for the ffmpeg-trac list is:
|
The subscription URL for the ffmpeg-issues list is:
|
||||||
http(s)://ffmpeg.org/mailman/listinfo/ffmpeg-trac
|
http://live.polito/mailman/listinfo/ffmpeg-issues
|
||||||
The URL of the webinterface of the tracker is:
|
The URL of the webinterface of the tracker is:
|
||||||
http(s)://ffmpeg.org/trac/ffmpeg
|
http(s)://roundup.ffmpeg/roundup/ffmpeg/
|
||||||
|
Note the URLs in this document are obfuscated, you must append the top level
|
||||||
|
domain for non-profit organizations to the tracker, and of Italy to the
|
||||||
|
mailing list.
|
||||||
|
|
||||||
|
Email Interface:
|
||||||
|
----------------
|
||||||
|
There is a mailing list to which all new issues and changes to existing issues
|
||||||
|
are sent. You can subscribe through
|
||||||
|
http://live.polito/mailman/listinfo/ffmpeg-issues
|
||||||
|
Replies to messages there will have their text added to the specific issues.
|
||||||
|
Attachments will be added as if they had been uploaded via the web interface.
|
||||||
|
You can change the status, substatus, topic, ... by changing the subject in
|
||||||
|
your reply like:
|
||||||
|
Re: [issue94] register_avcodec and allcodecs.h [type=patch;status=open;substatus=approved]
|
||||||
|
Roundup will then change things as you requested and remove the [...] from
|
||||||
|
the subject before forwarding the mail to the mailing list.
|
||||||
|
|
||||||
|
|
||||||
NOTE: issue = (bug report || patch || feature request)
|
NOTE: issue = (bug report || patch || feature request)
|
||||||
|
|
||||||
|
@@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
@settitle Libavfilter Documentation
|
@settitle Libavfilter Documentation
|
||||||
@titlepage
|
@titlepage
|
||||||
|
@sp 7
|
||||||
@center @titlefont{Libavfilter Documentation}
|
@center @titlefont{Libavfilter Documentation}
|
||||||
|
@sp 3
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
@top
|
|
||||||
|
|
||||||
@contents
|
|
||||||
|
|
||||||
@chapter Introduction
|
@chapter Introduction
|
||||||
|
|
||||||
@@ -48,14 +47,14 @@ and the vflip filter before merging it back with the other stream by
|
|||||||
overlaying it on top. You can use the following command to achieve this:
|
overlaying it on top. You can use the following command to achieve this:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
./ffmpeg -i in.avi -s 240x320 -vf "[in] split [T1], fifo, [T2] overlay= 0:240 [out]; [T1] fifo, crop=0:0:-1:240, vflip [T2]
|
./ffmpeg -i in.avi -s 240x320 -vfilters "[in] split [T1], fifo, [T2] overlay= 0:240 [out]; [T1] fifo, crop=0:0:-1:240, vflip [T2]
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
where input_video.avi has a vertical resolution of 480 pixels. The
|
where input_video.avi has a vertical resolution of 480 pixels. The
|
||||||
result will be that in output the top half of the video is mirrored
|
result will be that in output the top half of the video is mirrored
|
||||||
onto the bottom half.
|
onto the bottom half.
|
||||||
|
|
||||||
Video filters are loaded using the @var{-vf} option passed to
|
Video filters are loaded using the @var{-vfilters} option passed to
|
||||||
ffmpeg or to ffplay. Filters in the same linear chain are separated by
|
ffmpeg or to ffplay. Filters in the same linear chain are separated by
|
||||||
commas. In our example, @var{split, fifo, overlay} are in one linear
|
commas. In our example, @var{split, fifo, overlay} are in one linear
|
||||||
chain, and @var{fifo, crop, vflip} are in another. The points where
|
chain, and @var{fifo, crop, vflip} are in another. The points where
|
||||||
@@ -100,6 +99,209 @@ display graph.png
|
|||||||
can be used to create and display an image representing the graph
|
can be used to create and display an image representing the graph
|
||||||
described by the @var{GRAPH_DESCRIPTION} string.
|
described by the @var{GRAPH_DESCRIPTION} string.
|
||||||
|
|
||||||
@include filters.texi
|
@chapter Available video filters
|
||||||
|
|
||||||
|
When you configure your FFmpeg build, you can disable any of the
|
||||||
|
existing video filters.
|
||||||
|
The configure output will show the video filters included in your
|
||||||
|
build.
|
||||||
|
|
||||||
|
Below is a description of the currently available video filters.
|
||||||
|
|
||||||
|
@section crop
|
||||||
|
|
||||||
|
Crop the input video to @var{x}:@var{y}:@var{width}:@var{height}.
|
||||||
|
|
||||||
|
@example
|
||||||
|
./ffmpeg -i in.avi -vfilters "crop=0:0:0:240" out.avi
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@var{x} and @var{y} specify the position of the top-left corner of the
|
||||||
|
output (non-cropped) area.
|
||||||
|
|
||||||
|
The default value of @var{x} and @var{y} is 0.
|
||||||
|
|
||||||
|
The @var{width} and @var{height} parameters specify the width and height
|
||||||
|
of the output (non-cropped) area.
|
||||||
|
|
||||||
|
A value of 0 is interpreted as the maximum possible size contained in
|
||||||
|
the area delimited by the top-left corner at position x:y.
|
||||||
|
|
||||||
|
For example the parameters:
|
||||||
|
|
||||||
|
@example
|
||||||
|
"crop=100:100:0:0"
|
||||||
|
@end example
|
||||||
|
|
||||||
|
will delimit the rectangle with the top-left corner placed at position
|
||||||
|
100:100 and the right-bottom corner corresponding to the right-bottom
|
||||||
|
corner of the input image.
|
||||||
|
|
||||||
|
The default value of @var{width} and @var{height} is 0.
|
||||||
|
|
||||||
|
@section format
|
||||||
|
|
||||||
|
Convert the input video to one of the specified pixel formats.
|
||||||
|
Libavfilter will try to pick one that is supported for the input to
|
||||||
|
the next filter.
|
||||||
|
|
||||||
|
The filter accepts a list of pixel format names, separated by ``:'',
|
||||||
|
for example ``yuv420p:monow:rgb24''.
|
||||||
|
|
||||||
|
The following command:
|
||||||
|
|
||||||
|
@example
|
||||||
|
./ffmpeg -i in.avi -vfilters "format=yuv420p" out.avi
|
||||||
|
@end example
|
||||||
|
|
||||||
|
will convert the input video to the format ``yuv420p''.
|
||||||
|
|
||||||
|
@section noformat
|
||||||
|
|
||||||
|
Force libavfilter not to use any of the specified pixel formats for the
|
||||||
|
input to the next filter.
|
||||||
|
|
||||||
|
The filter accepts a list of pixel format names, separated by ``:'',
|
||||||
|
for example ``yuv420p:monow:rgb24''.
|
||||||
|
|
||||||
|
The following command:
|
||||||
|
|
||||||
|
@example
|
||||||
|
./ffmpeg -i in.avi -vfilters "noformat=yuv420p, vflip" out.avi
|
||||||
|
@end example
|
||||||
|
|
||||||
|
will make libavfilter use a format different from ``yuv420p'' for the
|
||||||
|
input to the vflip filter.
|
||||||
|
|
||||||
|
@section null
|
||||||
|
|
||||||
|
Pass the source unchanged to the output.
|
||||||
|
|
||||||
|
@section scale
|
||||||
|
|
||||||
|
Scale the input video to @var{width}:@var{height} and/or convert the image format.
|
||||||
|
|
||||||
|
For example the command:
|
||||||
|
|
||||||
|
@example
|
||||||
|
./ffmpeg -i in.avi -vfilters "scale=200:100" out.avi
|
||||||
|
@end example
|
||||||
|
|
||||||
|
will scale the input video to a size of 200x100.
|
||||||
|
|
||||||
|
If the input image format is different from the format requested by
|
||||||
|
the next filter, the scale filter will convert the input to the
|
||||||
|
requested format.
|
||||||
|
|
||||||
|
If the value for @var{width} or @var{height} is 0, the respective input
|
||||||
|
size is used for the output.
|
||||||
|
|
||||||
|
If the value for @var{width} or @var{height} is -1, the scale filter will
|
||||||
|
use, for the respective output size, a value that maintains the aspect
|
||||||
|
ratio of the input image.
|
||||||
|
|
||||||
|
The default value of @var{width} and @var{height} is 0.
|
||||||
|
|
||||||
|
@section slicify
|
||||||
|
|
||||||
|
Pass the images of input video on to next video filter as multiple
|
||||||
|
slices.
|
||||||
|
|
||||||
|
@example
|
||||||
|
./ffmpeg -i in.avi -vfilters "slicify=32" out.avi
|
||||||
|
@end example
|
||||||
|
|
||||||
|
The filter accepts the slice height as parameter. If the parameter is
|
||||||
|
not specified it will use the default value of 16.
|
||||||
|
|
||||||
|
Adding this in the beginning of filter chains should make filtering
|
||||||
|
faster due to better use of the memory cache.
|
||||||
|
|
||||||
|
@section unsharp
|
||||||
|
|
||||||
|
Sharpen or blur the input video. It accepts the following parameters:
|
||||||
|
|
||||||
|
@multitable @columnfractions .2 .5 .1 .1 .1
|
||||||
|
@headitem Name @tab Description @tab Min @tab Max @tab Default
|
||||||
|
@item @var{luma_msize_x}
|
||||||
|
@tab Luma matrix horizontal size
|
||||||
|
@tab 3
|
||||||
|
@tab 13
|
||||||
|
@tab 5
|
||||||
|
@item @var{luma_msize_y}
|
||||||
|
@tab Luma matrix vertical size
|
||||||
|
@tab 3
|
||||||
|
@tab 13
|
||||||
|
@tab 5
|
||||||
|
@item @var{luma_amount}
|
||||||
|
@tab Luma effect strength
|
||||||
|
@tab -2.0
|
||||||
|
@tab 5.0
|
||||||
|
@tab 1.0
|
||||||
|
@item @var{chroma_msize_x}
|
||||||
|
@tab Chroma matrix horizontal size
|
||||||
|
@tab 3
|
||||||
|
@tab 13
|
||||||
|
@tab 0
|
||||||
|
@item @var{chroma_msize_y}
|
||||||
|
@tab Chroma matrix vertical size
|
||||||
|
@tab 3
|
||||||
|
@tab 13
|
||||||
|
@tab 0
|
||||||
|
@item @var{chroma_amount}
|
||||||
|
@tab Chroma effect strength
|
||||||
|
@tab -2.0
|
||||||
|
@tab 5.0
|
||||||
|
@tab 0.0
|
||||||
|
@end multitable
|
||||||
|
|
||||||
|
Negative values for the amount will blur the input video, while positive
|
||||||
|
values will sharpen. All parameters are optional and default to the
|
||||||
|
equivalent of the string '5:5:1.0:0:0:0.0'.
|
||||||
|
|
||||||
|
@example
|
||||||
|
# Strong luma sharpen effect parameters
|
||||||
|
unsharp=7:7:2.5
|
||||||
|
|
||||||
|
# Strong blur of both luma and chroma parameters
|
||||||
|
unsharp=7:7:-2:7:7:-2
|
||||||
|
|
||||||
|
# Use the default values with @command{ffmpeg}
|
||||||
|
./ffmpeg -i in.avi -vfilters "unsharp" out.mp4
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@section vflip
|
||||||
|
|
||||||
|
Flip the input video vertically.
|
||||||
|
|
||||||
|
@example
|
||||||
|
./ffmpeg -i in.avi -vfilters "vflip" out.avi
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@chapter Available video sources
|
||||||
|
|
||||||
|
Below is a description of the currently available video sources.
|
||||||
|
|
||||||
|
@section nullsrc
|
||||||
|
|
||||||
|
Null video source, never return images. It is mainly useful as a
|
||||||
|
template and to be employed in analysis / debugging tools.
|
||||||
|
|
||||||
|
It accepts as optional parameter a string of the form
|
||||||
|
@var{width}:@var{height}, where @var{width} and @var{height} specify the size of
|
||||||
|
the configured source.
|
||||||
|
|
||||||
|
The default values of @var{width} and @var{height} are respectively 352
|
||||||
|
and 288 (corresponding to the CIF size format).
|
||||||
|
|
||||||
|
@chapter Available video sinks
|
||||||
|
|
||||||
|
Below is a description of the currently available video sinks.
|
||||||
|
|
||||||
|
@section nullsink
|
||||||
|
|
||||||
|
Null video sink, do absolutely nothing with the input video. It is
|
||||||
|
mainly useful as a template and to be employed in analysis / debugging
|
||||||
|
tools.
|
||||||
|
|
||||||
@bye
|
@bye
|
||||||
|
@@ -1,68 +0,0 @@
|
|||||||
@chapter Metadata
|
|
||||||
@c man begin METADATA
|
|
||||||
|
|
||||||
FFmpeg is able to dump metadata from media files into a simple UTF-8-encoded
|
|
||||||
INI-like text file and then load it back using the metadata muxer/demuxer.
|
|
||||||
|
|
||||||
The file format is as follows:
|
|
||||||
@enumerate
|
|
||||||
|
|
||||||
@item
|
|
||||||
A file consists of a header and a number of metadata tags divided into sections,
|
|
||||||
each on its own line.
|
|
||||||
|
|
||||||
@item
|
|
||||||
The header is a ';FFMETADATA' string, followed by a version number (now 1).
|
|
||||||
|
|
||||||
@item
|
|
||||||
Metadata tags are of the form 'key=value'
|
|
||||||
|
|
||||||
@item
|
|
||||||
Immediately after header follows global metadata
|
|
||||||
|
|
||||||
@item
|
|
||||||
After global metadata there may be sections with per-stream/per-chapter
|
|
||||||
metadata.
|
|
||||||
|
|
||||||
@item
|
|
||||||
A section starts with the section name in uppercase (i.e. STREAM or CHAPTER) in
|
|
||||||
brackets ('[', ']') and ends with next section or end of file.
|
|
||||||
|
|
||||||
@item
|
|
||||||
At the beginning of a chapter section there may be an optional timebase to be
|
|
||||||
used for start/end values. It must be in form 'TIMEBASE=num/den', where num and
|
|
||||||
den are integers. If the timebase is missing then start/end times are assumed to
|
|
||||||
be in milliseconds.
|
|
||||||
Next a chapter section must contain chapter start and end times in form
|
|
||||||
'START=num', 'END=num', where num is a positive integer.
|
|
||||||
|
|
||||||
@item
|
|
||||||
Empty lines and lines starting with ';' or '#' are ignored.
|
|
||||||
|
|
||||||
@item
|
|
||||||
Metadata keys or values containing special characters ('=', ';', '#', '\' and a
|
|
||||||
newline) must be escaped with a backslash '\'.
|
|
||||||
|
|
||||||
@item
|
|
||||||
Note that whitespace in metadata (e.g. foo = bar) is considered to be a part of
|
|
||||||
the tag (in the example above key is 'foo ', value is ' bar').
|
|
||||||
@end enumerate
|
|
||||||
|
|
||||||
A ffmetadata file might look like this:
|
|
||||||
@example
|
|
||||||
;FFMETADATA1
|
|
||||||
title=bike\\shed
|
|
||||||
;this is a comment
|
|
||||||
artist=FFmpeg troll team
|
|
||||||
|
|
||||||
[CHAPTER]
|
|
||||||
TIMEBASE=1/1000
|
|
||||||
START=0
|
|
||||||
#chapter ends at 0:01:00
|
|
||||||
END=60000
|
|
||||||
title=chapter \#1
|
|
||||||
[STREAM]
|
|
||||||
title=multi\
|
|
||||||
line
|
|
||||||
@end example
|
|
||||||
@c man end METADATA
|
|
@@ -1,65 +0,0 @@
|
|||||||
FFmpeg multithreading methods
|
|
||||||
==============================================
|
|
||||||
|
|
||||||
FFmpeg provides two methods for multithreading codecs.
|
|
||||||
|
|
||||||
Slice threading decodes multiple parts of a frame at the same time, using
|
|
||||||
AVCodecContext execute() and execute2().
|
|
||||||
|
|
||||||
Frame threading decodes multiple frames at the same time.
|
|
||||||
It accepts N future frames and delays decoded pictures by N-1 frames.
|
|
||||||
The later frames are decoded in separate threads while the user is
|
|
||||||
displaying the current one.
|
|
||||||
|
|
||||||
Restrictions on clients
|
|
||||||
==============================================
|
|
||||||
|
|
||||||
Slice threading -
|
|
||||||
* The client's draw_horiz_band() must be thread-safe according to the comment
|
|
||||||
in avcodec.h.
|
|
||||||
|
|
||||||
Frame threading -
|
|
||||||
* Restrictions with slice threading also apply.
|
|
||||||
* For best performance, the client should set thread_safe_callbacks if it
|
|
||||||
provides a thread-safe get_buffer() callback.
|
|
||||||
* There is one frame of delay added for every thread beyond the first one.
|
|
||||||
Clients must be able to handle this; the pkt_dts and pkt_pts fields in
|
|
||||||
AVFrame will work as usual.
|
|
||||||
|
|
||||||
Restrictions on codec implementations
|
|
||||||
==============================================
|
|
||||||
|
|
||||||
Slice threading -
|
|
||||||
None except that there must be something worth executing in parallel.
|
|
||||||
|
|
||||||
Frame threading -
|
|
||||||
* Codecs can only accept entire pictures per packet.
|
|
||||||
* Codecs similar to ffv1, whose streams don't reset across frames,
|
|
||||||
will not work because their bitstreams cannot be decoded in parallel.
|
|
||||||
|
|
||||||
* The contents of buffers must not be read before ff_thread_await_progress()
|
|
||||||
has been called on them. reget_buffer() and buffer age optimizations no longer work.
|
|
||||||
* The contents of buffers must not be written to after ff_thread_report_progress()
|
|
||||||
has been called on them. This includes draw_edges().
|
|
||||||
|
|
||||||
Porting codecs to frame threading
|
|
||||||
==============================================
|
|
||||||
|
|
||||||
Find all context variables that are needed by the next frame. Move all
|
|
||||||
code changing them, as well as code calling get_buffer(), up to before
|
|
||||||
the decode process starts. Call ff_thread_finish_setup() afterwards. If
|
|
||||||
some code can't be moved, have update_thread_context() run it in the next
|
|
||||||
thread.
|
|
||||||
|
|
||||||
If the codec allocates writable tables in its init(), add an init_thread_copy()
|
|
||||||
which re-allocates them for other threads.
|
|
||||||
|
|
||||||
Add CODEC_CAP_FRAME_THREADS to the codec capabilities. There will be very little
|
|
||||||
speed gain at this point but it should work.
|
|
||||||
|
|
||||||
Call ff_thread_report_progress() after some part of the current picture has decoded.
|
|
||||||
A good place to put this is where draw_horiz_band() is called - add this if it isn't
|
|
||||||
called anywhere, as it's useful too and the implementation is trivial when you're
|
|
||||||
doing this. Note that draw_edges() needs to be called before reporting progress.
|
|
||||||
|
|
||||||
Before accessing a reference frame or its MVs, call ff_thread_await_progress().
|
|
276
doc/muxers.texi
276
doc/muxers.texi
@@ -1,276 +0,0 @@
|
|||||||
@chapter Muxers
|
|
||||||
@c man begin MUXERS
|
|
||||||
|
|
||||||
Muxers are configured elements in FFmpeg which allow writing
|
|
||||||
multimedia streams to a particular type of file.
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported muxers
|
|
||||||
are enabled by default. You can list all available muxers using the
|
|
||||||
configure option @code{--list-muxers}.
|
|
||||||
|
|
||||||
You can disable all the muxers with the configure option
|
|
||||||
@code{--disable-muxers} and selectively enable / disable single muxers
|
|
||||||
with the options @code{--enable-muxer=@var{MUXER}} /
|
|
||||||
@code{--disable-muxer=@var{MUXER}}.
|
|
||||||
|
|
||||||
The option @code{-formats} of the ff* tools will display the list of
|
|
||||||
enabled muxers.
|
|
||||||
|
|
||||||
A description of some of the currently available muxers follows.
|
|
||||||
|
|
||||||
@anchor{crc}
|
|
||||||
@section crc
|
|
||||||
|
|
||||||
CRC (Cyclic Redundancy Check) testing format.
|
|
||||||
|
|
||||||
This muxer computes and prints the Adler-32 CRC of all the input audio
|
|
||||||
and video frames. By default audio frames are converted to signed
|
|
||||||
16-bit raw audio and video frames to raw video before computing the
|
|
||||||
CRC.
|
|
||||||
|
|
||||||
The output of the muxer consists of a single line of the form:
|
|
||||||
CRC=0x@var{CRC}, where @var{CRC} is a hexadecimal number 0-padded to
|
|
||||||
8 digits containing the CRC for all the decoded input frames.
|
|
||||||
|
|
||||||
For example to compute the CRC of the input, and store it in the file
|
|
||||||
@file{out.crc}:
|
|
||||||
@example
|
|
||||||
ffmpeg -i INPUT -f crc out.crc
|
|
||||||
@end example
|
|
||||||
|
|
||||||
You can print the CRC to stdout with the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -i INPUT -f crc -
|
|
||||||
@end example
|
|
||||||
|
|
||||||
You can select the output format of each frame with @file{ffmpeg} by
|
|
||||||
specifying the audio and video codec and format. For example to
|
|
||||||
compute the CRC of the input audio converted to PCM unsigned 8-bit
|
|
||||||
and the input video converted to MPEG-2 video, use the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -i INPUT -acodec pcm_u8 -vcodec mpeg2video -f crc -
|
|
||||||
@end example
|
|
||||||
|
|
||||||
See also the @ref{framecrc} muxer.
|
|
||||||
|
|
||||||
@anchor{framecrc}
|
|
||||||
@section framecrc
|
|
||||||
|
|
||||||
Per-frame CRC (Cyclic Redundancy Check) testing format.
|
|
||||||
|
|
||||||
This muxer computes and prints the Adler-32 CRC for each decoded audio
|
|
||||||
and video frame. By default audio frames are converted to signed
|
|
||||||
16-bit raw audio and video frames to raw video before computing the
|
|
||||||
CRC.
|
|
||||||
|
|
||||||
The output of the muxer consists of a line for each audio and video
|
|
||||||
frame of the form: @var{stream_index}, @var{frame_dts},
|
|
||||||
@var{frame_size}, 0x@var{CRC}, where @var{CRC} is a hexadecimal
|
|
||||||
number 0-padded to 8 digits containing the CRC of the decoded frame.
|
|
||||||
|
|
||||||
For example to compute the CRC of each decoded frame in the input, and
|
|
||||||
store it in the file @file{out.crc}:
|
|
||||||
@example
|
|
||||||
ffmpeg -i INPUT -f framecrc out.crc
|
|
||||||
@end example
|
|
||||||
|
|
||||||
You can print the CRC of each decoded frame to stdout with the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -i INPUT -f framecrc -
|
|
||||||
@end example
|
|
||||||
|
|
||||||
You can select the output format of each frame with @file{ffmpeg} by
|
|
||||||
specifying the audio and video codec and format. For example, to
|
|
||||||
compute the CRC of each decoded input audio frame converted to PCM
|
|
||||||
unsigned 8-bit and of each decoded input video frame converted to
|
|
||||||
MPEG-2 video, use the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -i INPUT -acodec pcm_u8 -vcodec mpeg2video -f framecrc -
|
|
||||||
@end example
|
|
||||||
|
|
||||||
See also the @ref{crc} muxer.
|
|
||||||
|
|
||||||
@section image2
|
|
||||||
|
|
||||||
Image file muxer.
|
|
||||||
|
|
||||||
The image file muxer writes video frames to image files.
|
|
||||||
|
|
||||||
The output filenames are specified by a pattern, which can be used to
|
|
||||||
produce sequentially numbered series of files.
|
|
||||||
The pattern may contain the string "%d" or "%0@var{N}d", this string
|
|
||||||
specifies the position of the characters representing a numbering in
|
|
||||||
the filenames. If the form "%0@var{N}d" is used, the string
|
|
||||||
representing the number in each filename is 0-padded to @var{N}
|
|
||||||
digits. The literal character '%' can be specified in the pattern with
|
|
||||||
the string "%%".
|
|
||||||
|
|
||||||
If the pattern contains "%d" or "%0@var{N}d", the first filename of
|
|
||||||
the file list specified will contain the number 1, all the following
|
|
||||||
numbers will be sequential.
|
|
||||||
|
|
||||||
The pattern may contain a suffix which is used to automatically
|
|
||||||
determine the format of the image files to write.
|
|
||||||
|
|
||||||
For example the pattern "img-%03d.bmp" will specify a sequence of
|
|
||||||
filenames of the form @file{img-001.bmp}, @file{img-002.bmp}, ...,
|
|
||||||
@file{img-010.bmp}, etc.
|
|
||||||
The pattern "img%%-%d.jpg" will specify a sequence of filenames of the
|
|
||||||
form @file{img%-1.jpg}, @file{img%-2.jpg}, ..., @file{img%-10.jpg},
|
|
||||||
etc.
|
|
||||||
|
|
||||||
The following example shows how to use @file{ffmpeg} for creating a
|
|
||||||
sequence of files @file{img-001.jpeg}, @file{img-002.jpeg}, ...,
|
|
||||||
taking one image every second from the input video:
|
|
||||||
@example
|
|
||||||
ffmpeg -i in.avi -r 1 -f image2 'img-%03d.jpeg'
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note that with @file{ffmpeg}, if the format is not specified with the
|
|
||||||
@code{-f} option and the output filename specifies an image file
|
|
||||||
format, the image2 muxer is automatically selected, so the previous
|
|
||||||
command can be written as:
|
|
||||||
@example
|
|
||||||
ffmpeg -i in.avi -r 1 'img-%03d.jpeg'
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note also that the pattern must not necessarily contain "%d" or
|
|
||||||
"%0@var{N}d", for example to create a single image file
|
|
||||||
@file{img.jpeg} from the input video you can employ the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -i in.avi -f image2 -vframes 1 img.jpeg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
The image muxer supports the .Y.U.V image file format. This format is
|
|
||||||
special in that that each image frame consists of three files, for
|
|
||||||
each of the YUV420P components. To read or write this image file format,
|
|
||||||
specify the name of the '.Y' file. The muxer will automatically open the
|
|
||||||
'.U' and '.V' files as required.
|
|
||||||
|
|
||||||
@section mpegts
|
|
||||||
|
|
||||||
MPEG transport stream muxer.
|
|
||||||
|
|
||||||
This muxer implements ISO 13818-1 and part of ETSI EN 300 468.
|
|
||||||
|
|
||||||
The muxer options are:
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
@item -mpegts_original_network_id @var{number}
|
|
||||||
Set the original_network_id (default 0x0001). This is unique identifier
|
|
||||||
of a network in DVB. Its main use is in the unique identification of a
|
|
||||||
service through the path Original_Network_ID, Transport_Stream_ID.
|
|
||||||
@item -mpegts_transport_stream_id @var{number}
|
|
||||||
Set the transport_stream_id (default 0x0001). This identifies a
|
|
||||||
transponder in DVB.
|
|
||||||
@item -mpegts_service_id @var{number}
|
|
||||||
Set the service_id (default 0x0001) also known as program in DVB.
|
|
||||||
@item -mpegts_pmt_start_pid @var{number}
|
|
||||||
Set the first PID for PMT (default 0x1000, max 0x1f00).
|
|
||||||
@item -mpegts_start_pid @var{number}
|
|
||||||
Set the first PID for data packets (default 0x0100, max 0x0f00).
|
|
||||||
@end table
|
|
||||||
|
|
||||||
The recognized metadata settings in mpegts muxer are @code{service_provider}
|
|
||||||
and @code{service_name}. If they are not set the default for
|
|
||||||
@code{service_provider} is "FFmpeg" and the default for
|
|
||||||
@code{service_name} is "Service01".
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -i file.mpg -acodec copy -vcodec copy \
|
|
||||||
-mpegts_original_network_id 0x1122 \
|
|
||||||
-mpegts_transport_stream_id 0x3344 \
|
|
||||||
-mpegts_service_id 0x5566 \
|
|
||||||
-mpegts_pmt_start_pid 0x1500 \
|
|
||||||
-mpegts_start_pid 0x150 \
|
|
||||||
-metadata service_provider="Some provider" \
|
|
||||||
-metadata service_name="Some Channel" \
|
|
||||||
-y out.ts
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section null
|
|
||||||
|
|
||||||
Null muxer.
|
|
||||||
|
|
||||||
This muxer does not generate any output file, it is mainly useful for
|
|
||||||
testing or benchmarking purposes.
|
|
||||||
|
|
||||||
For example to benchmark decoding with @file{ffmpeg} you can use the
|
|
||||||
command:
|
|
||||||
@example
|
|
||||||
ffmpeg -benchmark -i INPUT -f null out.null
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note that the above command does not read or write the @file{out.null}
|
|
||||||
file, but specifying the output file is required by the @file{ffmpeg}
|
|
||||||
syntax.
|
|
||||||
|
|
||||||
Alternatively you can write the command as:
|
|
||||||
@example
|
|
||||||
ffmpeg -benchmark -i INPUT -f null -
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section matroska
|
|
||||||
|
|
||||||
Matroska container muxer.
|
|
||||||
|
|
||||||
This muxer implements the matroska and webm container specs.
|
|
||||||
|
|
||||||
The recognized metadata settings in this muxer are:
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item title=@var{title name}
|
|
||||||
Name provided to a single track
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item language=@var{language name}
|
|
||||||
Specifies the language of the track in the Matroska languages form
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item stereo_mode=@var{mode}
|
|
||||||
Stereo 3D video layout of two views in a single video track
|
|
||||||
@table @option
|
|
||||||
@item mono
|
|
||||||
video is not stereo
|
|
||||||
@item left_right
|
|
||||||
Both views are arranged side by side, Left-eye view is on the left
|
|
||||||
@item bottom_top
|
|
||||||
Both views are arranged in top-bottom orientation, Left-eye view is at bottom
|
|
||||||
@item top_bottom
|
|
||||||
Both views are arranged in top-bottom orientation, Left-eye view is on top
|
|
||||||
@item checkerboard_rl
|
|
||||||
Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first
|
|
||||||
@item checkerboard_lr
|
|
||||||
Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first
|
|
||||||
@item row_interleaved_rl
|
|
||||||
Each view is constituted by a row based interleaving, Right-eye view is first row
|
|
||||||
@item row_interleaved_lr
|
|
||||||
Each view is constituted by a row based interleaving, Left-eye view is first row
|
|
||||||
@item col_interleaved_rl
|
|
||||||
Both views are arranged in a column based interleaving manner, Right-eye view is first column
|
|
||||||
@item col_interleaved_lr
|
|
||||||
Both views are arranged in a column based interleaving manner, Left-eye view is first column
|
|
||||||
@item anaglyph_cyan_red
|
|
||||||
All frames are in anaglyph format viewable through red-cyan filters
|
|
||||||
@item right_left
|
|
||||||
Both views are arranged side by side, Right-eye view is on the left
|
|
||||||
@item anaglyph_green_magenta
|
|
||||||
All frames are in anaglyph format viewable through green-magenta filters
|
|
||||||
@item block_lr
|
|
||||||
Both eyes laced in one Block, Left-eye view is first
|
|
||||||
@item block_rl
|
|
||||||
Both eyes laced in one Block, Right-eye view is first
|
|
||||||
@end table
|
|
||||||
@end table
|
|
||||||
|
|
||||||
For example a 3D WebM clip can be created using the following command line:
|
|
||||||
@example
|
|
||||||
ffmpeg -i sample_left_right_clip.mpg -an -vcodec libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@c man end MUXERS
|
|
@@ -17,15 +17,15 @@ Understanding these overoptimized functions:
|
|||||||
As many functions tend to be a bit difficult to understand because
|
As many functions tend to be a bit difficult to understand because
|
||||||
of optimizations, it can be hard to optimize them further, or write
|
of optimizations, it can be hard to optimize them further, or write
|
||||||
architecture-specific versions. It is recommended to look at older
|
architecture-specific versions. It is recommended to look at older
|
||||||
revisions of the interesting files (web frontends for the various FFmpeg
|
revisions of the interesting files (for a web frontend try ViewVC at
|
||||||
branches are listed at http://ffmpeg.org/download.html).
|
http://svn.ffmpeg.org/ffmpeg/trunk/).
|
||||||
Alternatively, look into the other architecture-specific versions in
|
Alternatively, look into the other architecture-specific versions in
|
||||||
the x86/, ppc/, alpha/ subdirectories. Even if you don't exactly
|
the x86/, ppc/, alpha/ subdirectories. Even if you don't exactly
|
||||||
comprehend the instructions, it could help understanding the functions
|
comprehend the instructions, it could help understanding the functions
|
||||||
and how they can be optimized.
|
and how they can be optimized.
|
||||||
|
|
||||||
NOTE: If you still don't understand some function, ask at our mailing list!!!
|
NOTE: If you still don't understand some function, ask at our mailing list!!!
|
||||||
(http://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel)
|
(http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel)
|
||||||
|
|
||||||
|
|
||||||
When is an optimization justified?
|
When is an optimization justified?
|
||||||
@@ -157,68 +157,15 @@ Use asm loops like:
|
|||||||
__asm__(
|
__asm__(
|
||||||
"1: ....
|
"1: ....
|
||||||
...
|
...
|
||||||
"jump_instruction ....
|
"jump_instruciton ....
|
||||||
Do not use C loops:
|
Do not use C loops:
|
||||||
do{
|
do{
|
||||||
__asm__(
|
__asm__(
|
||||||
...
|
...
|
||||||
}while()
|
}while()
|
||||||
|
|
||||||
For x86, mark registers that are clobbered in your asm. This means both
|
Use __asm__() instead of intrinsics. The latter requires a good optimizing compiler
|
||||||
general x86 registers (e.g. eax) as well as XMM registers. This last one is
|
which gcc is not.
|
||||||
particularly important on Win64, where xmm6-15 are callee-save, and not
|
|
||||||
restoring their contents leads to undefined results. In external asm (e.g.
|
|
||||||
yasm), you do this by using:
|
|
||||||
cglobal functon_name, num_args, num_regs, num_xmm_regs
|
|
||||||
In inline asm, you specify clobbered registers at the end of your asm:
|
|
||||||
__asm__(".." ::: "%eax").
|
|
||||||
If gcc is not set to support sse (-msse) it will not accept xmm registers
|
|
||||||
in the clobber list. For that we use two macros to declare the clobbers.
|
|
||||||
XMM_CLOBBERS should be used when there are other clobbers, for example:
|
|
||||||
__asm__(".." ::: XMM_CLOBBERS("xmm0",) "eax");
|
|
||||||
and XMM_CLOBBERS_ONLY should be used when the only clobbers are xmm registers:
|
|
||||||
__asm__(".." :: XMM_CLOBBERS_ONLY("xmm0"));
|
|
||||||
|
|
||||||
Do not expect a compiler to maintain values in your registers between separate
|
|
||||||
(inline) asm code blocks. It is not required to. For example, this is bad:
|
|
||||||
__asm__("movdqa %0, %%xmm7" : src);
|
|
||||||
/* do something */
|
|
||||||
__asm__("movdqa %%xmm7, %1" : dst);
|
|
||||||
- first of all, you're assuming that the compiler will not use xmm7 in
|
|
||||||
between the two asm blocks. It probably won't when you test it, but it's
|
|
||||||
a poor assumption that will break at some point for some --cpu compiler flag
|
|
||||||
- secondly, you didn't mark xmm7 as clobbered. If you did, the compiler would
|
|
||||||
have restored the original value of xmm7 after the first asm block, thus
|
|
||||||
rendering the combination of the two blocks of code invalid
|
|
||||||
Code that depends on data in registries being untouched, should be written as
|
|
||||||
a single __asm__() statement. Ideally, a single function contains only one
|
|
||||||
__asm__() block.
|
|
||||||
|
|
||||||
Use external asm (nasm/yasm) or inline asm (__asm__()), do not use intrinsics.
|
|
||||||
The latter requires a good optimizing compiler which gcc is not.
|
|
||||||
|
|
||||||
Inline asm vs. external asm
|
|
||||||
---------------------------
|
|
||||||
Both inline asm (__asm__("..") in a .c file, handled by a compiler such as gcc)
|
|
||||||
and external asm (.s or .asm files, handled by an assembler such as yasm/nasm)
|
|
||||||
are accepted in FFmpeg. Which one to use differs per specific case.
|
|
||||||
|
|
||||||
- if your code is intended to be inlined in a C function, inline asm is always
|
|
||||||
better, because external asm cannot be inlined
|
|
||||||
- if your code calls external functions, yasm is always better
|
|
||||||
- if your code takes huge and complex structs as function arguments (e.g.
|
|
||||||
MpegEncContext; note that this is not ideal and is discouraged if there
|
|
||||||
are alternatives), then inline asm is always better, because predicting
|
|
||||||
member offsets in complex structs is almost impossible. It's safest to let
|
|
||||||
the compiler take care of that
|
|
||||||
- in many cases, both can be used and it just depends on the preference of the
|
|
||||||
person writing the asm. For new asm, the choice is up to you. For existing
|
|
||||||
asm, you'll likely want to maintain whatever form it is currently in unless
|
|
||||||
there is a good reason to change it.
|
|
||||||
- if, for some reason, you believe that a particular chunk of existing external
|
|
||||||
asm could be improved upon further if written in inline asm (or the other
|
|
||||||
way around), then please make the move from external asm <-> inline asm a
|
|
||||||
separate patch before your patches that actually improve the asm.
|
|
||||||
|
|
||||||
|
|
||||||
Links:
|
Links:
|
||||||
|
@@ -1,73 +0,0 @@
|
|||||||
@chapter Output Devices
|
|
||||||
@c man begin OUTPUT DEVICES
|
|
||||||
|
|
||||||
Output devices are configured elements in FFmpeg which allow to write
|
|
||||||
multimedia data to an output device attached to your system.
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported output devices
|
|
||||||
are enabled by default. You can list all available ones using the
|
|
||||||
configure option "--list-outdevs".
|
|
||||||
|
|
||||||
You can disable all the output devices using the configure option
|
|
||||||
"--disable-outdevs", and selectively enable an output device using the
|
|
||||||
option "--enable-outdev=@var{OUTDEV}", or you can disable a particular
|
|
||||||
input device using the option "--disable-outdev=@var{OUTDEV}".
|
|
||||||
|
|
||||||
The option "-formats" of the ff* tools will display the list of
|
|
||||||
enabled output devices (amongst the muxers).
|
|
||||||
|
|
||||||
A description of the currently available output devices follows.
|
|
||||||
|
|
||||||
@section alsa
|
|
||||||
|
|
||||||
ALSA (Advanced Linux Sound Architecture) output device.
|
|
||||||
|
|
||||||
@section oss
|
|
||||||
|
|
||||||
OSS (Open Sound System) output device.
|
|
||||||
|
|
||||||
@section sdl
|
|
||||||
|
|
||||||
SDL (Simple Directmedia Layer) output device.
|
|
||||||
|
|
||||||
This output devices allows to show a video stream in an SDL
|
|
||||||
window. Only one SDL window is allowed per application, so you can
|
|
||||||
have only one instance of this output device in an application.
|
|
||||||
|
|
||||||
To enable this output device you need libsdl installed on your system
|
|
||||||
when configuring your build.
|
|
||||||
|
|
||||||
For more information about SDL, check:
|
|
||||||
@url{http://www.libsdl.org/}
|
|
||||||
|
|
||||||
@subsection Options
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item window_title
|
|
||||||
Set the SDL window title, if not specified default to the filename
|
|
||||||
specified for the output device.
|
|
||||||
|
|
||||||
@item icon_title
|
|
||||||
Set the name of the iconified SDL window, if not specified it is set
|
|
||||||
to the same value of @var{window_title}.
|
|
||||||
|
|
||||||
@item window_size
|
|
||||||
Set the SDL window size, can be a string of the form
|
|
||||||
@var{width}x@var{height} or a video size abbreviation.
|
|
||||||
If not specified it defaults to the size of the input video.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@subsection Examples
|
|
||||||
|
|
||||||
The following command shows the @file{ffmpeg} output is an
|
|
||||||
SDL window, forcing its size to the qcif format:
|
|
||||||
@example
|
|
||||||
ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section sndio
|
|
||||||
|
|
||||||
sndio audio output device.
|
|
||||||
|
|
||||||
@c man end OUTPUT DEVICES
|
|
@@ -1,480 +0,0 @@
|
|||||||
@chapter Protocols
|
|
||||||
@c man begin PROTOCOLS
|
|
||||||
|
|
||||||
Protocols are configured elements in FFmpeg which allow to access
|
|
||||||
resources which require the use of a particular protocol.
|
|
||||||
|
|
||||||
When you configure your FFmpeg build, all the supported protocols are
|
|
||||||
enabled by default. You can list all available ones using the
|
|
||||||
configure option "--list-protocols".
|
|
||||||
|
|
||||||
You can disable all the protocols using the configure option
|
|
||||||
"--disable-protocols", and selectively enable a protocol using the
|
|
||||||
option "--enable-protocol=@var{PROTOCOL}", or you can disable a
|
|
||||||
particular protocol using the option
|
|
||||||
"--disable-protocol=@var{PROTOCOL}".
|
|
||||||
|
|
||||||
The option "-protocols" of the ff* tools will display the list of
|
|
||||||
supported protocols.
|
|
||||||
|
|
||||||
A description of the currently available protocols follows.
|
|
||||||
|
|
||||||
@section applehttp
|
|
||||||
|
|
||||||
Read Apple HTTP Live Streaming compliant segmented stream as
|
|
||||||
a uniform one. The M3U8 playlists describing the segments can be
|
|
||||||
remote HTTP resources or local files, accessed using the standard
|
|
||||||
file protocol.
|
|
||||||
HTTP is default, specific protocol can be declared by specifying
|
|
||||||
"+@var{proto}" after the applehttp URI scheme name, where @var{proto}
|
|
||||||
is either "file" or "http".
|
|
||||||
|
|
||||||
@example
|
|
||||||
applehttp://host/path/to/remote/resource.m3u8
|
|
||||||
applehttp+http://host/path/to/remote/resource.m3u8
|
|
||||||
applehttp+file://path/to/local/resource.m3u8
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section concat
|
|
||||||
|
|
||||||
Physical concatenation protocol.
|
|
||||||
|
|
||||||
Allow to read and seek from many resource in sequence as if they were
|
|
||||||
a unique resource.
|
|
||||||
|
|
||||||
A URL accepted by this protocol has the syntax:
|
|
||||||
@example
|
|
||||||
concat:@var{URL1}|@var{URL2}|...|@var{URLN}
|
|
||||||
@end example
|
|
||||||
|
|
||||||
where @var{URL1}, @var{URL2}, ..., @var{URLN} are the urls of the
|
|
||||||
resource to be concatenated, each one possibly specifying a distinct
|
|
||||||
protocol.
|
|
||||||
|
|
||||||
For example to read a sequence of files @file{split1.mpeg},
|
|
||||||
@file{split2.mpeg}, @file{split3.mpeg} with @file{ffplay} use the
|
|
||||||
command:
|
|
||||||
@example
|
|
||||||
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note that you may need to escape the character "|" which is special for
|
|
||||||
many shells.
|
|
||||||
|
|
||||||
@section file
|
|
||||||
|
|
||||||
File access protocol.
|
|
||||||
|
|
||||||
Allow to read from or read to a file.
|
|
||||||
|
|
||||||
For example to read from a file @file{input.mpeg} with @file{ffmpeg}
|
|
||||||
use the command:
|
|
||||||
@example
|
|
||||||
ffmpeg -i file:input.mpeg output.mpeg
|
|
||||||
@end example
|
|
||||||
|
|
||||||
The ff* tools default to the file protocol, that is a resource
|
|
||||||
specified with the name "FILE.mpeg" is interpreted as the URL
|
|
||||||
"file:FILE.mpeg".
|
|
||||||
|
|
||||||
@section gopher
|
|
||||||
|
|
||||||
Gopher protocol.
|
|
||||||
|
|
||||||
@section http
|
|
||||||
|
|
||||||
HTTP (Hyper Text Transfer Protocol).
|
|
||||||
|
|
||||||
@section mmst
|
|
||||||
|
|
||||||
MMS (Microsoft Media Server) protocol over TCP.
|
|
||||||
|
|
||||||
@section mmsh
|
|
||||||
|
|
||||||
MMS (Microsoft Media Server) protocol over HTTP.
|
|
||||||
|
|
||||||
The required syntax is:
|
|
||||||
@example
|
|
||||||
mmsh://@var{server}[:@var{port}][/@var{app}][/@var{playpath}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section md5
|
|
||||||
|
|
||||||
MD5 output protocol.
|
|
||||||
|
|
||||||
Computes the MD5 hash of the data to be written, and on close writes
|
|
||||||
this to the designated output or stdout if none is specified. It can
|
|
||||||
be used to test muxers without writing an actual file.
|
|
||||||
|
|
||||||
Some examples follow.
|
|
||||||
@example
|
|
||||||
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
|
|
||||||
ffmpeg -i input.flv -f avi -y md5:output.avi.md5
|
|
||||||
|
|
||||||
# Write the MD5 hash of the encoded AVI file to stdout.
|
|
||||||
ffmpeg -i input.flv -f avi -y md5:
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note that some formats (typically MOV) require the output protocol to
|
|
||||||
be seekable, so they will fail with the MD5 output protocol.
|
|
||||||
|
|
||||||
@section pipe
|
|
||||||
|
|
||||||
UNIX pipe access protocol.
|
|
||||||
|
|
||||||
Allow to read and write from UNIX pipes.
|
|
||||||
|
|
||||||
The accepted syntax is:
|
|
||||||
@example
|
|
||||||
pipe:[@var{number}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@var{number} is the number corresponding to the file descriptor of the
|
|
||||||
pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If @var{number}
|
|
||||||
is not specified, by default the stdout file descriptor will be used
|
|
||||||
for writing, stdin for reading.
|
|
||||||
|
|
||||||
For example to read from stdin with @file{ffmpeg}:
|
|
||||||
@example
|
|
||||||
cat test.wav | ffmpeg -i pipe:0
|
|
||||||
# ...this is the same as...
|
|
||||||
cat test.wav | ffmpeg -i pipe:
|
|
||||||
@end example
|
|
||||||
|
|
||||||
For writing to stdout with @file{ffmpeg}:
|
|
||||||
@example
|
|
||||||
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
|
|
||||||
# ...this is the same as...
|
|
||||||
ffmpeg -i test.wav -f avi pipe: | cat > test.avi
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Note that some formats (typically MOV), require the output protocol to
|
|
||||||
be seekable, so they will fail with the pipe output protocol.
|
|
||||||
|
|
||||||
@section rtmp
|
|
||||||
|
|
||||||
Real-Time Messaging Protocol.
|
|
||||||
|
|
||||||
The Real-Time Messaging Protocol (RTMP) is used for streaming multime‐
|
|
||||||
dia content across a TCP/IP network.
|
|
||||||
|
|
||||||
The required syntax is:
|
|
||||||
@example
|
|
||||||
rtmp://@var{server}[:@var{port}][/@var{app}][/@var{playpath}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
The accepted parameters are:
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item server
|
|
||||||
The address of the RTMP server.
|
|
||||||
|
|
||||||
@item port
|
|
||||||
The number of the TCP port to use (by default is 1935).
|
|
||||||
|
|
||||||
@item app
|
|
||||||
It is the name of the application to access. It usually corresponds to
|
|
||||||
the path where the application is installed on the RTMP server
|
|
||||||
(e.g. @file{/ondemand/}, @file{/flash/live/}, etc.).
|
|
||||||
|
|
||||||
@item playpath
|
|
||||||
It is the path or name of the resource to play with reference to the
|
|
||||||
application specified in @var{app}, may be prefixed by "mp4:".
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
For example to read with @file{ffplay} a multimedia resource named
|
|
||||||
"sample" from the application "vod" from an RTMP server "myserver":
|
|
||||||
@example
|
|
||||||
ffplay rtmp://myserver/vod/sample
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section rtmp, rtmpe, rtmps, rtmpt, rtmpte
|
|
||||||
|
|
||||||
Real-Time Messaging Protocol and its variants supported through
|
|
||||||
librtmp.
|
|
||||||
|
|
||||||
Requires the presence of the librtmp headers and library during
|
|
||||||
configuration. You need to explicitely configure the build with
|
|
||||||
"--enable-librtmp". If enabled this will replace the native RTMP
|
|
||||||
protocol.
|
|
||||||
|
|
||||||
This protocol provides most client functions and a few server
|
|
||||||
functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT),
|
|
||||||
encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled
|
|
||||||
variants of these encrypted types (RTMPTE, RTMPTS).
|
|
||||||
|
|
||||||
The required syntax is:
|
|
||||||
@example
|
|
||||||
@var{rtmp_proto}://@var{server}[:@var{port}][/@var{app}][/@var{playpath}] @var{options}
|
|
||||||
@end example
|
|
||||||
|
|
||||||
where @var{rtmp_proto} is one of the strings "rtmp", "rtmpt", "rtmpe",
|
|
||||||
"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and
|
|
||||||
@var{server}, @var{port}, @var{app} and @var{playpath} have the same
|
|
||||||
meaning as specified for the RTMP native protocol.
|
|
||||||
@var{options} contains a list of space-separated options of the form
|
|
||||||
@var{key}=@var{val}.
|
|
||||||
|
|
||||||
See the librtmp manual page (man 3 librtmp) for more information.
|
|
||||||
|
|
||||||
For example, to stream a file in real-time to an RTMP server using
|
|
||||||
@file{ffmpeg}:
|
|
||||||
@example
|
|
||||||
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
|
|
||||||
@end example
|
|
||||||
|
|
||||||
To play the same stream using @file{ffplay}:
|
|
||||||
@example
|
|
||||||
ffplay "rtmp://myserver/live/mystream live=1"
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section rtp
|
|
||||||
|
|
||||||
Real-Time Protocol.
|
|
||||||
|
|
||||||
@section rtsp
|
|
||||||
|
|
||||||
RTSP is not technically a protocol handler in libavformat, it is a demuxer
|
|
||||||
and muxer. The demuxer supports both normal RTSP (with data transferred
|
|
||||||
over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with
|
|
||||||
data transferred over RDT).
|
|
||||||
|
|
||||||
The muxer can be used to send a stream using RTSP ANNOUNCE to a server
|
|
||||||
supporting it (currently Darwin Streaming Server and Mischa Spiegelmock's
|
|
||||||
@uref{http://github.com/revmischa/rtsp-server, RTSP server}).
|
|
||||||
|
|
||||||
The required syntax for a RTSP url is:
|
|
||||||
@example
|
|
||||||
rtsp://@var{hostname}[:@var{port}]/@var{path}[?@var{options}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@var{options} is a @code{&}-separated list. The following options
|
|
||||||
are supported:
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item udp
|
|
||||||
Use UDP as lower transport protocol.
|
|
||||||
|
|
||||||
@item tcp
|
|
||||||
Use TCP (interleaving within the RTSP control channel) as lower
|
|
||||||
transport protocol.
|
|
||||||
|
|
||||||
@item multicast
|
|
||||||
Use UDP multicast as lower transport protocol.
|
|
||||||
|
|
||||||
@item http
|
|
||||||
Use HTTP tunneling as lower transport protocol, which is useful for
|
|
||||||
passing proxies.
|
|
||||||
|
|
||||||
@item filter_src
|
|
||||||
Accept packets only from negotiated peer address and port.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Multiple lower transport protocols may be specified, in that case they are
|
|
||||||
tried one at a time (if the setup of one fails, the next one is tried).
|
|
||||||
For the muxer, only the @code{tcp} and @code{udp} options are supported.
|
|
||||||
|
|
||||||
When receiving data over UDP, the demuxer tries to reorder received packets
|
|
||||||
(since they may arrive out of order, or packets may get lost totally). In
|
|
||||||
order for this to be enabled, a maximum delay must be specified in the
|
|
||||||
@code{max_delay} field of AVFormatContext.
|
|
||||||
|
|
||||||
When watching multi-bitrate Real-RTSP streams with @file{ffplay}, the
|
|
||||||
streams to display can be chosen with @code{-vst} @var{n} and
|
|
||||||
@code{-ast} @var{n} for video and audio respectively, and can be switched
|
|
||||||
on the fly by pressing @code{v} and @code{a}.
|
|
||||||
|
|
||||||
Example command lines:
|
|
||||||
|
|
||||||
To watch a stream over UDP, with a max reordering delay of 0.5 seconds:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffplay -max_delay 500000 rtsp://server/video.mp4?udp
|
|
||||||
@end example
|
|
||||||
|
|
||||||
To watch a stream tunneled over HTTP:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffplay rtsp://server/video.mp4?http
|
|
||||||
@end example
|
|
||||||
|
|
||||||
To send a stream in realtime to a RTSP server, for others to watch:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -re -i @var{input} -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section sap
|
|
||||||
|
|
||||||
Session Announcement Protocol (RFC 2974). This is not technically a
|
|
||||||
protocol handler in libavformat, it is a muxer and demuxer.
|
|
||||||
It is used for signalling of RTP streams, by announcing the SDP for the
|
|
||||||
streams regularly on a separate port.
|
|
||||||
|
|
||||||
@subsection Muxer
|
|
||||||
|
|
||||||
The syntax for a SAP url given to the muxer is:
|
|
||||||
@example
|
|
||||||
sap://@var{destination}[:@var{port}][?@var{options}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
The RTP packets are sent to @var{destination} on port @var{port},
|
|
||||||
or to port 5004 if no port is specified.
|
|
||||||
@var{options} is a @code{&}-separated list. The following options
|
|
||||||
are supported:
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item announce_addr=@var{address}
|
|
||||||
Specify the destination IP address for sending the announcements to.
|
|
||||||
If omitted, the announcements are sent to the commonly used SAP
|
|
||||||
announcement multicast address 224.2.127.254 (sap.mcast.net), or
|
|
||||||
ff0e::2:7ffe if @var{destination} is an IPv6 address.
|
|
||||||
|
|
||||||
@item announce_port=@var{port}
|
|
||||||
Specify the port to send the announcements on, defaults to
|
|
||||||
9875 if not specified.
|
|
||||||
|
|
||||||
@item ttl=@var{ttl}
|
|
||||||
Specify the time to live value for the announcements and RTP packets,
|
|
||||||
defaults to 255.
|
|
||||||
|
|
||||||
@item same_port=@var{0|1}
|
|
||||||
If set to 1, send all RTP streams on the same port pair. If zero (the
|
|
||||||
default), all streams are sent on unique ports, with each stream on a
|
|
||||||
port 2 numbers higher than the previous.
|
|
||||||
VLC/Live555 requires this to be set to 1, to be able to receive the stream.
|
|
||||||
The RTP stack in libavformat for receiving requires all streams to be sent
|
|
||||||
on unique ports.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Example command lines follow.
|
|
||||||
|
|
||||||
To broadcast a stream on the local subnet, for watching in VLC:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -re -i @var{input} -f sap sap://224.0.0.255?same_port=1
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Similarly, for watching in ffplay:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -re -i @var{input} -f sap sap://224.0.0.255
|
|
||||||
@end example
|
|
||||||
|
|
||||||
And for watching in ffplay, over IPv6:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -re -i @var{input} -f sap sap://[ff0e::1:2:3:4]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@subsection Demuxer
|
|
||||||
|
|
||||||
The syntax for a SAP url given to the demuxer is:
|
|
||||||
@example
|
|
||||||
sap://[@var{address}][:@var{port}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@var{address} is the multicast address to listen for announcements on,
|
|
||||||
if omitted, the default 224.2.127.254 (sap.mcast.net) is used. @var{port}
|
|
||||||
is the port that is listened on, 9875 if omitted.
|
|
||||||
|
|
||||||
The demuxers listens for announcements on the given address and port.
|
|
||||||
Once an announcement is received, it tries to receive that particular stream.
|
|
||||||
|
|
||||||
Example command lines follow.
|
|
||||||
|
|
||||||
To play back the first stream announced on the normal SAP multicast address:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffplay sap://
|
|
||||||
@end example
|
|
||||||
|
|
||||||
To play back the first stream announced on one the default IPv6 SAP multicast address:
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffplay sap://[ff0e::2:7ffe]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@section tcp
|
|
||||||
|
|
||||||
Trasmission Control Protocol.
|
|
||||||
|
|
||||||
The required syntax for a TCP url is:
|
|
||||||
@example
|
|
||||||
tcp://@var{hostname}:@var{port}[?@var{options}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item listen
|
|
||||||
Listen for an incoming connection
|
|
||||||
|
|
||||||
@example
|
|
||||||
ffmpeg -i @var{input} -f @var{format} tcp://@var{hostname}:@var{port}?listen
|
|
||||||
ffplay tcp://@var{hostname}:@var{port}
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@section udp
|
|
||||||
|
|
||||||
User Datagram Protocol.
|
|
||||||
|
|
||||||
The required syntax for a UDP url is:
|
|
||||||
@example
|
|
||||||
udp://@var{hostname}:@var{port}[?@var{options}]
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@var{options} contains a list of &-seperated options of the form @var{key}=@var{val}.
|
|
||||||
Follow the list of supported options.
|
|
||||||
|
|
||||||
@table @option
|
|
||||||
|
|
||||||
@item buffer_size=@var{size}
|
|
||||||
set the UDP buffer size in bytes
|
|
||||||
|
|
||||||
@item localport=@var{port}
|
|
||||||
override the local UDP port to bind with
|
|
||||||
|
|
||||||
@item pkt_size=@var{size}
|
|
||||||
set the size in bytes of UDP packets
|
|
||||||
|
|
||||||
@item reuse=@var{1|0}
|
|
||||||
explicitly allow or disallow reusing UDP sockets
|
|
||||||
|
|
||||||
@item ttl=@var{ttl}
|
|
||||||
set the time to live value (for multicast only)
|
|
||||||
|
|
||||||
@item connect=@var{1|0}
|
|
||||||
Initialize the UDP socket with @code{connect()}. In this case, the
|
|
||||||
destination address can't be changed with ff_udp_set_remote_url later.
|
|
||||||
If the destination address isn't known at the start, this option can
|
|
||||||
be specified in ff_udp_set_remote_url, too.
|
|
||||||
This allows finding out the source address for the packets with getsockname,
|
|
||||||
and makes writes return with AVERROR(ECONNREFUSED) if "destination
|
|
||||||
unreachable" is received.
|
|
||||||
For receiving, this gives the benefit of only receiving packets from
|
|
||||||
the specified peer address/port.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Some usage examples of the udp protocol with @file{ffmpeg} follow.
|
|
||||||
|
|
||||||
To stream over UDP to a remote endpoint:
|
|
||||||
@example
|
|
||||||
ffmpeg -i @var{input} -f @var{format} udp://@var{hostname}:@var{port}
|
|
||||||
@end example
|
|
||||||
|
|
||||||
To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer:
|
|
||||||
@example
|
|
||||||
ffmpeg -i @var{input} -f mpegts udp://@var{hostname}:@var{port}?pkt_size=188&buffer_size=65535
|
|
||||||
@end example
|
|
||||||
|
|
||||||
To receive over UDP from a remote endpoint:
|
|
||||||
@example
|
|
||||||
ffmpeg -i udp://[@var{multicast-address}]:@var{port}
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@c man end PROTOCOLS
|
|
@@ -9,14 +9,14 @@ it's a little late for this year's soc (2006).
|
|||||||
The Goal:
|
The Goal:
|
||||||
Our goal in respect to soc is and must be of course exactly one thing and
|
Our goal in respect to soc is and must be of course exactly one thing and
|
||||||
that is to improve FFmpeg, to reach this goal, code must
|
that is to improve FFmpeg, to reach this goal, code must
|
||||||
* conform to the development policy and patch submission guidelines
|
* conform to the svn policy and patch submission guidelines
|
||||||
* must improve FFmpeg somehow (faster, smaller, "better",
|
* must improve FFmpeg somehow (faster, smaller, "better",
|
||||||
more codecs supported, fewer bugs, cleaner, ...)
|
more codecs supported, fewer bugs, cleaner, ...)
|
||||||
|
|
||||||
for mentors and other developers to help students to reach that goal it is
|
for mentors and other developers to help students to reach that goal it is
|
||||||
essential that changes to their codebase are publicly visible, clean and
|
essential that changes to their codebase are publicly visible, clean and
|
||||||
easy reviewable that again leads us to:
|
easy reviewable that again leads us to:
|
||||||
* use of a revision control system like git
|
* use of a revision control system like svn
|
||||||
* separation of cosmetic from non-cosmetic changes (this is almost entirely
|
* separation of cosmetic from non-cosmetic changes (this is almost entirely
|
||||||
ignored by mentors and students in soc 2006 which might lead to a suprise
|
ignored by mentors and students in soc 2006 which might lead to a suprise
|
||||||
when the code will be reviewed at the end before a possible inclusion in
|
when the code will be reviewed at the end before a possible inclusion in
|
||||||
|
24
doc/t2h.init
24
doc/t2h.init
@@ -1,24 +0,0 @@
|
|||||||
# no horiz rules between sections
|
|
||||||
$end_section = \&FFMPEG_end_section;
|
|
||||||
sub FFMPEG_end_section($$)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
$print_page_foot = \&FFMPEG_print_page_foot;
|
|
||||||
sub FFMPEG_print_page_foot($$)
|
|
||||||
{
|
|
||||||
my $fh = shift;
|
|
||||||
print $fh "$SMALL_RULE\n";
|
|
||||||
T2H_DEFAULT_print_page_foot($fh);
|
|
||||||
}
|
|
||||||
|
|
||||||
# no navigation elements
|
|
||||||
$SECTION_NAVIGATION = 0;
|
|
||||||
# the same for texi2html 5.0
|
|
||||||
$HEADERS = 0;
|
|
||||||
|
|
||||||
# TOC and Chapter headings link
|
|
||||||
$TOC_LINKS = 1;
|
|
||||||
|
|
||||||
# print the TOC where @contents is used
|
|
||||||
$INLINE_CONTENTS = 1;
|
|
@@ -12,7 +12,6 @@ the tables as a header file using the tableprint.h helpers.
|
|||||||
Both of these files will be compiled for the host system, so to avoid
|
Both of these files will be compiled for the host system, so to avoid
|
||||||
breakage with cross-compilation neither of them may include, directly
|
breakage with cross-compilation neither of them may include, directly
|
||||||
or indirectly, config.h or avconfig.h.
|
or indirectly, config.h or avconfig.h.
|
||||||
This means that e.g. libavutil/mathematics.h is ok but libavutil/libm.h is not.
|
|
||||||
Due to this, the .c file or Makefile may have to provide additional defines
|
Due to this, the .c file or Makefile may have to provide additional defines
|
||||||
or stubs, though if possible this should be avoided.
|
or stubs, though if possible this should be avoided.
|
||||||
In particular, CONFIG_HARDCODED_TABLES should always be defined to 0.
|
In particular, CONFIG_HARDCODED_TABLES should always be defined to 0.
|
||||||
@@ -28,14 +27,9 @@ them.
|
|||||||
The printing code typically looks like this:
|
The printing code typically looks like this:
|
||||||
write_fileheader();
|
write_fileheader();
|
||||||
printf("static const uint8_t my_array[100] = {\n");
|
printf("static const uint8_t my_array[100] = {\n");
|
||||||
write_uint8_t_array(my_array, 100);
|
write_uint8_array(my_array, 100);
|
||||||
printf("};\n");
|
printf("};\n");
|
||||||
|
|
||||||
This is the more generic form, in case you need to do something special.
|
|
||||||
Usually you should instead use the short form:
|
|
||||||
write_fileheader();
|
|
||||||
WRITE_ARRAY("static const", uint8_t, my_array);
|
|
||||||
|
|
||||||
write_fileheader() adds some minor things like a "this is a generated file"
|
write_fileheader() adds some minor things like a "this is a generated file"
|
||||||
comment and some standard includes.
|
comment and some standard includes.
|
||||||
tablegen.h defines some write functions for one- and two-dimensional arrays
|
tablegen.h defines some write functions for one- and two-dimensional arrays
|
||||||
|
@@ -26,7 +26,6 @@
|
|||||||
$output = 0;
|
$output = 0;
|
||||||
$skipping = 0;
|
$skipping = 0;
|
||||||
%sects = ();
|
%sects = ();
|
||||||
@sects_sequence = ();
|
|
||||||
$section = "";
|
$section = "";
|
||||||
@icstack = ();
|
@icstack = ();
|
||||||
@endwstack = ();
|
@endwstack = ();
|
||||||
@@ -100,21 +99,15 @@ while(<$inf>) {
|
|||||||
next;
|
next;
|
||||||
};
|
};
|
||||||
|
|
||||||
/^\@include\s+(.+)$/ and do {
|
|
||||||
push @instack, $inf;
|
|
||||||
$inf = gensym();
|
|
||||||
|
|
||||||
# Try cwd and $ibase.
|
|
||||||
open($inf, "<" . $1)
|
|
||||||
or open($inf, "<" . $ibase . "/" . $1)
|
|
||||||
or die "cannot open $1 or $ibase/$1: $!\n";
|
|
||||||
next;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Look for blocks surrounded by @c man begin SECTION ... @c man end.
|
# Look for blocks surrounded by @c man begin SECTION ... @c man end.
|
||||||
# This really oughta be @ifman ... @end ifman and the like, but such
|
# This really oughta be @ifman ... @end ifman and the like, but such
|
||||||
# would require rev'ing all other Texinfo translators.
|
# would require rev'ing all other Texinfo translators.
|
||||||
/^\@c\s+man\s+begin\s+([A-Za-z ]+)/ and $sect = $1, push (@sects_sequence, $sect), $output = 1, next;
|
/^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do {
|
||||||
|
$output = 1 if exists $defs{$2};
|
||||||
|
$sect = $1;
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
/^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next;
|
||||||
/^\@c\s+man\s+end/ and do {
|
/^\@c\s+man\s+end/ and do {
|
||||||
$sects{$sect} = "" unless exists $sects{$sect};
|
$sects{$sect} = "" unless exists $sects{$sect};
|
||||||
$sects{$sect} .= postprocess($section);
|
$sects{$sect} .= postprocess($section);
|
||||||
@@ -231,18 +224,27 @@ while(<$inf>) {
|
|||||||
|
|
||||||
# Single line command handlers.
|
# Single line command handlers.
|
||||||
|
|
||||||
/^\@(?:section|unnumbered|unnumberedsec|center|heading)\s+(.+)$/
|
/^\@include\s+(.+)$/ and do {
|
||||||
|
push @instack, $inf;
|
||||||
|
$inf = gensym();
|
||||||
|
|
||||||
|
# Try cwd and $ibase.
|
||||||
|
open($inf, "<" . $1)
|
||||||
|
or open($inf, "<" . $ibase . "/" . $1)
|
||||||
|
or die "cannot open $1 or $ibase/$1: $!\n";
|
||||||
|
next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/
|
||||||
and $_ = "\n=head2 $1\n";
|
and $_ = "\n=head2 $1\n";
|
||||||
/^\@(?:subsection|subheading)\s+(.+)$/
|
/^\@subsection\s+(.+)$/
|
||||||
and $_ = "\n=head3 $1\n";
|
and $_ = "\n=head3 $1\n";
|
||||||
/^\@(?:subsubsection|subsubheading)\s+(.+)$/
|
|
||||||
and $_ = "\n=head4 $1\n";
|
|
||||||
|
|
||||||
# Block command handlers:
|
# Block command handlers:
|
||||||
/^\@itemize\s*(\@[a-z]+|\*|-)?/ and do {
|
/^\@itemize\s+(\@[a-z]+|\*|-)/ and do {
|
||||||
push @endwstack, $endw;
|
push @endwstack, $endw;
|
||||||
push @icstack, $ic;
|
push @icstack, $ic;
|
||||||
$ic = $1 ? $1 : "*";
|
$ic = $1;
|
||||||
$_ = "\n=over 4\n";
|
$_ = "\n=over 4\n";
|
||||||
$endw = "itemize";
|
$endw = "itemize";
|
||||||
};
|
};
|
||||||
@@ -301,8 +303,8 @@ die "No filename or title\n" unless defined $fn && defined $tl;
|
|||||||
$sects{NAME} = "$fn \- $tl\n";
|
$sects{NAME} = "$fn \- $tl\n";
|
||||||
$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES};
|
$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES};
|
||||||
|
|
||||||
unshift @sects_sequence, "NAME";
|
for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS EXAMPLES ENVIRONMENT FILES
|
||||||
for $sect (@sects_sequence) {
|
BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
|
||||||
if(exists $sects{$sect}) {
|
if(exists $sects{$sect}) {
|
||||||
$head = $sect;
|
$head = $sect;
|
||||||
$head =~ s/SEEALSO/SEE ALSO/;
|
$head =~ s/SEEALSO/SEE ALSO/;
|
||||||
@@ -348,11 +350,9 @@ sub postprocess
|
|||||||
# @* is also impossible in .pod; we discard it and any newline that
|
# @* is also impossible in .pod; we discard it and any newline that
|
||||||
# follows it. Similarly, our macro @gol must be discarded.
|
# follows it. Similarly, our macro @gol must be discarded.
|
||||||
|
|
||||||
s/\@anchor{(?:[^\}]*)\}//g;
|
|
||||||
s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
|
s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
|
||||||
s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
|
s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
|
||||||
s/;\s+\@pxref\{(?:[^\}]*)\}//g;
|
s/;\s+\@pxref\{(?:[^\}]*)\}//g;
|
||||||
s/\@ref\{([^\}]*)\}/$1/g;
|
|
||||||
s/\@noindent\s*//g;
|
s/\@noindent\s*//g;
|
||||||
s/\@refill//g;
|
s/\@refill//g;
|
||||||
s/\@gol//g;
|
s/\@gol//g;
|
||||||
|
@@ -1,17 +0,0 @@
|
|||||||
vcodec=libvpx
|
|
||||||
g=120
|
|
||||||
rc_lookahead=16
|
|
||||||
quality=good
|
|
||||||
speed=0
|
|
||||||
profile=1
|
|
||||||
qmax=51
|
|
||||||
qmin=11
|
|
||||||
slices=4
|
|
||||||
vb=2M
|
|
||||||
|
|
||||||
#ignored unless using -pass 2
|
|
||||||
maxrate=24M
|
|
||||||
minrate=100k
|
|
||||||
arnr_max_frames=7
|
|
||||||
arnr_strength=5
|
|
||||||
arnr_type=3
|
|
@@ -1,17 +0,0 @@
|
|||||||
vcodec=libvpx
|
|
||||||
g=120
|
|
||||||
rc_lookahead=25
|
|
||||||
quality=good
|
|
||||||
speed=0
|
|
||||||
profile=1
|
|
||||||
qmax=51
|
|
||||||
qmin=11
|
|
||||||
slices=4
|
|
||||||
vb=2M
|
|
||||||
|
|
||||||
#ignored unless using -pass 2
|
|
||||||
maxrate=24M
|
|
||||||
minrate=100k
|
|
||||||
arnr_max_frames=7
|
|
||||||
arnr_strength=5
|
|
||||||
arnr_type=3
|
|
@@ -1,16 +0,0 @@
|
|||||||
vcodec=libvpx
|
|
||||||
g=120
|
|
||||||
rc_lookahead=16
|
|
||||||
quality=good
|
|
||||||
speed=0
|
|
||||||
profile=0
|
|
||||||
qmax=63
|
|
||||||
qmin=0
|
|
||||||
vb=768k
|
|
||||||
|
|
||||||
#ignored unless using -pass 2
|
|
||||||
maxrate=1.5M
|
|
||||||
minrate=40k
|
|
||||||
arnr_max_frames=7
|
|
||||||
arnr_strength=5
|
|
||||||
arnr_type=3
|
|
@@ -1,17 +0,0 @@
|
|||||||
vcodec=libvpx
|
|
||||||
g=120
|
|
||||||
rc_lookahead=16
|
|
||||||
quality=good
|
|
||||||
speed=0
|
|
||||||
profile=0
|
|
||||||
qmax=51
|
|
||||||
qmin=11
|
|
||||||
slices=4
|
|
||||||
vb=2M
|
|
||||||
|
|
||||||
#ignored unless using -pass 2
|
|
||||||
maxrate=24M
|
|
||||||
minrate=100k
|
|
||||||
arnr_max_frames=7
|
|
||||||
arnr_strength=5
|
|
||||||
arnr_type=3
|
|
@@ -1,17 +0,0 @@
|
|||||||
vcodec=libvpx
|
|
||||||
g=120
|
|
||||||
rc_lookahead=25
|
|
||||||
quality=good
|
|
||||||
speed=0
|
|
||||||
profile=0
|
|
||||||
qmax=51
|
|
||||||
qmin=11
|
|
||||||
slices=4
|
|
||||||
vb=2M
|
|
||||||
|
|
||||||
#ignored unless using -pass 2
|
|
||||||
maxrate=24M
|
|
||||||
minrate=100k
|
|
||||||
arnr_max_frames=7
|
|
||||||
arnr_strength=5
|
|
||||||
arnr_type=3
|
|
4
ffpresets/libx264-baseline.ffpreset
Normal file
4
ffpresets/libx264-baseline.ffpreset
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
coder=0
|
||||||
|
bf=0
|
||||||
|
flags2=-wpred-dct8x8
|
||||||
|
wpredp=0
|
22
ffpresets/libx264-default.ffpreset
Normal file
22
ffpresets/libx264-default.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=hex
|
||||||
|
subq=7
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=3
|
||||||
|
directpred=1
|
||||||
|
trellis=1
|
||||||
|
flags2=+mixed_refs+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
23
ffpresets/libx264-fast.ffpreset
Normal file
23
ffpresets/libx264-fast.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=hex
|
||||||
|
subq=6
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=2
|
||||||
|
directpred=1
|
||||||
|
trellis=1
|
||||||
|
flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=30
|
23
ffpresets/libx264-fast_firstpass.ffpreset
Normal file
23
ffpresets/libx264-fast_firstpass.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=30
|
23
ffpresets/libx264-faster.ffpreset
Normal file
23
ffpresets/libx264-faster.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=hex
|
||||||
|
subq=4
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=2
|
||||||
|
directpred=1
|
||||||
|
trellis=1
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=1
|
||||||
|
rc_lookahead=20
|
23
ffpresets/libx264-faster_firstpass.ffpreset
Normal file
23
ffpresets/libx264-faster_firstpass.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip
|
||||||
|
wpredp=1
|
||||||
|
rc_lookahead=20
|
22
ffpresets/libx264-fastfirstpass.ffpreset
Normal file
22
ffpresets/libx264-fastfirstpass.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=3
|
||||||
|
trellis=0
|
||||||
|
flags2=-bpyramid-wpred-mixed_refs-dct8x8+fastpskip
|
||||||
|
wpredp=2
|
22
ffpresets/libx264-hq.ffpreset
Normal file
22
ffpresets/libx264-hq.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=umh
|
||||||
|
subq=8
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=4
|
||||||
|
directpred=3
|
||||||
|
trellis=1
|
||||||
|
flags2=+wpred+mixed_refs+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
@@ -1,5 +1,5 @@
|
|||||||
coder=0
|
coder=0
|
||||||
flags=+loop+cgop
|
flags=+loop
|
||||||
cmp=+chroma
|
cmp=+chroma
|
||||||
partitions=-parti8x8+parti4x4+partp8x8-partp4x4-partb8x8
|
partitions=-parti8x8+parti4x4+partp8x8-partp4x4-partb8x8
|
||||||
me_method=hex
|
me_method=hex
|
||||||
@@ -11,8 +11,8 @@ sc_threshold=40
|
|||||||
i_qfactor=0.71
|
i_qfactor=0.71
|
||||||
b_strategy=1
|
b_strategy=1
|
||||||
qcomp=0.6
|
qcomp=0.6
|
||||||
qmin=0
|
qmin=10
|
||||||
qmax=69
|
qmax=51
|
||||||
qdiff=4
|
qdiff=4
|
||||||
directpred=1
|
directpred=1
|
||||||
flags2=+fastpskip
|
flags2=+fastpskip
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
coder=1
|
coder=1
|
||||||
flags=+loop+cgop
|
flags=+loop
|
||||||
cmp=+chroma
|
cmp=+chroma
|
||||||
partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
||||||
me_method=esa
|
me_method=esa
|
||||||
@@ -11,8 +11,8 @@ sc_threshold=40
|
|||||||
i_qfactor=0.71
|
i_qfactor=0.71
|
||||||
b_strategy=1
|
b_strategy=1
|
||||||
qcomp=0.6
|
qcomp=0.6
|
||||||
qmin=0
|
qmin=10
|
||||||
qmax=69
|
qmax=51
|
||||||
qdiff=4
|
qdiff=4
|
||||||
refs=16
|
refs=16
|
||||||
directpred=1
|
directpred=1
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
coder=1
|
coder=1
|
||||||
flags=+loop+cgop
|
flags=+loop
|
||||||
cmp=+chroma
|
cmp=+chroma
|
||||||
partitions=-parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
partitions=-parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
||||||
me_method=hex
|
me_method=hex
|
||||||
@@ -11,8 +11,8 @@ sc_threshold=40
|
|||||||
i_qfactor=0.71
|
i_qfactor=0.71
|
||||||
b_strategy=1
|
b_strategy=1
|
||||||
qcomp=0.6
|
qcomp=0.6
|
||||||
qmin=0
|
qmin=10
|
||||||
qmax=69
|
qmax=51
|
||||||
qdiff=4
|
qdiff=4
|
||||||
directpred=1
|
directpred=1
|
||||||
flags2=+fastpskip
|
flags2=+fastpskip
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
coder=1
|
coder=1
|
||||||
flags=+loop+cgop
|
flags=+loop
|
||||||
cmp=+chroma
|
cmp=+chroma
|
||||||
partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
||||||
me_method=umh
|
me_method=umh
|
||||||
@@ -11,8 +11,8 @@ sc_threshold=40
|
|||||||
i_qfactor=0.71
|
i_qfactor=0.71
|
||||||
b_strategy=1
|
b_strategy=1
|
||||||
qcomp=0.6
|
qcomp=0.6
|
||||||
qmin=0
|
qmin=10
|
||||||
qmax=69
|
qmax=51
|
||||||
qdiff=4
|
qdiff=4
|
||||||
refs=2
|
refs=2
|
||||||
directpred=1
|
directpred=1
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
coder=1
|
coder=1
|
||||||
flags=+loop+cgop
|
flags=+loop
|
||||||
cmp=+chroma
|
cmp=+chroma
|
||||||
partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
|
||||||
me_method=umh
|
me_method=umh
|
||||||
@@ -11,8 +11,8 @@ sc_threshold=40
|
|||||||
i_qfactor=0.71
|
i_qfactor=0.71
|
||||||
b_strategy=1
|
b_strategy=1
|
||||||
qcomp=0.6
|
qcomp=0.6
|
||||||
qmin=0
|
qmin=10
|
||||||
qmax=69
|
qmax=51
|
||||||
qdiff=4
|
qdiff=4
|
||||||
refs=4
|
refs=4
|
||||||
directpred=1
|
directpred=1
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
coder=0
|
coder=0
|
||||||
flags=+loop+cgop
|
flags=+loop
|
||||||
cmp=+chroma
|
cmp=+chroma
|
||||||
partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
|
partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
|
||||||
me_method=dia
|
me_method=dia
|
||||||
@@ -11,8 +11,8 @@ sc_threshold=40
|
|||||||
i_qfactor=0.71
|
i_qfactor=0.71
|
||||||
b_strategy=1
|
b_strategy=1
|
||||||
qcomp=0.6
|
qcomp=0.6
|
||||||
qmin=0
|
qmin=10
|
||||||
qmax=69
|
qmax=51
|
||||||
qdiff=4
|
qdiff=4
|
||||||
directpred=1
|
directpred=1
|
||||||
flags2=+fastpskip
|
flags2=+fastpskip
|
||||||
|
1
ffpresets/libx264-main.ffpreset
Normal file
1
ffpresets/libx264-main.ffpreset
Normal file
@@ -0,0 +1 @@
|
|||||||
|
flags2=-dct8x8
|
22
ffpresets/libx264-max.ffpreset
Normal file
22
ffpresets/libx264-max.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8
|
||||||
|
me_method=tesa
|
||||||
|
subq=10
|
||||||
|
me_range=24
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=16
|
||||||
|
directpred=3
|
||||||
|
trellis=2
|
||||||
|
flags2=+wpred+mixed_refs+dct8x8-fastpskip
|
||||||
|
wpredp=2
|
22
ffpresets/libx264-medium.ffpreset
Normal file
22
ffpresets/libx264-medium.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=hex
|
||||||
|
subq=7
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=3
|
||||||
|
directpred=1
|
||||||
|
trellis=1
|
||||||
|
flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
22
ffpresets/libx264-medium_firstpass.ffpreset
Normal file
22
ffpresets/libx264-medium_firstpass.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip
|
||||||
|
wpredp=2
|
22
ffpresets/libx264-normal.ffpreset
Normal file
22
ffpresets/libx264-normal.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=hex
|
||||||
|
subq=6
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=2
|
||||||
|
directpred=3
|
||||||
|
trellis=0
|
||||||
|
flags2=+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
23
ffpresets/libx264-placebo.ffpreset
Normal file
23
ffpresets/libx264-placebo.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8
|
||||||
|
me_method=tesa
|
||||||
|
subq=10
|
||||||
|
me_range=24
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=16
|
||||||
|
refs=16
|
||||||
|
directpred=3
|
||||||
|
trellis=2
|
||||||
|
flags2=+bpyramid+mixed_refs+wpred+dct8x8-fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=60
|
23
ffpresets/libx264-placebo_firstpass.ffpreset
Normal file
23
ffpresets/libx264-placebo_firstpass.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8
|
||||||
|
me_method=tesa
|
||||||
|
subq=10
|
||||||
|
me_range=24
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=16
|
||||||
|
refs=16
|
||||||
|
directpred=3
|
||||||
|
trellis=2
|
||||||
|
flags2=+bpyramid+mixed_refs+wpred+dct8x8-fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=60
|
23
ffpresets/libx264-slow.ffpreset
Normal file
23
ffpresets/libx264-slow.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=umh
|
||||||
|
subq=8
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=5
|
||||||
|
directpred=3
|
||||||
|
trellis=1
|
||||||
|
flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=50
|
23
ffpresets/libx264-slow_firstpass.ffpreset
Normal file
23
ffpresets/libx264-slow_firstpass.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=3
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=50
|
23
ffpresets/libx264-slower.ffpreset
Normal file
23
ffpresets/libx264-slower.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8
|
||||||
|
me_method=umh
|
||||||
|
subq=9
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=8
|
||||||
|
directpred=3
|
||||||
|
trellis=2
|
||||||
|
flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=60
|
23
ffpresets/libx264-slower_firstpass.ffpreset
Normal file
23
ffpresets/libx264-slower_firstpass.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=3
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=60
|
22
ffpresets/libx264-slowfirstpass.ffpreset
Normal file
22
ffpresets/libx264-slowfirstpass.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=hex
|
||||||
|
subq=6
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=3
|
||||||
|
trellis=0
|
||||||
|
flags2=+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
22
ffpresets/libx264-superfast.ffpreset
Normal file
22
ffpresets/libx264-superfast.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=1
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred+dct8x8+fastpskip-mbtree
|
||||||
|
wpredp=0
|
22
ffpresets/libx264-superfast_firstpass.ffpreset
Normal file
22
ffpresets/libx264-superfast_firstpass.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=1
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip-mbtree
|
||||||
|
wpredp=0
|
23
ffpresets/libx264-ultrafast.ffpreset
Normal file
23
ffpresets/libx264-ultrafast.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=0
|
||||||
|
flags=-loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=0
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=0
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=0
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=0
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=-bpyramid-mixed_refs-wpred-dct8x8+fastpskip-mbtree
|
||||||
|
wpredp=0
|
||||||
|
aq_mode=0
|
23
ffpresets/libx264-ultrafast_firstpass.ffpreset
Normal file
23
ffpresets/libx264-ultrafast_firstpass.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=0
|
||||||
|
flags=-loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=0
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=0
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=0
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=0
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=-bpyramid-mixed_refs-wpred-dct8x8+fastpskip-mbtree
|
||||||
|
wpredp=0
|
||||||
|
aq_mode=0
|
22
ffpresets/libx264-veryfast.ffpreset
Normal file
22
ffpresets/libx264-veryfast.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
|
||||||
|
me_method=hex
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred+dct8x8+fastpskip-mbtree
|
||||||
|
wpredp=0
|
22
ffpresets/libx264-veryfast_firstpass.ffpreset
Normal file
22
ffpresets/libx264-veryfast_firstpass.ffpreset
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=16
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=1
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=3
|
||||||
|
refs=1
|
||||||
|
directpred=1
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip-mbtree
|
||||||
|
wpredp=0
|
23
ffpresets/libx264-veryslow.ffpreset
Normal file
23
ffpresets/libx264-veryslow.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8
|
||||||
|
me_method=umh
|
||||||
|
subq=10
|
||||||
|
me_range=24
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=8
|
||||||
|
refs=16
|
||||||
|
directpred=3
|
||||||
|
trellis=2
|
||||||
|
flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=60
|
23
ffpresets/libx264-veryslow_firstpass.ffpreset
Normal file
23
ffpresets/libx264-veryslow_firstpass.ffpreset
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
coder=1
|
||||||
|
flags=+loop
|
||||||
|
cmp=+chroma
|
||||||
|
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
|
||||||
|
me_method=dia
|
||||||
|
subq=2
|
||||||
|
me_range=24
|
||||||
|
g=250
|
||||||
|
keyint_min=25
|
||||||
|
sc_threshold=40
|
||||||
|
i_qfactor=0.71
|
||||||
|
b_strategy=2
|
||||||
|
qcomp=0.6
|
||||||
|
qmin=10
|
||||||
|
qmax=51
|
||||||
|
qdiff=4
|
||||||
|
bf=8
|
||||||
|
refs=1
|
||||||
|
directpred=3
|
||||||
|
trellis=0
|
||||||
|
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip
|
||||||
|
wpredp=2
|
||||||
|
rc_lookahead=60
|
129
ffprobe.c
129
ffprobe.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* ffprobe : Simple Media Prober based on the FFmpeg libraries
|
* FFprobe : Simple Media Prober based on the FFmpeg libraries
|
||||||
* Copyright (c) 2007-2010 Stefano Sabatini
|
* Copyright (c) 2007-2010 Stefano Sabatini
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
@@ -25,17 +25,16 @@
|
|||||||
#include "libavcodec/avcodec.h"
|
#include "libavcodec/avcodec.h"
|
||||||
#include "libavcodec/opt.h"
|
#include "libavcodec/opt.h"
|
||||||
#include "libavutil/pixdesc.h"
|
#include "libavutil/pixdesc.h"
|
||||||
#include "libavutil/dict.h"
|
|
||||||
#include "libavdevice/avdevice.h"
|
#include "libavdevice/avdevice.h"
|
||||||
#include "cmdutils.h"
|
#include "cmdutils.h"
|
||||||
|
|
||||||
const char program_name[] = "ffprobe";
|
const char program_name[] = "FFprobe";
|
||||||
const int program_birth_year = 2007;
|
const int program_birth_year = 2007;
|
||||||
|
|
||||||
static int do_show_format = 0;
|
static int do_show_format = 0;
|
||||||
static int do_show_packets = 0;
|
|
||||||
static int do_show_streams = 0;
|
static int do_show_streams = 0;
|
||||||
|
|
||||||
|
static int convert_tags = 0;
|
||||||
static int show_value_unit = 0;
|
static int show_value_unit = 0;
|
||||||
static int use_value_prefix = 0;
|
static int use_value_prefix = 0;
|
||||||
static int use_byte_value_binary_prefix = 0;
|
static int use_byte_value_binary_prefix = 0;
|
||||||
@@ -102,17 +101,6 @@ static char *time_value_string(char *buf, int buf_size, int64_t val, const AVRat
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *ts_value_string (char *buf, int buf_size, int64_t ts)
|
|
||||||
{
|
|
||||||
if (ts == AV_NOPTS_VALUE) {
|
|
||||||
snprintf(buf, buf_size, "N/A");
|
|
||||||
} else {
|
|
||||||
snprintf(buf, buf_size, "%"PRId64, ts);
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *media_type_string(enum AVMediaType media_type)
|
static const char *media_type_string(enum AVMediaType media_type)
|
||||||
{
|
{
|
||||||
switch (media_type) {
|
switch (media_type) {
|
||||||
@@ -125,44 +113,14 @@ static const char *media_type_string(enum AVMediaType media_type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_packet(AVFormatContext *fmt_ctx, AVPacket *pkt)
|
|
||||||
{
|
|
||||||
char val_str[128];
|
|
||||||
AVStream *st = fmt_ctx->streams[pkt->stream_index];
|
|
||||||
|
|
||||||
printf("[PACKET]\n");
|
|
||||||
printf("codec_type=%s\n" , media_type_string(st->codec->codec_type));
|
|
||||||
printf("stream_index=%d\n" , pkt->stream_index);
|
|
||||||
printf("pts=%s\n" , ts_value_string (val_str, sizeof(val_str), pkt->pts));
|
|
||||||
printf("pts_time=%s\n" , time_value_string(val_str, sizeof(val_str), pkt->pts, &st->time_base));
|
|
||||||
printf("dts=%s\n" , ts_value_string (val_str, sizeof(val_str), pkt->dts));
|
|
||||||
printf("dts_time=%s\n" , time_value_string(val_str, sizeof(val_str), pkt->dts, &st->time_base));
|
|
||||||
printf("duration=%s\n" , ts_value_string (val_str, sizeof(val_str), pkt->duration));
|
|
||||||
printf("duration_time=%s\n", time_value_string(val_str, sizeof(val_str), pkt->duration, &st->time_base));
|
|
||||||
printf("size=%s\n" , value_string (val_str, sizeof(val_str), pkt->size, unit_byte_str));
|
|
||||||
printf("pos=%"PRId64"\n" , pkt->pos);
|
|
||||||
printf("flags=%c\n" , pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_');
|
|
||||||
printf("[/PACKET]\n");
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void show_packets(AVFormatContext *fmt_ctx)
|
|
||||||
{
|
|
||||||
AVPacket pkt;
|
|
||||||
|
|
||||||
av_init_packet(&pkt);
|
|
||||||
|
|
||||||
while (!av_read_frame(fmt_ctx, &pkt))
|
|
||||||
show_packet(fmt_ctx, &pkt);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void show_stream(AVFormatContext *fmt_ctx, int stream_idx)
|
static void show_stream(AVFormatContext *fmt_ctx, int stream_idx)
|
||||||
{
|
{
|
||||||
AVStream *stream = fmt_ctx->streams[stream_idx];
|
AVStream *stream = fmt_ctx->streams[stream_idx];
|
||||||
AVCodecContext *dec_ctx;
|
AVCodecContext *dec_ctx;
|
||||||
AVCodec *dec;
|
AVCodec *dec;
|
||||||
char val_str[128];
|
char val_str[128];
|
||||||
AVDictionaryEntry *tag = NULL;
|
AVMetadataTag *tag = NULL;
|
||||||
|
char a, b, c, d;
|
||||||
AVRational display_aspect_ratio;
|
AVRational display_aspect_ratio;
|
||||||
|
|
||||||
printf("[STREAM]\n");
|
printf("[STREAM]\n");
|
||||||
@@ -181,9 +139,16 @@ static void show_stream(AVFormatContext *fmt_ctx, int stream_idx)
|
|||||||
printf("codec_time_base=%d/%d\n", dec_ctx->time_base.num, dec_ctx->time_base.den);
|
printf("codec_time_base=%d/%d\n", dec_ctx->time_base.num, dec_ctx->time_base.den);
|
||||||
|
|
||||||
/* print AVI/FourCC tag */
|
/* print AVI/FourCC tag */
|
||||||
av_get_codec_tag_string(val_str, sizeof(val_str), dec_ctx->codec_tag);
|
a = dec_ctx->codec_tag & 0xff;
|
||||||
printf("codec_tag_string=%s\n", val_str);
|
b = dec_ctx->codec_tag>>8 & 0xff;
|
||||||
printf("codec_tag=0x%04x\n", dec_ctx->codec_tag);
|
c = dec_ctx->codec_tag>>16 & 0xff;
|
||||||
|
d = dec_ctx->codec_tag>>24 & 0xff;
|
||||||
|
printf("codec_tag_string=");
|
||||||
|
if (isprint(a)) printf("%c", a); else printf("[%d]", a);
|
||||||
|
if (isprint(b)) printf("%c", b); else printf("[%d]", b);
|
||||||
|
if (isprint(c)) printf("%c", c); else printf("[%d]", c);
|
||||||
|
if (isprint(d)) printf("%c", d); else printf("[%d]", d);
|
||||||
|
printf("\ncodec_tag=0x%04x\n", dec_ctx->codec_tag);
|
||||||
|
|
||||||
switch (dec_ctx->codec_type) {
|
switch (dec_ctx->codec_type) {
|
||||||
case AVMEDIA_TYPE_VIDEO:
|
case AVMEDIA_TYPE_VIDEO:
|
||||||
@@ -202,7 +167,6 @@ static void show_stream(AVFormatContext *fmt_ctx, int stream_idx)
|
|||||||
}
|
}
|
||||||
printf("pix_fmt=%s\n", dec_ctx->pix_fmt != PIX_FMT_NONE ?
|
printf("pix_fmt=%s\n", dec_ctx->pix_fmt != PIX_FMT_NONE ?
|
||||||
av_pix_fmt_descriptors[dec_ctx->pix_fmt].name : "unknown");
|
av_pix_fmt_descriptors[dec_ctx->pix_fmt].name : "unknown");
|
||||||
printf("level=%d\n", dec_ctx->level);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AVMEDIA_TYPE_AUDIO:
|
case AVMEDIA_TYPE_AUDIO:
|
||||||
@@ -222,6 +186,8 @@ static void show_stream(AVFormatContext *fmt_ctx, int stream_idx)
|
|||||||
printf("r_frame_rate=%d/%d\n", stream->r_frame_rate.num, stream->r_frame_rate.den);
|
printf("r_frame_rate=%d/%d\n", stream->r_frame_rate.num, stream->r_frame_rate.den);
|
||||||
printf("avg_frame_rate=%d/%d\n", stream->avg_frame_rate.num, stream->avg_frame_rate.den);
|
printf("avg_frame_rate=%d/%d\n", stream->avg_frame_rate.num, stream->avg_frame_rate.den);
|
||||||
printf("time_base=%d/%d\n", stream->time_base.num, stream->time_base.den);
|
printf("time_base=%d/%d\n", stream->time_base.num, stream->time_base.den);
|
||||||
|
if (stream->language[0])
|
||||||
|
printf("language=%s\n", stream->language);
|
||||||
printf("start_time=%s\n", time_value_string(val_str, sizeof(val_str), stream->start_time,
|
printf("start_time=%s\n", time_value_string(val_str, sizeof(val_str), stream->start_time,
|
||||||
&stream->time_base));
|
&stream->time_base));
|
||||||
printf("duration=%s\n", time_value_string(val_str, sizeof(val_str), stream->duration,
|
printf("duration=%s\n", time_value_string(val_str, sizeof(val_str), stream->duration,
|
||||||
@@ -229,16 +195,15 @@ static void show_stream(AVFormatContext *fmt_ctx, int stream_idx)
|
|||||||
if (stream->nb_frames)
|
if (stream->nb_frames)
|
||||||
printf("nb_frames=%"PRId64"\n", stream->nb_frames);
|
printf("nb_frames=%"PRId64"\n", stream->nb_frames);
|
||||||
|
|
||||||
while ((tag = av_dict_get(stream->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))
|
while ((tag = av_metadata_get(stream->metadata, "", tag, AV_METADATA_IGNORE_SUFFIX)))
|
||||||
printf("TAG:%s=%s\n", tag->key, tag->value);
|
printf("TAG:%s=%s\n", tag->key, tag->value);
|
||||||
|
|
||||||
printf("[/STREAM]\n");
|
printf("[/STREAM]\n");
|
||||||
fflush(stdout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_format(AVFormatContext *fmt_ctx)
|
static void show_format(AVFormatContext *fmt_ctx)
|
||||||
{
|
{
|
||||||
AVDictionaryEntry *tag = NULL;
|
AVMetadataTag *tag = NULL;
|
||||||
char val_str[128];
|
char val_str[128];
|
||||||
|
|
||||||
printf("[FORMAT]\n");
|
printf("[FORMAT]\n");
|
||||||
@@ -256,28 +221,25 @@ static void show_format(AVFormatContext *fmt_ctx)
|
|||||||
printf("bit_rate=%s\n", value_string(val_str, sizeof(val_str), fmt_ctx->bit_rate,
|
printf("bit_rate=%s\n", value_string(val_str, sizeof(val_str), fmt_ctx->bit_rate,
|
||||||
unit_bit_per_second_str));
|
unit_bit_per_second_str));
|
||||||
|
|
||||||
while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))
|
if (convert_tags)
|
||||||
|
av_metadata_conv(fmt_ctx, NULL, fmt_ctx->iformat->metadata_conv);
|
||||||
|
while ((tag = av_metadata_get(fmt_ctx->metadata, "", tag, AV_METADATA_IGNORE_SUFFIX)))
|
||||||
printf("TAG:%s=%s\n", tag->key, tag->value);
|
printf("TAG:%s=%s\n", tag->key, tag->value);
|
||||||
|
|
||||||
printf("[/FORMAT]\n");
|
printf("[/FORMAT]\n");
|
||||||
fflush(stdout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int open_input_file(AVFormatContext **fmt_ctx_ptr, const char *filename)
|
static int open_input_file(AVFormatContext **fmt_ctx_ptr, const char *filename)
|
||||||
{
|
{
|
||||||
int err, i;
|
int err, i;
|
||||||
AVFormatContext *fmt_ctx = NULL;
|
AVFormatContext *fmt_ctx;
|
||||||
AVDictionaryEntry *t;
|
|
||||||
|
|
||||||
if ((err = avformat_open_input(&fmt_ctx, filename, iformat, &format_opts)) < 0) {
|
fmt_ctx = avformat_alloc_context();
|
||||||
|
|
||||||
|
if ((err = av_open_input_file(&fmt_ctx, filename, iformat, 0, NULL)) < 0) {
|
||||||
print_error(filename, err);
|
print_error(filename, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
if ((t = av_dict_get(format_opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
|
|
||||||
av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key);
|
|
||||||
return AVERROR_OPTION_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* fill the streams in the format context */
|
/* fill the streams in the format context */
|
||||||
if ((err = av_find_stream_info(fmt_ctx)) < 0) {
|
if ((err = av_find_stream_info(fmt_ctx)) < 0) {
|
||||||
@@ -285,7 +247,7 @@ static int open_input_file(AVFormatContext **fmt_ctx_ptr, const char *filename)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
av_dump_format(fmt_ctx, 0, filename, 0);
|
dump_format(fmt_ctx, 0, filename, 0);
|
||||||
|
|
||||||
/* bind a decoder to each input stream */
|
/* bind a decoder to each input stream */
|
||||||
for (i = 0; i < fmt_ctx->nb_streams; i++) {
|
for (i = 0; i < fmt_ctx->nb_streams; i++) {
|
||||||
@@ -293,9 +255,9 @@ static int open_input_file(AVFormatContext **fmt_ctx_ptr, const char *filename)
|
|||||||
AVCodec *codec;
|
AVCodec *codec;
|
||||||
|
|
||||||
if (!(codec = avcodec_find_decoder(stream->codec->codec_id))) {
|
if (!(codec = avcodec_find_decoder(stream->codec->codec_id))) {
|
||||||
fprintf(stderr, "Unsupported codec with id %d for input stream %d\n",
|
fprintf(stderr, "Unsupported codec (id=%d) for input stream %d\n",
|
||||||
stream->codec->codec_id, stream->index);
|
stream->codec->codec_id, stream->index);
|
||||||
} else if (avcodec_open2(stream->codec, codec, NULL) < 0) {
|
} else if (avcodec_open(stream->codec, codec) < 0) {
|
||||||
fprintf(stderr, "Error while opening codec for input stream %d\n",
|
fprintf(stderr, "Error while opening codec for input stream %d\n",
|
||||||
stream->index);
|
stream->index);
|
||||||
}
|
}
|
||||||
@@ -313,9 +275,6 @@ static int probe_file(const char *filename)
|
|||||||
if ((ret = open_input_file(&fmt_ctx, filename)))
|
if ((ret = open_input_file(&fmt_ctx, filename)))
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (do_show_packets)
|
|
||||||
show_packets(fmt_ctx);
|
|
||||||
|
|
||||||
if (do_show_streams)
|
if (do_show_streams)
|
||||||
for (i = 0; i < fmt_ctx->nb_streams; i++)
|
for (i = 0; i < fmt_ctx->nb_streams; i++)
|
||||||
show_stream(fmt_ctx, i);
|
show_stream(fmt_ctx, i);
|
||||||
@@ -334,17 +293,16 @@ static void show_usage(void)
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opt_format(const char *opt, const char *arg)
|
static void opt_format(const char *arg)
|
||||||
{
|
{
|
||||||
iformat = av_find_input_format(arg);
|
iformat = av_find_input_format(arg);
|
||||||
if (!iformat) {
|
if (!iformat) {
|
||||||
fprintf(stderr, "Unknown input format: %s\n", arg);
|
fprintf(stderr, "Unknown input format: %s\n", arg);
|
||||||
return AVERROR(EINVAL);
|
exit(1);
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opt_input_file(const char *opt, const char *arg)
|
static void opt_input_file(const char *arg)
|
||||||
{
|
{
|
||||||
if (input_filename) {
|
if (input_filename) {
|
||||||
fprintf(stderr, "Argument '%s' provided as input filename, but '%s' was already specified.\n",
|
fprintf(stderr, "Argument '%s' provided as input filename, but '%s' was already specified.\n",
|
||||||
@@ -354,31 +312,26 @@ static int opt_input_file(const char *opt, const char *arg)
|
|||||||
if (!strcmp(arg, "-"))
|
if (!strcmp(arg, "-"))
|
||||||
arg = "pipe:";
|
arg = "pipe:";
|
||||||
input_filename = arg;
|
input_filename = arg;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opt_help(const char *opt, const char *arg)
|
static void show_help(void)
|
||||||
{
|
{
|
||||||
av_log_set_callback(log_callback_help);
|
|
||||||
show_usage();
|
show_usage();
|
||||||
show_help_options(options, "Main options:\n", 0, 0);
|
show_help_options(options, "Main options:\n", 0, 0);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
av_opt_show2(avformat_opts, NULL,
|
|
||||||
AV_OPT_FLAG_DECODING_PARAM, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opt_pretty(const char *opt, const char *arg)
|
static void opt_pretty(void)
|
||||||
{
|
{
|
||||||
show_value_unit = 1;
|
show_value_unit = 1;
|
||||||
use_value_prefix = 1;
|
use_value_prefix = 1;
|
||||||
use_byte_value_binary_prefix = 1;
|
use_byte_value_binary_prefix = 1;
|
||||||
use_value_sexagesimal_format = 1;
|
use_value_sexagesimal_format = 1;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const OptionDef options[] = {
|
static const OptionDef options[] = {
|
||||||
#include "cmdutils_common_opts.h"
|
#include "cmdutils_common_opts.h"
|
||||||
|
{ "convert_tags", OPT_BOOL, {(void*)&convert_tags}, "convert tag names to the FFmpeg generic tag names" },
|
||||||
{ "f", HAS_ARG, {(void*)opt_format}, "force format", "format" },
|
{ "f", HAS_ARG, {(void*)opt_format}, "force format", "format" },
|
||||||
{ "unit", OPT_BOOL, {(void*)&show_value_unit}, "show unit of the displayed values" },
|
{ "unit", OPT_BOOL, {(void*)&show_value_unit}, "show unit of the displayed values" },
|
||||||
{ "prefix", OPT_BOOL, {(void*)&use_value_prefix}, "use SI prefixes for the displayed values" },
|
{ "prefix", OPT_BOOL, {(void*)&use_value_prefix}, "use SI prefixes for the displayed values" },
|
||||||
@@ -389,19 +342,13 @@ static const OptionDef options[] = {
|
|||||||
{ "pretty", 0, {(void*)&opt_pretty},
|
{ "pretty", 0, {(void*)&opt_pretty},
|
||||||
"prettify the format of displayed values, make it more human readable" },
|
"prettify the format of displayed values, make it more human readable" },
|
||||||
{ "show_format", OPT_BOOL, {(void*)&do_show_format} , "show format/container info" },
|
{ "show_format", OPT_BOOL, {(void*)&do_show_format} , "show format/container info" },
|
||||||
{ "show_packets", OPT_BOOL, {(void*)&do_show_packets}, "show packets info" },
|
|
||||||
{ "show_streams", OPT_BOOL, {(void*)&do_show_streams}, "show streams info" },
|
{ "show_streams", OPT_BOOL, {(void*)&do_show_streams}, "show streams info" },
|
||||||
{ "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, {(void*)opt_default}, "generic catch all option", "" },
|
|
||||||
{ "i", HAS_ARG, {(void *)opt_input_file}, "read specified file", "input_file"},
|
|
||||||
{ NULL, },
|
{ NULL, },
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
av_register_all();
|
av_register_all();
|
||||||
init_opts();
|
|
||||||
#if CONFIG_AVDEVICE
|
#if CONFIG_AVDEVICE
|
||||||
avdevice_register_all();
|
avdevice_register_all();
|
||||||
#endif
|
#endif
|
||||||
@@ -416,9 +363,5 @@ int main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = probe_file(input_filename);
|
return probe_file(input_filename);
|
||||||
|
|
||||||
av_free(avformat_opts);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
520
ffserver.c
520
ffserver.c
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* RAW muxers
|
* Multiple format streaming server
|
||||||
* Copyright (C) 2007 Aurelien Jacobs <aurel@gnuage.org>
|
* copyright (c) 2002 Fabrice Bellard
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
@@ -18,12 +18,11 @@
|
|||||||
* License along with FFmpeg; if not, write to the Free Software
|
* License along with FFmpeg; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
#ifndef FFMPEG_FFSERVER_H
|
||||||
|
#define FFMPEG_FFSERVER_H
|
||||||
|
|
||||||
#ifndef AVFORMAT_RAWENC_H
|
/* interface between ffserver and modules */
|
||||||
#define AVFORMAT_RAWENC_H
|
|
||||||
|
|
||||||
#include "avformat.h"
|
void ffserver_module_init(void);
|
||||||
|
|
||||||
int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt);
|
#endif /* FFMPEG_FFSERVER_H */
|
||||||
|
|
||||||
#endif /* AVFORMAT_RAWENC_H */
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user