
* master: mmsh: fixed printf injection bug in mmsh request ac3enc: use correct alignment and length in channel coupling dsp functions. ffmpeg: don't abuse a global for passing framerate from input to output ffmpeg: don't abuse a global for passing channels from input to output ffmpeg: don't abuse a global for passing samplerate from input to output Make buffer size check consistent and avoid a possible overflow. Fix spelling. Full support for sending H.264 in RTP ARM: update ff_h264_idct8_add4_neon for 4:4:4 changes swscale: use SwsContext for av_log when available Support reading chan atoms with empty channel descriptions. Reindent after last commit. Fix multi-channel AAC encoding. Fix "redundant redeclaration" warning. Fix compilation with --disable-everything --enable-encoder=ac3/ac3_fixed. vf_mp: Fix large memleak. swscale: Remove HAVE_MMX from files that are only compiled with MMX enabled. swscale: Fix compilation with --disable-mmx2. mjpegenc: Fix JFIF version swscale: remove misplaced comment. ffmpeg: fix streaming to ffserver. swscale: split out RGB48 output functions from yuv2packed[12X]_c(). build: move vpath directives to main Makefile swscale: fix JPEG-range YUV scaling artifacts. build: move ALLFFLIBS to a more logical place ARM: factor some repetitive code into macros CrystalHD: Use mp4toannexb bitstream filter. CrystalHD: Keep mp4toannexb filter around for entire decoder lifetime. Fix SVQ3 after adding 4:4:4 H.264 support H.264: fix CODEC_FLAG_GRAY 4:4:4 H.264 decoding support matroskadec: properly decode color space in an endian neutral way matroskadec: use a temporary fourcc variable matroskaenc: ensure the written colorspace don't depend on host endianness ac3enc: fix allocation of floating point samples. utils: Drop pointless '#if 1' preprocessor directive. ac3enc: remove empty ac3_float function that is never called ac3enc: split templated float vs. fixed functions into a separate file. ac3enc: dynamically allocate AC3EncodeContext fields windowed_samples and mdct ac3enc: use function pointer to choose between AC-3 and E-AC-3 header output functions. Roll back 4:4:4 H.264 for now Needs some ARM/PPC asm modifications. Fix SVQ3 after adding 4:4:4 H.264 support H.264: fix CODEC_FLAG_GRAY 4:4:4 H.264 decoding support h264_parser: Fix whitespace after previous change. h264_parser: Fix behaviour when PARSER_FLAG_COMPLETE_FRAMES is set. wav: remove an invalid free(). lavf: initialise reference_dts in av_estimate_timings_from_pts. h264: don't be so picky on decoding pps in extradata. avcodec.h: add or elaborate on some documentation comments. h264: change a few comments into error messages ac3dec: fix doxy-style for comment ("///>" should be "///<" instead). img2: add .dpx to the list of supported file extensions. ffv1: fix undefined behavior with insane widths. replace remaining usage of deprecated av_metadata_set2() by av_dict_set() matroskaenc: write colourspace element for rawvideo tracks nsv: simplify probe function nsv: return error code instead of discarding it in read_header() ARM: jrevdct_arm: simplify stack usage ARM: jrevdct_arm: use push/pop mnemonics ARM: jrevdct_arm: misc cleanup ARM: optimised mpadsp_apply_window_fixed Add some (important) changelog entries H264: Reduce pointless diffs to qatar Revert "H264: Split out hl_motion and template it, this seems a bit faster" libavfilter: implement avfilter_fill_frame_from_video_buffer_ref() avfiltergraph: make the AVFilterInOut alloc/free API public avfiltergraph: change the syntax of avfilter_graph_parse() graphparser: prefer void * over AVClass * for log contexts h264: Complexify frame num gap shortening code Update todo mpeg12: replace 2 asserts by av_assert0 cmdutils: add missing NULL check in parse_options() x11grab: remove a memory allocation and the associated memcpy. Fix --disable-everything build: fix "make install" with documentation disabled build: simplify some conditional targets resample: clarify supported resampling. lavfi: fix signature for avfilter_graph_parse() and avfilter_graph_config() avfiltergraph: use meaningful error codes Revert "ac3: there was no libav in 2010 thus this code cannot be from libav." Fix -t option for formats which holds dts and no pts dnxhd: Renama tables Extract rotation in MOV metadata bitstream: Properly promote av_reverse values before shifting. pixfmt: Replace 9/10bit deprecation by a technical explanation. libavutil/swscale: YUV444P10/YUV444P9 support. H.264: Fix high bit depth explicit biweight h264: Fix 10-bit H.264 x86 chroma v loopfilter asm. Replace DEBUG_SEEK/DEBUG_SI + av_log combinations by av_dlog. Update copyright year for ac3enc_opts_template.c. adts: Adjust frame size mask to follow the specification. APIchanges: fill hash for the avfilter_get_audio_buffer_ref_from_arrays addition lavfi: avfilter_merge_formats: handle case where inputs are same lavfi: use avfilter_get_audio_buffer_ref_from_arrays() in defaults.c lavfi: implement avfilter_get_audio_buffer_ref_from_arrays() APIchanges: remove duplicated entry APIchanges: fill in dates and numbers APIchanges: remove duplicated entry APIchanges: correctly interleave entries APIchanges: add entry for av_force_cpu_flags() addition lavf: bump minor after the addition of fps_probe_size to AVFormatContext lavc: bump minor after the addition of AVCodecContext.request_sample_fmt movenc: Add RTP muxer/hinter options movenc: Pass the RTP AVFormatContext to the SDP generation rtspenc: Add RTP muxer options rtspenc: Add an AVClass for setting muxer specific options rtpenc_chain: Pass the rtpflags options through to the chained muxer rtpenc: Declare the rtp flags private AVOptions in rtpenc.h sdp: Reindent after the previous commit rtpenc: MP4A-LATM payload support avoptions: Add an av_opt_flag_is_set function for inspecting flag fields sdp: Allow passing an AVFormatContext to the SDP generation mov: Fix wrong timestamp generation for fragmented movies that have time offset caused by the first edit list entry. mpeg12: more advanced ffmpeg mpeg2 aspect guessing code. ac3: there was no libav in 2010 thus this code cannot be from libav. swscale: split YUYV output out of yuv2packed[12X]_c(). dict: This code was developed in ffmpeg and not libav, nor by libav developers. Correct copyright notices. lavf: make compute_pkt_fields2() return meaningful error values matroskadec: set timestamps for RealAudio packets. intelh263dec: aspect ratio processing fix. intelh263dec: fix "Strict H.263 compliance" file playback oss,sndio: simplify by using FFMIN. swscale: extract monowhite/black output from yuv2packed[12X]_c(). swscale: de-macro'ify RGB15/16/32 input functions. swscale: rearrange code. movdec: Add support for the 'wfex' atom. ffmpeg.c: Add a necessary const qualifier riff: Fix potential memleak. swscale: change 48bit RGB input macros to inline functions. swscale: change 9/10bit YUV input macros to inline functions. swscale: extract gray16 output functions from yuv2packed[12X](). swscale: use standard clipping functions. swscale: merge macros that are used only once. swscale: fix function declarations in swscale.c. swscale: fix function declaration keywords in x86/swscale_template.c. jpegdec: actually search for and parse RSTn crypto: Use av_freep instead of av_free Revert "crypto: fix potential double free" Revert "build: remove empty $(OBJS) target" crypto: Use av_freep instead of av_free aac: fix adts frame size mask, fix demuxer probing for some files. lavf: don't try to free private options if priv_data is NULL. lavfi: handle NULL lists in avfilter_make_format_list swscale: fix types of assembly arguments. swscale: move two macros that are only used once into caller. swscale: remove unused function. Fix "mixed declarations and code" warnings. options: Add missing braces around struct initializer. mov: Remove leftover crufty debug statement with references to a local file. dvbsubdec: Fix compilation of debug code. Remove all uses of now deprecated metadata functions. Move metadata API from lavf to lavu. crypto: fix potential double free libx264: fix double free ffplay: remove -debug option ffplay: remove -vismv option mpegvideo: use av_get_picture_type_char() in ff_print_debug_info() Remove some non-compiling debug messages. ffplay: Fix non-compiling debug printf and replace it by av_dlog. H264: x86 predict init cosmetics. ac3enc: Fix linking of AC-3 encoder without the E-AC-3 encoder. Move E-AC-3 encoder functions to a separate eac3enc.c file. ac3enc: remove convenience macro, #define DEBUG ac3enc: remove unused #define vc1: re-initialize tables after width/height change. APIchanges: fill-in git commit hash for av_get_bytes_per_sample() addition samplefmt: add av_get_bytes_per_sample() libvpxenc: add forgotten AVClass. iirfilter: fix biquad filter coefficients. swscale: remove duplicate conversion routine in swScale(). swscale: add yuv2planar/packed function typedefs. swscale: integrate yuv2nv12X_C into yuv2yuvX() function pointers. swscale: reindent x86 init code. swscale: extract SWS_FULL_CHR_H_INT conditional into init code. swscale: cosmetics. swscale: remove alp/chr/lumSrcOffset. swscale: un-special-case yuv2yuvX16_c(). shorten: Remove stray DEBUG #define and corresponding av_dlog statement. vorbisdec: Restore mistakenly removed debug output. v4l2: set default standard to NULL sws: make dither_scale const configure: Document --enable-vdpau. Replace some av_log/printf + #ifdef combinations by av_dlog. Replace some nonstandard DEBUG_* preprocessor directives by plain DEBUG. svq1dec: Fix debug statements that referenced non-existing context. Replace some printf instances in debug code by av_log. showfiltfmts: use av_get_pix_fmt_name() inverse.c: Replace unnecessary intmath.h header by necessary stdint.h. Drop unnecessary directory prefixes from #include directives. Makefile: critical build fix after the merge. make fate passed locally due to ffmpeg/ffmpeg_g being there from before ffplay: Fix -vismv mem: Trying to workaround posix_memalign() bug on OSX build: remove empty $(OBJS) target build: make rule for linking ff* apply only to these targets eval: add support for pow() function build: rearrange some lines in a more logical way s302m: fix resampling for 16 and 24bits. ARM: remove MUL64 and MAC64 inline asm build: clean up .PHONY lists build: move all (un)install* target aliases to toplevel Makefile flvenc: propagate error properly build: remove stale dependency build: do not add CFLAGS-yes to CFLAGS utils.c: fix crash with threading enabled. configure: simplify source_path setup configure: remove --source-path option pixdesc: remove duplicated header inclusion lavfi: use av_samples_alloc() in avfilter_default_get_audio_buffer() lavfi: prefer nb_samples over size in AVFilterBufferRefAudioProps samplefmt: switch nb_channels/nb_samples params order in av_samples_alloc() samplefmt: change layout for arrays created by av_samples_alloc() and _fill_arrays() lavf: deprecate AVFormatParameters.time_base. img2: add framerate private option. img2: add video_size private option. img2: add pixel_format private option. tty: add framerate private option. Move code for "ffmpeg: fix massive leak occurring when seeking" /e4841a404b
elsewhere lavf: remove reference to output-example in Makefile vsrc_buffer: add flags param to av_vsrc_buffer_add_video_buffer_ref Remove some unused scripts from tools/. Add x86 assembly for some 10-bit H.264 intra predict functions. v4l2: do not force NTSC as standard Add const to avfilter_get_video_buffer_ref_from_arrays arguments. Skip tableprint.h during 'make checkheaders'. Remove unnecessary LIBAVFORMAT_BUILD #ifdef. Drop explicit filenames from @file Doxygen tags. Skip generated table headers during 'make checkheaders'. lavf,lavc: free avoptions in a generic way. AVOptions: add av_opt_free convenience function. sdl: align option fields after last commit ffmpeg: fix massive leak occurring when seeking ffprobe: implement -i FILE option tableprint: Restore mistakenly deleted common.h #include for FF_ARRAY_ELEMS. ffplay.texi: document -i FILE option cmdutils: remove unnecessary OPT_DUMMY implementation cmdutils: change the signature of the function argument in parse_options() sdl: use the filename for defining the window title, if not specified tiff: print log in case of unknown / unsupported tag. tiff: fix linesize for mono-white/black formats. Fix build of eval-test program configure: Document --enable-vaapi swscale: override the lack of the accurate rounding flag when needed for dither. swscale: factor should_dither out ac3enc: extract all exponents for the frame at once ARM: remove MULL inline asm mathops: use MUL64 macro where it forms part of other ops tty: factorise returning error codes. rawdec: add framerate private option. x11grab: add framerate private option. fbdev,v4l2: remove some forgotten uses of AVFormatParameters.time_base. bktr: don't error when AVFormatParameters.time_base isn't set. cmdutils: add missing const qualifier Skip headers not designed to work standalone during 'make checkheaders'. Add missing #includes to make headers self-contained. musepack: remove unnecessary #include from mpcdata.h musepack: remove extraneous mpcdata.h inclusions Fix error check in av_file_map() udp: support old, crappy non pthread mode ffmpeg: use opt_acodec when setting audio codec in opt_target. ffmpeg: fix segfault with too many output files ffplay: error out with invalid sample rate or channels. oggdec: fix Ticket185 build: simplify commands for clean target j2kdec: dont fail on non zero cblock style. makefile: fix j2k encoder dependancies udp: fix indention swscale: split swscale.c in unscaled and generic conversion routines. swscale: cosmetics. swscale: integrate (literally) swscale_template.c in swscale.c. swscale: split out x86/swscale_template.c from swscale.c. swscale: enable hScale_altivec_real. swscale: split out ppc _template.c files from main swscale.c. swscale: remove indirections in ppc/swscale_template.c. swscale: split out unscaled altivec YUV converters in their own file. mpegvideoenc: fix multislice fate tests with threading disabled. cmdutils: move "#undef main" from ffplay.c to cmdutils.h wav: update size check for ds64 wav: fix skip size at end of ds64 chunk mpegts: Wrap #ifdef DEBUG and av_hex_dump_log() combination in a macro. build: Simplify texi2html invocation through the --output option. Mark some variables with av_unused Replace avcodec_get_pix_fmt_name() by av_get_pix_fmt_name(). svq3: Check negative mb_type to fix potential crash. svq3: Move svq3-specific fields to their own context. rawdec: initialize return value to 0. Remove unused get_psnr() prototype rawdec: don't leak option strings. bktr: get default framerate from video standard. swscale: remove unused COMPILE_TEMPLATE_ALTIVEC. h264 fill_filter_caches: Dont init chroma nnz_cache. In print_report, print progression time in hours:mins:secs:us ffmpeg: In print_report, use int64_t for pts to check for 0 and avoid inf value for bitrate. In libswscale, use all lines when converting from 422p to rgb with mmx, improve quality. Replace custom DEBUG preprocessor trickery by the standard one. vorbis: Remove non-compiling debug statement. vorbis: Remove pointless DEBUG #ifdef around debug output macros. cook: Remove non-compiling debug output. Remove pointless #ifdefs around function declarations in a header. Replace #ifdef + av_log() combinations by av_dlog(). Replace custom debug output functions by av_dlog(). cook: Remove unused debug functions. lavfi: add avfilter_link_free() function swscale: reintroduce sws_format_name() symbol Remove stray extra arguments from av_dlog() invocations. targa: fix big-endian build v4l2: remove one forgotten use of AVFormatParameters.pix_fmt. vfwcap: add a framerate private option. v4l2: add a framerate private option. libdc1394: add a framerate private option. fbdev: add a framerate private option. bktr: add a framerate private option. oma: check avio_read() return value nutdec: remove unused variable Remove unused variables swscale: dither for planar yuv outputs swscale: Fix use of uninitialized values (bug probably introduced from a marge of libav) cpudetect: add av_force_cpu_flags() swscale: allocate larger buffer to handle altivec overreads. H264/MPEG frame-level multi-threading. vsrc_buffer: propagate error code in av_vsrc_buffer_add_frame() lavfi: reindent after the previous commit lavfi: add braces around the block of an if() expression in avfilter_default_get_video_buffer lavfi: clarify the context of a comment in avfilter_default_get_video_buffer() lavfi: apply misc style fixes Cosmetic changes to h264_idct_10bit.asm. 2x faster h264_idct_add8_10. aacenc: Add stereo_mode option. h264: remove CONFIG_GPL from x86 intra prediction code. doc: cosmetics: libx264 typos postprocess: Remove test for impossible condition (was: Re: postprocess.c: replace check for p==NULL with *p==0) Fix various uninitialized variable warnings Port remove of get_sws_cpuflags from MPlayer's libmpcodecs. Replace "vector const" by "const vector" otherwise gcc 4.6.0 fails. Port recent changes to MPlayer libmpcodecs. Replace non-existent HAVE_SSE2 with HAVE_SSE. Simplify code and avoid compiler warning about incompatible types. Fix type of out[] variable, it should not be const. ARM: ac3dsp: optimised update_bap_counts() mpegaudiodec: Fix av_dlog() invocation. swscale: fix compilation of bfin due to missing pixdesc.h header lavf: tag dump_format() as @deprecated yuv4mpeg: complain and exit if a non-rawvideo stream is selected ffmpeg: handle copy of packets for AVFMT_RAWPICTURE output formats doc/examples: give meaningful names to the example files h264/10bit: add HAVE_ALIGNED_STACK checks. swscale: More accurate rounding in YSCALE_YUV_2_PACKEDX_FULL_C() Update 8-bit H.264 IDCT function names to reflect bit-depth. Add IDCT functions for 10-bit H.264. mpegaudioenc: Fix broken av_dlog statement. Employ correct printf format specifiers, mostly in debug output. ARM: fix MUL64 inline asm for pre-armv6 doc: add libvpx encoder section vf_drawtext: Replace FFmpeg by Libav in license boilerplate. mpegaudiodec: remove unusued code and variables postprocess.c: filter name needs to be double 0 terminated improved 'edts' atom writing support mpegaudio: clean up compute_antialias() definition vp8: fix segmentation race during frame-threading. Port libmpcodec fixes from MPlayer. Merge remote-tracking branch 'ffmpeg-mt/master' swscale: Remove unused variable. ARM: simplify inline asm with 64-bit operands Add "const" to avoid "initialization discards qualifiers" warning. Add const to fix "cast discards qualifiers" warnings. Include pixdesc.h for av_get_pix_fmt_name. wav: Don't avio_seek() if we know we'll run into EOF api-example: uppercase first letter in "copyright" output-example: create @file doxy from text in the copyright header examples: move API examples to a dedicated dir in doc ffmpeg: simplify opt_*_codec() options v4l2: rewrite code iterating the supported standards v4l2: perform minor style fixes v4l2: replace memset() with explicit struct initialization rawdec: fail in case of unknow pixel format swscale: remove sws_format_name() error.c: fix compile flags TCP: change default timeout to 5sec Revert "Timeout TCP open() after 5 seconds." Fix various unused variable warnings Fix various bad printf format warnings ARM: enable UAL syntax in asm.S Remove now unused nb_istreams variable. Add const to vector types for input in altivec code. Remove unused variable, avoiding compiler warning. Cast pointers to uintptr_t rather than unsigned int. v4l2: don't leak video standard string on error. swscale: Remove disabled code. avfilter: Surround function only used in debug mode by appropriate #ifdef. vf_crop: Replace #ifdef DEBUG + av_log() by av_dlog(). build: remove BUILD_ROOT variable vp8: use av_clip_uintp2() where possible swscale: Commits that could not be pulled earlier due to bugs #2 Commits that could not be pulled earlier due to bugs. Revert1a5e4fd8c5
for postproc. This broke the code doc: correct AC-3 option subsection placement ac3enc: fix LOCAL_ALIGNED usage in count_mantissa_bits() ac3dsp: do not use the ff_* prefix when referencing ff_ac3_bap_bits. swscale: use av_clip_uint8() in yuv2yuv1_c(). swscale: replace formatConvBuffer[VOF] by allocated array. v4l2: create file @doxy from text in the copyright header v4l2: remove pointless empty lines v4l2: set default standard to NULL v4l2: use OFFSET macro when setting options ac3dsp: fix loop condition in ac3_update_bap_counts_c() ARM: unbreak build lavdev: add SDL output device ac3enc: modify mantissa bit counting to keep bap counts for all values of bap instead of just 0 to 4. ac3enc: split mantissa bit counting into a separate function. ac3enc: store per-block/channel bap pointers by reference block in a 2D array rather than in the AC3Block struct. lavu: add av_get_pix_fmt_name() convenience function iff: remove duplicated file description cmdutils: remove OPT_FUNC2 get_bits: add av_unused tag to cache variable sws: replace all long with int. ARM: aacdec: fix constraints on inline asm ARM: remove unnecessary volatile from inline asm ARM: add "cc" clobbers to inline asm where needed ARM: improve FASTDIV asm ac3enc: use LOCAL_ALIGNED macro APIchanges: fill in git hash for av_get_pix_fmt_name (0420bd7). lavu: add av_get_pix_fmt_name() convenience function cmdutils: remove OPT_FUNC2 swscale: fix crash in bilinear scaling. vpxenc: add VP8E_SET_STATIC_THRESHOLD mapping webm: support stereo videos in matroska/webm muxer rgb2rgb: remove duplicate mmx/mmx2/3dnow/sse2 functions. swscale: reindent h[cy]scale_fast() and updateDitherTables(). swscale: reformat x86/swscale_template.c. swscale: remove duplicate mmx/mmx2 functions if they are identical. swscale: remove if (c->dstFormat) branch from yuv2packed[12X](). swscale: remove if(full_chr_int) from yuv2packed1(). swscale: remove if(accurate_rnd) branch from functions. swscale: revive SWS_CPU_CAPS until next major bump. swscale: Remove commented-out printf cruft. Export PCR pid Export more transport stream information. Output MPEG-TS stream identifiers. lavf: deprecate AVFormatParameters.pix_fmt. rawdec: add a pixel_format private option. v4l2: add a pixel_format private option. libdc1394: add a pixel_format private option. cosmetics: indentation and alignment after previous commit ac3enc: add support for E-AC-3 encoding. ac3enc: Move AC-3 AVOptions array to a separate file to make it easier to use only selected options for the different AC-3 encoder types. ARM: disable ff_vector_fmul_vfp on VFPv3 systems ARM: check for VFPv3 swscale: Remove unused variables in x86 code. doc: Drop DJGPP section, Libav now compiles out-of-the-box on FreeDOS. x86: Add appropriate ifdefs around certain AVX functions. cmdutils: use sws_freeContext() instead of av_freep(). swscale: delay allocation of formatConvBuffer(). swscale: fix build with --disable-swscale-alpha. movenc: Deprecate the global RTP hinting flag, use a private AVOption instead movenc: Add an AVClass for setting muxer specific options libdc1394: choose best video mode and rate based on camera capabilities. Remove support for libdc1394 < 2.0. avopt: fix segfault swscale: fix non-bitexact yuv2yuv[X2]() MMX/MMX2 functions. swscale: dont loose precission on RGB/BGR48 input, that is dont drop half the bits. patch checklist: suggest --disable-yasm test. lavdev: prefer the inclusion of avdevice.h over that of libavformat/avformat.h lavdev: include libavformat/avformat.h in avdevice.h fate.txt: replace FATE rsync command with a make command configure: report yasm/nasm presence properly tcp: make connect() timeout properly rawdec: factor video demuxer definitions into a macro. rtspdec: add initial_pause private option. lavf: deprecate AVFormatParameters.width/height. tty: add video_size private option. rawdec: add video_size private option. x11grab: add video_size private option. x11grab: factorize returning error codes. vfwcap: add video_size private option. v4l2: add video_size private option. v4l2: factorize returning error codes. libdc1394: add video_size private option. libdc1394: return meaninful error codes. bktr: add video_size private option. bktr: factorize returning error codes. Fix memleak Fix typo Remove specific note when not specific Minor cleanup in libx264.c Add metadata conversion table to the wav demuxer Fix 32bit rawvideo in avi on big-endian. id3v2: Check malloc result. ID3v2 tags can be very large. id3v2: Initialize tflags for version 2.2. webm: Additional options/presets for VP8 encodes under FFmpeg muxers: Add a flag to mark muxers that allow (non strict) monotone timestamps. swscale: Do not loose precission on yuv values after rgb->yuv. libx264: support aspect Ratio Switch ARM: add ARMv6 optimised av_clip_uintp2 ARM: remove volatile from asm statements in libavutil/intmath ARM: fix av_clipl_int32_arm() v4l: include avdevice.h ffserver: move close_connection() call to avoid a temporary string and copy. lavf: initialize demuxer private options. AVOptions: set string default values. Fix compilation with YASM/NASM versions not supporting AVX. lavdevice: mark v4l for removal on next major bump. swscale: fix compile on ppc. swscale: fix compile on x86-32. build: Remove generated .version file on distclean. configure: Add -D_GNU_SOURCE to CPPFLAGS on OS/2. doc: Drop hint at --enable-memalign-hack for MinGW, it is now autodetected. ffplay: Remove disabled code. Mark parameterless function declarations as 'void'. swscale: use av_clip_uint8() in yuv2yuv1_c(). swscale: remove VOF/VOFW. swscale: split chroma buffers into separate U/V planes. swscale: replace formatConvBuffer[VOF] by allocated array. rgb2rgb: remove duplicate mmx/mmx2/3dnow/sse2 functions. swscale: reindent h[cy]scale_fast() and updateDitherTables(). swscale: reformat x86/swscale_template.c. swscale: remove duplicate mmx/mmx2 functions if they are identical. swscale: remove if (c->dstFormat) branch from yuv2packed[12X](). swscale: remove if(full_chr_int) from yuv2packed1(). swscale: remove if(accurate_rnd) branch from functions. ffserver: Fix a null pointer dereference as a result of the FF_API_MAX_STREAMS cleanup. libdc1394: fix compilation. swscale: revive SWS_CPU_CAPS until next major bump. swscale: Remove commented-out printf cruft. ac3enc: initialize all coefficients to zero. ffv1: fix 16bits multithreading doc: create separate section for audio encoders swscale: Remove orphaned, commented-out function declaration. swscale: Eliminate rgb24toyv12_c() duplication. mpegvideo_enc: use AV_LOG_ERROR instead of AV_LOG_INFO for two error messages Fail when lowres value is lower than 0 Remove h263_msmpeg4 from MpegEncContext. APIchanges: Fill in git hash for fps_probe_size (30315a8
) avformat: Add fpsprobesize as an AVOption. swscale: document SWS_CPU_CAPS* Revert removial of SWS flags frome66149e714
avoptions: Return explicitly NAN or {0,0} if the option isn't found rtmp: Reindent rtmp: Don't try to do av_malloc(0) swscale: remove duplicatiopn of rgb24toyv12_c() Return -1 on invalid input instead of crashing. vf_mp: fix name of the remove-logo filter referenced in filters.texi tty: replace AVFormatParameters.sample_rate abuse with a private option. Fix end time of last chapter in compute_chapters_end ffmpeg: get rid of useless AVInputStream.nb_streams. ffmpeg: simplify managing input files and streams ffmpeg: purge redundant AVInputStream.index. lavf: deprecate AVFormatParameters.channel. libdc1394: add a private option for channel. dv1394: add a private option for channel. v4l2: reindent. v4l2: add a private option for channel. lavf: deprecate AVFormatParameters.standard. v4l2: add a private option for video standard. v4l: add a private option for video standard. dv1394: add a private option for video standard. bktr: add a private option for video standard. lavf: deprecate AVFormatParameters.{channels,sample_rate}. rawdec: add sample_rate/channels private options. ALSA: add channels and sample_rate private options. oss: add channels and sample_rate private options. sndio: add channels and sample_rate private options. lavf: deprecate AVFormatParameters.mpeg2ts_raw. mpegts: add compute_pcr option. lavf: add priv_class field to AVInputFormat. lavfi: add select filter eval: implement not() expression vsrc_buffer: return an error code if no frames are available ffmpeg: handle the case when get_filtered_frame() fails indeo3: add out-of-buffer write check Add reading of disc number to mov.c Fix end time of last chapter in compute_chapters_end(). Do not reset channel_layout to 0. vsrc_buffer: remove duplicated file description Merge swscale bloatup This will be cleaned up in the next merge swscale: MMX optim of hscale16() swscale: dont loose bits on planar >8bit yuv ind gray nput. swscale: Switch to ronalds yuv2yuvX16inC_template() its very similar to baptsites and supports alpha configure: enable memalign_hack automatically when needed rawdec: fix decoding of QT WRAW files matroska: improve declaration of video_stereo_* constant tables matroskadec: fix reverted condition to accept combine_plane operation Fix register types for LOAD_AB arguments, fixes compilation with NASM. swscale: unbreak the build on non-x86 systems. swscale: remove if(bitexact) branch from functions. swscale: remove if(canMMX2BeUsed) conditional. swscale: remove swScale_{c,MMX,MMX2} duplication. swscale: use emms_c(). Move emms_c() from libavcodec to libavutil. tiff: set palette in the context when specified in TIFF_PAL tag rtsp: use strtoul to parse rtptime and seq values. pgssubdec: fix incorrect colors. dvdsubdec: fix incorrect colors. ape: Allow demuxing of files with metadata tags. swscale: remove dead macro WRITEBGR24OLD. swscale: remove AMD3DNOW "optimizations". swscale: remove duplicate code in ppc/ subdirectory. swscale: remove duplicated x86/ functions. swscale: force --enable-runtime-cpudetect and remove SWS_CPU_CAPS_*. vsrc_buffer.h: add file doxy vsrc_buffer: tweak error message in init() wav: fix various printf warnings related to wrong argument type wav: propagate ff_get_wav_header() error code in w64_read_header() msmpeg4: reindent. lavc: remove msmpeg4v1 encoder. Remove avconfig.h and INCINSTDIRs on uninstall. ac3enc: add channel coupling support partial revert of01d3ebaf21
fate: reenable frext-pph10i4_panasonic_a after the bitstream has been fixed avcodec_find_decoder: prefer non experimental decoders. j2kdec: mark as CODEC_CAP_EXPERIMENTAL j2k[c/h] j2kdec.c: Implement 2 code block styles j2k: Add void as the parameter of function ff_j2k_init_tier1_luts Add Kamil Nowosads j2k code. matroska: cleanup handling of video stereo mode oggdec: use av_dlog() mem: define the MAX_MALLOC_SIZE constant and use it in place of INT_MAX configure: Add -U__STRICT_ANSI__ to CPPFLAGS on Cygwin and DOS. muxers.texi changes for mkv/webm options aacdec: fix typo in scalefactor clipping check mpegaudio: Correct license header add 5.1 to stereo downmix to resample.c this is based on previous 6to2channel-resample.patch from ffmpeg2theora but updated to work with trunk and using av_clip_int16. fate: fix fate-h264-conformance-frext-pph10i4-panasonic-a crcs. fate: update 9/10bit refs. h264: Properly set coded_{width, height} when parsing H.264. x86 asm: Add SECTION_TEXT to dct32_sse.asm. Fix 9/10 bit in swscale. Do not ask for samples if a specific channel layout was requested. libx264: specify field for default union values in options movdec: dont divide by zero when stts_data[0].duration = 0. Fix ticket127 dct32: Replacing libav by ffmpeg in the license header with the authors permission. Signed-off-by: Michael Niedermayer <michaelni@gmx.at> ffmpeg: Don't trigger url_interrupt_cb on the first signal avoptions: Check the return value from av_get_number lavf: fix style for avformat_alloc_output_context2() lavf: deprecate avformat_alloc_output_context() in favor of avformat_alloc_output_context2() lavfi: make vsrc_buffer.h header public dct32_sse: eliminate some spills Fix compilation with --disable-yasm. Fix dct32() compilation with --disable-yasm mpeg2dec: Fix lowres 3 lavfi: bump minor and add changelog entry after the split filter addition vf_split: add documentation to filters.texi vf_split: give more meaningful names to the output pads vf_split: define draw_slice() before end_frame() vf_split: add description vf_split: fix various nits wmadec: avoid infinit loop. DirectShow capture: Fix build ffmpeg: get rid of the -vglobal option. dct32: Add AVX implementation of 32-point DCT dct32: Change pass 6 permutation to allow for AVX implementation dct32: port SSE 32-point DCT to YASM matroska: switch stereo mode from int to string and add support in the demuxer too matroska: cosmetics Create a stereo_mode metadata tag to specify the stereo 3d video layout using the StereoMode tag in a matroska/webm video track. libavfilter: vf_split from soc. DirectShow capture support Signed-off-by: Michael Niedermayer <michaelni@gmx.at> multiple inclusion guard cleanup avio: document buffer must created with av_malloc() and friends avio: check AVIOContext malloc failure swscale: point out an alternative to sws_getContext svq3: Do initialization after parsing the extradata Fix channel_layout documentation. add changelog entries for 0.7_beta2 ffserver: dont just crash fix ffserver's SIGSEGV avoptions: Support getting flag values using av_get_int preset dir for win32 Merge remote-tracking branch 'ffmpeg-mt/master' Add a flag to disable side data merging. Merge/split side data. Encoding alac with more than two channels is not supported. mp3lame: add #include required for AV_RB32 macro. configure: make executable again LATM/AAC: Free previously initialized context on reinit. configure: Do not unconditionally add -Wall to host CFLAGS. configure: Set OS/2 objformat to a.out. Add support for a.out object format to assembler macros. fate: disable threading for encoding fate: add comment field fate: allow overriding default build and install dirs mpegtsenc: Add an AVClass pointer to the private data mpegaudio: clean up #includes mpegaudio: move all header parsing to mpegaudiodecheader.[ch] vf_libopencv: prefer opencv/cxcore.h over cxtypes.h decoders.texi: fix typos in rawvideo section cmdutils: use const AVClass * when senseful encoders.texi: add documentation for the libx264 encoder decoders.texi: add documentation for rawvideo decoder and options doc: add decoders.texi file encoders.texi: decrease level for audio encoders section ffprobe.texi: remove inclusion of muxers section indeo3: release buffer in indeo3_decode_end() indeo3: remove unnecessary includes indeo3: add @file doxy and a link to multimedia wiki documentation cmdutils: reset *picref_ptr to NULL in get_filtered_frame() ffmpeg: remove useless NULL-check on avfilter_unref_buffer libmp3lame: include "libavutil/intreadwrite.h" header qdm2: Use floating point synthesis filter. h264: correct border check. h264: fix loopfilter with threading at slice boundaries. Fix ff_mpa_synth_filter_fixed() prototype Reindent rtpenc_chain: Pass the MP4A_LATM flag to chained muxers rtpenc: MP4A-LATM payload support movenc: Pass AVFormatContext flags to the SDP generation sdp: Allow passing AVFormatContext flags to the SDP generation vsrc_buffer: document av_vsrc_buffer_add_video_buffer_ref() vsrc_buffer: add av_vsrc_buffer_add_frame() vsrc_buffer: fix example in docs, add mandatory parameters vsrc_buffer: make the source accept sws_param in init vsrc_buffer: propagate avfilter_open() error code vsrc_buffer: fix style lavfi: add avfilter_get_video_buffer_ref_from_frame to avcodec.h vsrc_buffer: remove dependency on AVFrame Rename costablegen.c ---> cos_tablegen.c. Collapse tableprint.c into tableprint.h. Simplify trig table rules Remove potentially unstable filenames from comments in generated files. Ignore generated tables and generated table generator programs. Simplify CLEANFILES make variable by using wildcards. Remove silly insults from avformat_version() Doxygen documentation. mpegaudiodsp: fix x86 and ppc makefiles configure: Adjust AVX assembler check. mpegaudio: remove unused version of SAME_HEADER_MASK mpegaudio: remove useless #undef at end of file asfdec: add missing #include for av_bswap32() mpegaudio: merge two #if CONFIG_FLOAT blocks mpegaudio: move some struct definitions from mpegaudio.h Move some mpegaudio functions to new mpegaudiodsp subsystem Clean up #includes in cmdutils.h. g729: Merge g729.h into g729dec.c. av_find_stream_info: Print more details about max anaylize duration failures. 10l: wrap float_interleave functions in HAVE_YASM. Add little description for -rc_override APIchanges: fill in date and commit for request_sample_fmt Add floating-point sample format support to the ac3, eac3, dca, aac, and vorbis decoders. Add support for request_sample_format in ffmpeg and ffplay. Add APIchanges entry for request_sample_fmt. Add request_sample_fmt field to AVCodecContext. Add float_interleave() to FmtConvertContext with x86-optimized versions. Remove unused make variable SEEK_REFFILE fate: remove redundant aref and vref references Parse 'bext' metadata in the wav demuxer Cosmetics: indent Keep parsing wav until EOF if the input is seekable and we know the size of the data tag Refactor the tag checking into a switch statement Use avio_tell() instead of url_ftell() add x264opts entry to docs cleaned up the udp.c, removed some variables and an av_log configure: favor pkg_config over sdl_config libx264: support passing arbitrary parameters. ffmpeg: dont show_banner() on verbose<0 fate: remove do_ffmpeg_nocheck function fate: do not collect -benchmark output mpegaudiodec: remove decode_end() function fate: run aref and vref as regular tests mpegaudio: sanitise compute_antialias_* names mpeg12: add slice-threading checks to slice-threading initializers. h264: copy pixel_shift between slice threading contexts. mdec: enable frame-level multithreading. mdec.c: fix overread. id3v2: prevent unsigned integer overflow in ff_id3v2_parse() id3v2: add @file doxy and link to format documentation configure: opensolaris install is not compatible with ffmpeg, allow overriding it. Fix compilation of iirfilter-test. eval: opensolaris strtod() cannot handle 0x1234 libx264: handle closed GOP codec flag lavf: remove duplicate assignment in avformat_alloc_context. lavf: use designated initializers for AVClasses. Make sure neither data_size nor sample_count is negative Refactor the 'fmt ' tag search and parsing flvdec: clenup debug code asfdec: fix possible overread on broken files. asfdec: do not fall back to binary/generic search asfdec: reindent after previous commitc7bd5ed
asfdec: fallback to binary search internally mpegaudio: add _fixed suffix to some names Modify x86util.asm to ease transitioning to 10-bit H.264 assembly. ffmpeg: reset top_field_first in opt_input_file(). dct: build dct32 as separate object files qdm2: include correct header for rdft Ogg demuxer: give meaningful error codes and warnings. update changelog with 9/10 bit H264 and FFV1 changes Add some forgotten const to function arguments in libavfilter & libavformat. Write channel_layout for multichannel aif files. Fix ff_mov_write_chan() so it can be used by other muxers. Fix some mov files with little endian audio (tickets 201 - 203). iff/8svx: redesign 8SVX demuxing and decoding for handling stereo samples correctly iff: compact code setting metadata tags iff: fix bitrate computation for compressed audio stream iff: distinguish fields for audio and video compression imgutils: introduce internal image_get_linesize() and use it imgutils: make av_image_get_linesize() return AVERROR(EINVAL) for invalid pixel formats drawtext: specify union type for setting default options drawtext: reindent after the previous commit drawtext: fix strftime() text expansion ffmpeg: fix -aspect cli option Restructure video filter implementation in ffmpeg.c. ffplay: remove audio_write_get_buf_size() forward declaration lavfi: print key-frame and picture type information in ff_dlog_ref() mathops: remove ancient confusing comment rawdec: Allow overriding top field first. ffmpeg: initialize input_codec array earlier. cmdutils: Allocate private decoder context if its not allocated yet. cws2fws: Improve error message wording. tools: Check the return value of write(). mpegaudio: move OUT_FMT macro to mpegaudiodec.c mpegaudio: remove OUT_MIN/MAX macros Add missing #includes to mp3_header_(de)compress bsf dct: fix indentation dct: bypass table allocation for DCT_II of size 32 pngdec: relax condition for setting monoblack pixel format h264dsp_mmx: Add #ifdefs around some mmxext functions on x86_64. Remove unused header mpegaudio3.h. Support decoding of 1bpp rawvideo in avi (ticket 205). Support decoding of 2bpp rawvideo in avi (ticket 206). Bump minor after adding a caf muxer. configure: another try on fixing osx/mingw SDL aacdec: Use float instead of int16_t for ltp_state to avoid needless rounding. av_picture_crop(): Support simple cases with packed pixels too. acelp: Remove unused gray_decode table. dfa: Remove unused variable. configure: Include AVX availability in summary output. rawdec: propagate pict_type information to the output frame showinfo: replace "CRC" by "checksum" showinfo: fix vertical align nit showinfo: fix computation of Adler checksum imgutils: generalize linesize computation for bitstream formats configure: use same CPPFLAGS in kFreeBSD as Linux Conflicts: ffserver.c libavcodec/avcodec.h libavcodec/opt.h libavcodec/version.h libavdevice/avdevice.h libavfilter/avfilter.h libavformat/avformat.h libavformat/metadata.c libavformat/metadata.h libavformat/utils.c libavformat/version.h libavutil/avutil.h libavutil/mem.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
1660 lines
59 KiB
C
1660 lines
59 KiB
C
/*
|
|
* copyright (c) 2001 Fabrice Bellard
|
|
*
|
|
* This file is part of FFmpeg.
|
|
*
|
|
* FFmpeg is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* FFmpeg is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with FFmpeg; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef AVFORMAT_AVFORMAT_H
|
|
#define AVFORMAT_AVFORMAT_H
|
|
|
|
|
|
/**
|
|
* Return the LIBAVFORMAT_VERSION_INT constant.
|
|
*/
|
|
unsigned avformat_version(void);
|
|
|
|
/**
|
|
* Return the libavformat build-time configuration.
|
|
*/
|
|
const char *avformat_configuration(void);
|
|
|
|
/**
|
|
* Return the libavformat license.
|
|
*/
|
|
const char *avformat_license(void);
|
|
|
|
#include <time.h>
|
|
#include <stdio.h> /* FILE */
|
|
#include "libavcodec/avcodec.h"
|
|
#include "libavutil/dict.h"
|
|
|
|
#include "avio.h"
|
|
#include "libavformat/version.h"
|
|
|
|
struct AVFormatContext;
|
|
|
|
|
|
/*
|
|
* Public Metadata API.
|
|
* The metadata API allows libavformat to export metadata tags to a client
|
|
* application using a sequence of key/value pairs. Like all strings in FFmpeg,
|
|
* metadata must be stored as UTF-8 encoded Unicode. Note that metadata
|
|
* exported by demuxers isn't checked to be valid UTF-8 in most cases.
|
|
* Important concepts to keep in mind:
|
|
* 1. Keys are unique; there can never be 2 tags with the same key. This is
|
|
* also meant semantically, i.e., a demuxer should not knowingly produce
|
|
* several keys that are literally different but semantically identical.
|
|
* E.g., key=Author5, key=Author6. In this example, all authors must be
|
|
* placed in the same tag.
|
|
* 2. Metadata is flat, not hierarchical; there are no subtags. If you
|
|
* want to store, e.g., the email address of the child of producer Alice
|
|
* and actor Bob, that could have key=alice_and_bobs_childs_email_address.
|
|
* 3. Several modifiers can be applied to the tag name. This is done by
|
|
* appending a dash character ('-') and the modifier name in the order
|
|
* they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng.
|
|
* a) language -- a tag whose value is localized for a particular language
|
|
* is appended with the ISO 639-2/B 3-letter language code.
|
|
* For example: Author-ger=Michael, Author-eng=Mike
|
|
* The original/default language is in the unqualified "Author" tag.
|
|
* A demuxer should set a default if it sets any translated tag.
|
|
* b) sorting -- a modified version of a tag that should be used for
|
|
* sorting will have '-sort' appended. E.g. artist="The Beatles",
|
|
* artist-sort="Beatles, The".
|
|
*
|
|
* 4. Demuxers attempt to export metadata in a generic format, however tags
|
|
* with no generic equivalents are left as they are stored in the container.
|
|
* Follows a list of generic tag names:
|
|
*
|
|
* album -- name of the set this work belongs to
|
|
* album_artist -- main creator of the set/album, if different from artist.
|
|
* e.g. "Various Artists" for compilation albums.
|
|
* artist -- main creator of the work
|
|
* comment -- any additional description of the file.
|
|
* composer -- who composed the work, if different from artist.
|
|
* copyright -- name of copyright holder.
|
|
* creation_time-- date when the file was created, preferably in ISO 8601.
|
|
* date -- date when the work was created, preferably in ISO 8601.
|
|
* disc -- number of a subset, e.g. disc in a multi-disc collection.
|
|
* encoder -- name/settings of the software/hardware that produced the file.
|
|
* encoded_by -- person/group who created the file.
|
|
* filename -- original name of the file.
|
|
* genre -- <self-evident>.
|
|
* language -- main language in which the work is performed, preferably
|
|
* in ISO 639-2 format. Multiple languages can be specified by
|
|
* separating them with commas.
|
|
* performer -- artist who performed the work, if different from artist.
|
|
* E.g for "Also sprach Zarathustra", artist would be "Richard
|
|
* Strauss" and performer "London Philharmonic Orchestra".
|
|
* publisher -- name of the label/publisher.
|
|
* service_name -- name of the service in broadcasting (channel name).
|
|
* service_provider -- name of the service provider in broadcasting.
|
|
* title -- name of the work.
|
|
* track -- number of this work in the set, can be in form current/total.
|
|
* variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of
|
|
*/
|
|
|
|
#if FF_API_OLD_METADATA2
|
|
/**
|
|
* @defgroup old_metadata Old metadata API
|
|
* The following functions are deprecated, use
|
|
* their equivalents from libavutil/dict.h instead.
|
|
* @{
|
|
*/
|
|
|
|
#define AV_METADATA_MATCH_CASE AV_DICT_MATCH_CASE
|
|
#define AV_METADATA_IGNORE_SUFFIX AV_DICT_IGNORE_SUFFIX
|
|
#define AV_METADATA_DONT_STRDUP_KEY AV_DICT_DONT_STRDUP_KEY
|
|
#define AV_METADATA_DONT_STRDUP_VAL AV_DICT_DONT_STRDUP_VAL
|
|
#define AV_METADATA_DONT_OVERWRITE AV_DICT_DONT_OVERWRITE
|
|
|
|
typedef attribute_deprecated AVDictionary AVMetadata;
|
|
typedef attribute_deprecated AVDictionaryEntry AVMetadataTag;
|
|
|
|
typedef struct AVMetadataConv AVMetadataConv;
|
|
|
|
/**
|
|
* Get a metadata element with matching key.
|
|
*
|
|
* @param prev Set to the previous matching element to find the next.
|
|
* If set to NULL the first matching element is returned.
|
|
* @param flags Allows case as well as suffix-insensitive comparisons.
|
|
* @return Found tag or NULL, changing key or value leads to undefined behavior.
|
|
*/
|
|
attribute_deprecated AVDictionaryEntry *
|
|
av_metadata_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags);
|
|
|
|
#if FF_API_OLD_METADATA
|
|
/**
|
|
* Set the given tag in *pm, overwriting an existing tag.
|
|
*
|
|
* @param pm pointer to a pointer to a metadata struct. If *pm is NULL
|
|
* a metadata struct is allocated and put in *pm.
|
|
* @param key tag key to add to *pm (will be av_strduped)
|
|
* @param value tag value to add to *pm (will be av_strduped)
|
|
* @return >= 0 on success otherwise an error code <0
|
|
* @deprecated Use av_metadata_set2() instead.
|
|
*/
|
|
attribute_deprecated int av_metadata_set(AVMetadata **pm, const char *key, const char *value);
|
|
#endif
|
|
|
|
/**
|
|
* Set the given tag in *pm, overwriting an existing tag.
|
|
*
|
|
* @param pm pointer to a pointer to a metadata struct. If *pm is NULL
|
|
* a metadata struct is allocated and put in *pm.
|
|
* @param key tag key to add to *pm (will be av_strduped depending on flags)
|
|
* @param value tag value to add to *pm (will be av_strduped depending on flags).
|
|
* Passing a NULL value will cause an existing tag to be deleted.
|
|
* @return >= 0 on success otherwise an error code <0
|
|
*/
|
|
attribute_deprecated int av_metadata_set2(AVDictionary **pm, const char *key, const char *value, int flags);
|
|
|
|
/**
|
|
* This function is provided for compatibility reason and currently does nothing.
|
|
*/
|
|
attribute_deprecated void av_metadata_conv(struct AVFormatContext *ctx, const AVMetadataConv *d_conv,
|
|
const AVMetadataConv *s_conv);
|
|
|
|
/**
|
|
* Copy metadata from one AVDictionary struct into another.
|
|
* @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL,
|
|
* this function will allocate a struct for you and put it in *dst
|
|
* @param src pointer to source AVDictionary struct
|
|
* @param flags flags to use when setting metadata in *dst
|
|
* @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag
|
|
*/
|
|
attribute_deprecated void av_metadata_copy(AVDictionary **dst, AVDictionary *src, int flags);
|
|
|
|
/**
|
|
* Free all the memory allocated for an AVDictionary struct.
|
|
*/
|
|
attribute_deprecated void av_metadata_free(AVDictionary **m);
|
|
/**
|
|
* @}
|
|
*/
|
|
#endif
|
|
|
|
|
|
/* packet functions */
|
|
|
|
|
|
/**
|
|
* Allocate and read the payload of a packet and initialize its
|
|
* fields with default values.
|
|
*
|
|
* @param pkt packet
|
|
* @param size desired payload size
|
|
* @return >0 (read size) if OK, AVERROR_xxx otherwise
|
|
*/
|
|
int av_get_packet(AVIOContext *s, AVPacket *pkt, int size);
|
|
|
|
|
|
/**
|
|
* Read data and append it to the current content of the AVPacket.
|
|
* If pkt->size is 0 this is identical to av_get_packet.
|
|
* Note that this uses av_grow_packet and thus involves a realloc
|
|
* which is inefficient. Thus this function should only be used
|
|
* when there is no reasonable way to know (an upper bound of)
|
|
* the final size.
|
|
*
|
|
* @param pkt packet
|
|
* @param size amount of data to read
|
|
* @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data
|
|
* will not be lost even if an error occurs.
|
|
*/
|
|
int av_append_packet(AVIOContext *s, AVPacket *pkt, int size);
|
|
|
|
/*************************************************/
|
|
/* fractional numbers for exact pts handling */
|
|
|
|
/**
|
|
* The exact value of the fractional number is: 'val + num / den'.
|
|
* num is assumed to be 0 <= num < den.
|
|
*/
|
|
typedef struct AVFrac {
|
|
int64_t val, num, den;
|
|
} AVFrac;
|
|
|
|
/*************************************************/
|
|
/* input/output formats */
|
|
|
|
struct AVCodecTag;
|
|
|
|
/**
|
|
* This structure contains the data a format has to probe a file.
|
|
*/
|
|
typedef struct AVProbeData {
|
|
const char *filename;
|
|
unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */
|
|
int buf_size; /**< Size of buf except extra allocated bytes */
|
|
} AVProbeData;
|
|
|
|
#define AVPROBE_SCORE_MAX 100 ///< maximum score, half of that is used for file-extension-based detection
|
|
#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer
|
|
|
|
typedef struct AVFormatParameters {
|
|
#if FF_API_FORMAT_PARAMETERS
|
|
attribute_deprecated AVRational time_base;
|
|
attribute_deprecated int sample_rate;
|
|
attribute_deprecated int channels;
|
|
attribute_deprecated int width;
|
|
attribute_deprecated int height;
|
|
attribute_deprecated enum PixelFormat pix_fmt;
|
|
attribute_deprecated int channel; /**< Used to select DV channel. */
|
|
attribute_deprecated const char *standard; /**< deprecated, use demuxer-specific options instead. */
|
|
attribute_deprecated unsigned int mpeg2ts_raw:1; /**< deprecated, use mpegtsraw demuxer */
|
|
/**< deprecated, use mpegtsraw demuxer-specific options instead */
|
|
attribute_deprecated unsigned int mpeg2ts_compute_pcr:1;
|
|
attribute_deprecated unsigned int initial_pause:1; /**< Do not begin to play the stream
|
|
immediately (RTSP only). */
|
|
#endif
|
|
unsigned int prealloced_context:1;
|
|
#if FF_API_PARAMETERS_CODEC_ID
|
|
attribute_deprecated enum CodecID video_codec_id;
|
|
attribute_deprecated enum CodecID audio_codec_id;
|
|
#endif
|
|
} AVFormatParameters;
|
|
|
|
//! Demuxer will use avio_open, no opened file should be provided by the caller.
|
|
#define AVFMT_NOFILE 0x0001
|
|
#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */
|
|
#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */
|
|
#define AVFMT_RAWPICTURE 0x0020 /**< Format wants AVPicture structure for
|
|
raw picture data. */
|
|
#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */
|
|
#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */
|
|
#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */
|
|
#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */
|
|
#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */
|
|
#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */
|
|
#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */
|
|
#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fallback to binary search via read_timestamp */
|
|
#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fallback to generic search */
|
|
#define AVFMT_TS_NONSTRICT 0x8000 /**< Format does not require strictly
|
|
increasing timestamps, but they must
|
|
still be monotonic */
|
|
|
|
typedef struct AVOutputFormat {
|
|
const char *name;
|
|
/**
|
|
* Descriptive name for the format, meant to be more human-readable
|
|
* than name. You should use the NULL_IF_CONFIG_SMALL() macro
|
|
* to define it.
|
|
*/
|
|
const char *long_name;
|
|
const char *mime_type;
|
|
const char *extensions; /**< comma-separated filename extensions */
|
|
/**
|
|
* size of private data so that it can be allocated in the wrapper
|
|
*/
|
|
int priv_data_size;
|
|
/* output support */
|
|
enum CodecID audio_codec; /**< default audio codec */
|
|
enum CodecID video_codec; /**< default video codec */
|
|
int (*write_header)(struct AVFormatContext *);
|
|
int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
|
|
int (*write_trailer)(struct AVFormatContext *);
|
|
/**
|
|
* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE,
|
|
* AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS,
|
|
* AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS
|
|
*/
|
|
int flags;
|
|
|
|
void *dummy;
|
|
|
|
int (*interleave_packet)(struct AVFormatContext *, AVPacket *out,
|
|
AVPacket *in, int flush);
|
|
|
|
/**
|
|
* List of supported codec_id-codec_tag pairs, ordered by "better
|
|
* choice first". The arrays are all terminated by CODEC_ID_NONE.
|
|
*/
|
|
const struct AVCodecTag * const *codec_tag;
|
|
|
|
enum CodecID subtitle_codec; /**< default subtitle codec */
|
|
|
|
#if FF_API_OLD_METADATA2
|
|
const AVMetadataConv *metadata_conv;
|
|
#endif
|
|
|
|
const AVClass *priv_class; ///< AVClass for the private context
|
|
|
|
/* private fields */
|
|
struct AVOutputFormat *next;
|
|
} AVOutputFormat;
|
|
|
|
typedef struct AVInputFormat {
|
|
/**
|
|
* A comma separated list of short names for the format. New names
|
|
* may be appended with a minor bump.
|
|
*/
|
|
const char *name;
|
|
|
|
/**
|
|
* Descriptive name for the format, meant to be more human-readable
|
|
* than name. You should use the NULL_IF_CONFIG_SMALL() macro
|
|
* to define it.
|
|
*/
|
|
const char *long_name;
|
|
|
|
/**
|
|
* Size of private data so that it can be allocated in the wrapper.
|
|
*/
|
|
int priv_data_size;
|
|
|
|
/**
|
|
* Tell if a given file has a chance of being parsed as this format.
|
|
* The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes
|
|
* big so you do not have to check for that unless you need more.
|
|
*/
|
|
int (*read_probe)(AVProbeData *);
|
|
|
|
/**
|
|
* Read the format header and initialize the AVFormatContext
|
|
* structure. Return 0 if OK. 'ap' if non-NULL contains
|
|
* additional parameters. Only used in raw format right
|
|
* now. 'av_new_stream' should be called to create new streams.
|
|
*/
|
|
int (*read_header)(struct AVFormatContext *,
|
|
AVFormatParameters *ap);
|
|
|
|
/**
|
|
* Read one packet and put it in 'pkt'. pts and flags are also
|
|
* set. 'av_new_stream' can be called only if the flag
|
|
* AVFMTCTX_NOHEADER is used and only in the calling thread (not in a
|
|
* background thread).
|
|
* @return 0 on success, < 0 on error.
|
|
* When returning an error, pkt must not have been allocated
|
|
* or must be freed before returning
|
|
*/
|
|
int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);
|
|
|
|
/**
|
|
* Close the stream. The AVFormatContext and AVStreams are not
|
|
* freed by this function
|
|
*/
|
|
int (*read_close)(struct AVFormatContext *);
|
|
|
|
#if FF_API_READ_SEEK
|
|
/**
|
|
* Seek to a given timestamp relative to the frames in
|
|
* stream component stream_index.
|
|
* @param stream_index Must not be -1.
|
|
* @param flags Selects which direction should be preferred if no exact
|
|
* match is available.
|
|
* @return >= 0 on success (but not necessarily the new offset)
|
|
*/
|
|
attribute_deprecated int (*read_seek)(struct AVFormatContext *,
|
|
int stream_index, int64_t timestamp, int flags);
|
|
#endif
|
|
/**
|
|
* Gets the next timestamp in stream[stream_index].time_base units.
|
|
* @return the timestamp or AV_NOPTS_VALUE if an error occurred
|
|
*/
|
|
int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index,
|
|
int64_t *pos, int64_t pos_limit);
|
|
|
|
/**
|
|
* Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER.
|
|
*/
|
|
int flags;
|
|
|
|
/**
|
|
* If extensions are defined, then no probe is done. You should
|
|
* usually not use extension format guessing because it is not
|
|
* reliable enough
|
|
*/
|
|
const char *extensions;
|
|
|
|
/**
|
|
* General purpose read-only value that the format can use.
|
|
*/
|
|
int value;
|
|
|
|
/**
|
|
* Start/resume playing - only meaningful if using a network-based format
|
|
* (RTSP).
|
|
*/
|
|
int (*read_play)(struct AVFormatContext *);
|
|
|
|
/**
|
|
* Pause playing - only meaningful if using a network-based format
|
|
* (RTSP).
|
|
*/
|
|
int (*read_pause)(struct AVFormatContext *);
|
|
|
|
const struct AVCodecTag * const *codec_tag;
|
|
|
|
/**
|
|
* Seek to timestamp ts.
|
|
* Seeking will be done so that the point from which all active streams
|
|
* can be presented successfully will be closest to ts and within min/max_ts.
|
|
* Active streams are all streams that have AVStream.discard < AVDISCARD_ALL.
|
|
*/
|
|
int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
|
|
|
|
#if FF_API_OLD_METADATA2
|
|
const AVMetadataConv *metadata_conv;
|
|
#endif
|
|
|
|
const AVClass *priv_class; ///< AVClass for the private context
|
|
|
|
/* private fields */
|
|
struct AVInputFormat *next;
|
|
} AVInputFormat;
|
|
|
|
enum AVStreamParseType {
|
|
AVSTREAM_PARSE_NONE,
|
|
AVSTREAM_PARSE_FULL, /**< full parsing and repack */
|
|
AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */
|
|
AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */
|
|
AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */
|
|
};
|
|
|
|
typedef struct AVIndexEntry {
|
|
int64_t pos;
|
|
int64_t timestamp;
|
|
#define AVINDEX_KEYFRAME 0x0001
|
|
int flags:2;
|
|
int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment).
|
|
int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */
|
|
} AVIndexEntry;
|
|
|
|
#define AV_DISPOSITION_DEFAULT 0x0001
|
|
#define AV_DISPOSITION_DUB 0x0002
|
|
#define AV_DISPOSITION_ORIGINAL 0x0004
|
|
#define AV_DISPOSITION_COMMENT 0x0008
|
|
#define AV_DISPOSITION_LYRICS 0x0010
|
|
#define AV_DISPOSITION_KARAOKE 0x0020
|
|
|
|
/**
|
|
* Track should be used during playback by default.
|
|
* Useful for subtitle track that should be displayed
|
|
* even when user did not explicitly ask for subtitles.
|
|
*/
|
|
#define AV_DISPOSITION_FORCED 0x0040
|
|
#define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */
|
|
#define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */
|
|
#define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */
|
|
|
|
/**
|
|
* Stream structure.
|
|
* New fields can be added to the end with minor version bumps.
|
|
* Removal, reordering and changes to existing fields require a major
|
|
* version bump.
|
|
* sizeof(AVStream) must not be used outside libav*.
|
|
*/
|
|
typedef struct AVStream {
|
|
int index; /**< stream index in AVFormatContext */
|
|
int id; /**< format-specific stream ID */
|
|
AVCodecContext *codec; /**< codec context */
|
|
/**
|
|
* Real base framerate of the stream.
|
|
* This is the lowest framerate with which all timestamps can be
|
|
* represented accurately (it is the least common multiple of all
|
|
* framerates in the stream). Note, this value is just a guess!
|
|
* For example, if the time base is 1/90000 and all frames have either
|
|
* approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1.
|
|
*/
|
|
AVRational r_frame_rate;
|
|
void *priv_data;
|
|
|
|
/* internal data used in av_find_stream_info() */
|
|
int64_t first_dts;
|
|
|
|
/**
|
|
* encoding: pts generation when outputting stream
|
|
*/
|
|
struct AVFrac pts;
|
|
|
|
/**
|
|
* This is the fundamental unit of time (in seconds) in terms
|
|
* of which frame timestamps are represented. For fixed-fps content,
|
|
* time base should be 1/framerate and timestamp increments should be 1.
|
|
* decoding: set by libavformat
|
|
* encoding: set by libavformat in av_write_header
|
|
*/
|
|
AVRational time_base;
|
|
int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */
|
|
/* ffmpeg.c private use */
|
|
int stream_copy; /**< If set, just copy stream. */
|
|
enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed.
|
|
|
|
//FIXME move stuff to a flags field?
|
|
/**
|
|
* Quality, as it has been removed from AVCodecContext and put in AVVideoFrame.
|
|
* MN: dunno if that is the right place for it
|
|
*/
|
|
float quality;
|
|
|
|
/**
|
|
* Decoding: pts of the first frame of the stream, in stream time base.
|
|
* Only set this if you are absolutely 100% sure that the value you set
|
|
* it to really is the pts of the first frame.
|
|
* This may be undefined (AV_NOPTS_VALUE).
|
|
* @note The ASF header does NOT contain a correct start_time the ASF
|
|
* demuxer must NOT set this.
|
|
*/
|
|
int64_t start_time;
|
|
|
|
/**
|
|
* Decoding: duration of the stream, in stream time base.
|
|
* If a source file does not specify a duration, but does specify
|
|
* a bitrate, this value will be estimated from bitrate and file size.
|
|
*/
|
|
int64_t duration;
|
|
|
|
#if FF_API_OLD_METADATA
|
|
attribute_deprecated char language[4]; /**< ISO 639-2/B 3-letter language code (empty string if undefined) */
|
|
#endif
|
|
|
|
/* av_read_frame() support */
|
|
enum AVStreamParseType need_parsing;
|
|
struct AVCodecParserContext *parser;
|
|
|
|
int64_t cur_dts;
|
|
int last_IP_duration;
|
|
int64_t last_IP_pts;
|
|
/* av_seek_frame() support */
|
|
AVIndexEntry *index_entries; /**< Only used if the format does not
|
|
support seeking natively. */
|
|
int nb_index_entries;
|
|
unsigned int index_entries_allocated_size;
|
|
|
|
int64_t nb_frames; ///< number of frames in this stream if known or 0
|
|
|
|
#if FF_API_LAVF_UNUSED
|
|
attribute_deprecated int64_t unused[4+1];
|
|
#endif
|
|
|
|
#if FF_API_OLD_METADATA
|
|
attribute_deprecated char *filename; /**< source filename of the stream */
|
|
#endif
|
|
|
|
int disposition; /**< AV_DISPOSITION_* bit field */
|
|
|
|
AVProbeData probe_data;
|
|
#define MAX_REORDER_DELAY 16
|
|
int64_t pts_buffer[MAX_REORDER_DELAY+1];
|
|
|
|
/**
|
|
* sample aspect ratio (0 if unknown)
|
|
* - encoding: Set by user.
|
|
* - decoding: Set by libavformat.
|
|
*/
|
|
AVRational sample_aspect_ratio;
|
|
|
|
AVDictionary *metadata;
|
|
|
|
/* Intended mostly for av_read_frame() support. Not supposed to be used by */
|
|
/* external applications; try to use something else if at all possible. */
|
|
const uint8_t *cur_ptr;
|
|
int cur_len;
|
|
AVPacket cur_pkt;
|
|
|
|
// Timestamp generation support:
|
|
/**
|
|
* Timestamp corresponding to the last dts sync point.
|
|
*
|
|
* Initialized when AVCodecParserContext.dts_sync_point >= 0 and
|
|
* a DTS is received from the underlying container. Otherwise set to
|
|
* AV_NOPTS_VALUE by default.
|
|
*/
|
|
int64_t reference_dts;
|
|
|
|
/**
|
|
* Number of packets to buffer for codec probing
|
|
* NOT PART OF PUBLIC API
|
|
*/
|
|
#define MAX_PROBE_PACKETS 2500
|
|
int probe_packets;
|
|
|
|
/**
|
|
* last packet in packet_buffer for this stream when muxing.
|
|
* used internally, NOT PART OF PUBLIC API, dont read or write from outside of libav*
|
|
*/
|
|
struct AVPacketList *last_in_packet_buffer;
|
|
|
|
/**
|
|
* Average framerate
|
|
*/
|
|
AVRational avg_frame_rate;
|
|
|
|
/**
|
|
* Number of frames that have been demuxed during av_find_stream_info()
|
|
*/
|
|
int codec_info_nb_frames;
|
|
|
|
/**
|
|
* Stream Identifier
|
|
* This is the MPEG-TS stream identifier +1
|
|
* 0 means unknown
|
|
*/
|
|
int stream_identifier;
|
|
|
|
/**
|
|
* Stream informations used internally by av_find_stream_info()
|
|
*/
|
|
#define MAX_STD_TIMEBASES (60*12+5)
|
|
struct {
|
|
int64_t last_dts;
|
|
int64_t duration_gcd;
|
|
int duration_count;
|
|
double duration_error[MAX_STD_TIMEBASES];
|
|
int64_t codec_info_duration;
|
|
} *info;
|
|
|
|
/**
|
|
* flag to indicate that probing is requested
|
|
* NOT PART OF PUBLIC API
|
|
*/
|
|
int request_probe;
|
|
} AVStream;
|
|
|
|
#define AV_PROGRAM_RUNNING 1
|
|
|
|
/**
|
|
* New fields can be added to the end with minor version bumps.
|
|
* Removal, reordering and changes to existing fields require a major
|
|
* version bump.
|
|
* sizeof(AVProgram) must not be used outside libav*.
|
|
*/
|
|
typedef struct AVProgram {
|
|
int id;
|
|
#if FF_API_OLD_METADATA
|
|
attribute_deprecated char *provider_name; ///< network name for DVB streams
|
|
attribute_deprecated char *name; ///< service name for DVB streams
|
|
#endif
|
|
int flags;
|
|
enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller
|
|
unsigned int *stream_index;
|
|
unsigned int nb_stream_indexes;
|
|
AVDictionary *metadata;
|
|
|
|
int program_num;
|
|
int pmt_pid;
|
|
int pcr_pid;
|
|
} AVProgram;
|
|
|
|
#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present
|
|
(streams are added dynamically) */
|
|
|
|
typedef struct AVChapter {
|
|
int id; ///< unique ID to identify the chapter
|
|
AVRational time_base; ///< time base in which the start/end timestamps are specified
|
|
int64_t start, end; ///< chapter start/end time in time_base units
|
|
#if FF_API_OLD_METADATA
|
|
attribute_deprecated char *title; ///< chapter title
|
|
#endif
|
|
AVDictionary *metadata;
|
|
} AVChapter;
|
|
|
|
#if FF_API_MAX_STREAMS
|
|
#define MAX_STREAMS 20
|
|
#endif
|
|
|
|
/**
|
|
* Format I/O context.
|
|
* New fields can be added to the end with minor version bumps.
|
|
* Removal, reordering and changes to existing fields require a major
|
|
* version bump.
|
|
* sizeof(AVFormatContext) must not be used outside libav*.
|
|
*/
|
|
typedef struct AVFormatContext {
|
|
const AVClass *av_class; /**< Set by avformat_alloc_context. */
|
|
/* Can only be iformat or oformat, not both at the same time. */
|
|
struct AVInputFormat *iformat;
|
|
struct AVOutputFormat *oformat;
|
|
void *priv_data;
|
|
AVIOContext *pb;
|
|
unsigned int nb_streams;
|
|
#if FF_API_MAX_STREAMS
|
|
AVStream *streams[MAX_STREAMS];
|
|
#else
|
|
AVStream **streams;
|
|
#endif
|
|
char filename[1024]; /**< input or output filename */
|
|
/* stream info */
|
|
int64_t timestamp;
|
|
#if FF_API_OLD_METADATA
|
|
attribute_deprecated char title[512];
|
|
attribute_deprecated char author[512];
|
|
attribute_deprecated char copyright[512];
|
|
attribute_deprecated char comment[512];
|
|
attribute_deprecated char album[512];
|
|
attribute_deprecated int year; /**< ID3 year, 0 if none */
|
|
attribute_deprecated int track; /**< track number, 0 if none */
|
|
attribute_deprecated char genre[32]; /**< ID3 genre */
|
|
#endif
|
|
|
|
int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */
|
|
/* private data for pts handling (do not modify directly). */
|
|
/**
|
|
* This buffer is only needed when packets were already buffered but
|
|
* not decoded, for example to get the codec parameters in MPEG
|
|
* streams.
|
|
*/
|
|
struct AVPacketList *packet_buffer;
|
|
|
|
/**
|
|
* Decoding: position of the first frame of the component, in
|
|
* AV_TIME_BASE fractional seconds. NEVER set this value directly:
|
|
* It is deduced from the AVStream values.
|
|
*/
|
|
int64_t start_time;
|
|
|
|
/**
|
|
* Decoding: duration of the stream, in AV_TIME_BASE fractional
|
|
* seconds. Only set this value if you know none of the individual stream
|
|
* durations and also dont set any of them. This is deduced from the
|
|
* AVStream values if not set.
|
|
*/
|
|
int64_t duration;
|
|
|
|
/**
|
|
* decoding: total file size, 0 if unknown
|
|
*/
|
|
int64_t file_size;
|
|
|
|
/**
|
|
* Decoding: total stream bitrate in bit/s, 0 if not
|
|
* available. Never set it directly if the file_size and the
|
|
* duration are known as FFmpeg can compute it automatically.
|
|
*/
|
|
int bit_rate;
|
|
|
|
/* av_read_frame() support */
|
|
AVStream *cur_st;
|
|
#if FF_API_LAVF_UNUSED
|
|
const uint8_t *cur_ptr_deprecated;
|
|
int cur_len_deprecated;
|
|
AVPacket cur_pkt_deprecated;
|
|
#endif
|
|
|
|
/* av_seek_frame() support */
|
|
int64_t data_offset; /**< offset of the first packet */
|
|
#if FF_API_INDEX_BUILT
|
|
attribute_deprecated int index_built;
|
|
#endif
|
|
|
|
int mux_rate;
|
|
unsigned int packet_size;
|
|
int preload;
|
|
int max_delay;
|
|
|
|
#define AVFMT_NOOUTPUTLOOP -1
|
|
#define AVFMT_INFINITEOUTPUTLOOP 0
|
|
/**
|
|
* number of times to loop output in formats that support it
|
|
*/
|
|
int loop_output;
|
|
|
|
int flags;
|
|
#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames.
|
|
#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index.
|
|
#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input.
|
|
#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS
|
|
#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container
|
|
#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled
|
|
#if FF_API_FLAG_RTP_HINT
|
|
#define AVFMT_FLAG_RTP_HINT 0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead
|
|
#endif
|
|
#define AVFMT_FLAG_MP4A_LATM 0x0080 ///< Enable RTP MP4A-LATM payload
|
|
#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
|
|
#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)
|
|
#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Dont merge side data but keep it seperate.
|
|
int loop_input;
|
|
|
|
/**
|
|
* decoding: size of data to probe; encoding: unused.
|
|
*/
|
|
unsigned int probesize;
|
|
|
|
/**
|
|
* Maximum time (in AV_TIME_BASE units) during which the input should
|
|
* be analyzed in av_find_stream_info().
|
|
*/
|
|
int max_analyze_duration;
|
|
|
|
const uint8_t *key;
|
|
int keylen;
|
|
|
|
unsigned int nb_programs;
|
|
AVProgram **programs;
|
|
|
|
/**
|
|
* Forced video codec_id.
|
|
* Demuxing: Set by user.
|
|
*/
|
|
enum CodecID video_codec_id;
|
|
|
|
/**
|
|
* Forced audio codec_id.
|
|
* Demuxing: Set by user.
|
|
*/
|
|
enum CodecID audio_codec_id;
|
|
|
|
/**
|
|
* Forced subtitle codec_id.
|
|
* Demuxing: Set by user.
|
|
*/
|
|
enum CodecID subtitle_codec_id;
|
|
|
|
/**
|
|
* Maximum amount of memory in bytes to use for the index of each stream.
|
|
* If the index exceeds this size, entries will be discarded as
|
|
* needed to maintain a smaller size. This can lead to slower or less
|
|
* accurate seeking (depends on demuxer).
|
|
* Demuxers for which a full in-memory index is mandatory will ignore
|
|
* this.
|
|
* muxing : unused
|
|
* demuxing: set by user
|
|
*/
|
|
unsigned int max_index_size;
|
|
|
|
/**
|
|
* Maximum amount of memory in bytes to use for buffering frames
|
|
* obtained from realtime capture devices.
|
|
*/
|
|
unsigned int max_picture_buffer;
|
|
|
|
unsigned int nb_chapters;
|
|
AVChapter **chapters;
|
|
|
|
/**
|
|
* Flags to enable debugging.
|
|
*/
|
|
int debug;
|
|
#define FF_FDEBUG_TS 0x0001
|
|
|
|
/**
|
|
* Raw packets from the demuxer, prior to parsing and decoding.
|
|
* This buffer is used for buffering packets until the codec can
|
|
* be identified, as parsing cannot be done without knowing the
|
|
* codec.
|
|
*/
|
|
struct AVPacketList *raw_packet_buffer;
|
|
struct AVPacketList *raw_packet_buffer_end;
|
|
|
|
struct AVPacketList *packet_buffer_end;
|
|
|
|
AVDictionary *metadata;
|
|
|
|
/**
|
|
* Remaining size available for raw_packet_buffer, in bytes.
|
|
* NOT PART OF PUBLIC API
|
|
*/
|
|
#define RAW_PACKET_BUFFER_SIZE 2500000
|
|
int raw_packet_buffer_remaining_size;
|
|
|
|
/**
|
|
* Start time of the stream in real world time, in microseconds
|
|
* since the unix epoch (00:00 1st January 1970). That is, pts=0
|
|
* in the stream was captured at this real world time.
|
|
* - encoding: Set by user.
|
|
* - decoding: Unused.
|
|
*/
|
|
int64_t start_time_realtime;
|
|
|
|
/**
|
|
* decoding: number of frames used to probe fps
|
|
*/
|
|
int fps_probe_size;
|
|
|
|
/**
|
|
* Transport stream id.
|
|
* This will be moved into demuxer private options. Thus no API/ABI compatibility
|
|
*/
|
|
int ts_id;
|
|
} AVFormatContext;
|
|
|
|
typedef struct AVPacketList {
|
|
AVPacket pkt;
|
|
struct AVPacketList *next;
|
|
} AVPacketList;
|
|
|
|
#if FF_API_FIRST_FORMAT
|
|
attribute_deprecated extern AVInputFormat *first_iformat;
|
|
attribute_deprecated extern AVOutputFormat *first_oformat;
|
|
#endif
|
|
|
|
/**
|
|
* If f is NULL, returns the first registered input format,
|
|
* if f is non-NULL, returns the next registered input format after f
|
|
* or NULL if f is the last one.
|
|
*/
|
|
AVInputFormat *av_iformat_next(AVInputFormat *f);
|
|
|
|
/**
|
|
* If f is NULL, returns the first registered output format,
|
|
* if f is non-NULL, returns the next registered output format after f
|
|
* or NULL if f is the last one.
|
|
*/
|
|
AVOutputFormat *av_oformat_next(AVOutputFormat *f);
|
|
|
|
#if FF_API_GUESS_IMG2_CODEC
|
|
attribute_deprecated enum CodecID av_guess_image2_codec(const char *filename);
|
|
#endif
|
|
|
|
/* XXX: Use automatic init with either ELF sections or C file parser */
|
|
/* modules. */
|
|
|
|
/* utils.c */
|
|
void av_register_input_format(AVInputFormat *format);
|
|
void av_register_output_format(AVOutputFormat *format);
|
|
#if FF_API_GUESS_FORMAT
|
|
attribute_deprecated AVOutputFormat *guess_stream_format(const char *short_name,
|
|
const char *filename,
|
|
const char *mime_type);
|
|
|
|
/**
|
|
* @deprecated Use av_guess_format() instead.
|
|
*/
|
|
attribute_deprecated AVOutputFormat *guess_format(const char *short_name,
|
|
const char *filename,
|
|
const char *mime_type);
|
|
#endif
|
|
|
|
/**
|
|
* Return the output format in the list of registered output formats
|
|
* which best matches the provided parameters, or return NULL if
|
|
* there is no match.
|
|
*
|
|
* @param short_name if non-NULL checks if short_name matches with the
|
|
* names of the registered formats
|
|
* @param filename if non-NULL checks if filename terminates with the
|
|
* extensions of the registered formats
|
|
* @param mime_type if non-NULL checks if mime_type matches with the
|
|
* MIME type of the registered formats
|
|
*/
|
|
AVOutputFormat *av_guess_format(const char *short_name,
|
|
const char *filename,
|
|
const char *mime_type);
|
|
|
|
/**
|
|
* Guess the codec ID based upon muxer and filename.
|
|
*/
|
|
enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
|
|
const char *filename, const char *mime_type,
|
|
enum AVMediaType type);
|
|
|
|
/**
|
|
* Send a nice hexadecimal dump of a buffer to the specified file stream.
|
|
*
|
|
* @param f The file stream pointer where the dump should be sent to.
|
|
* @param buf buffer
|
|
* @param size buffer size
|
|
*
|
|
* @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2
|
|
*/
|
|
void av_hex_dump(FILE *f, uint8_t *buf, int size);
|
|
|
|
/**
|
|
* Send a nice hexadecimal dump of a buffer to the log.
|
|
*
|
|
* @param avcl A pointer to an arbitrary struct of which the first field is a
|
|
* pointer to an AVClass struct.
|
|
* @param level The importance level of the message, lower values signifying
|
|
* higher importance.
|
|
* @param buf buffer
|
|
* @param size buffer size
|
|
*
|
|
* @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2
|
|
*/
|
|
void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size);
|
|
|
|
/**
|
|
* Send a nice dump of a packet to the specified file stream.
|
|
*
|
|
* @param f The file stream pointer where the dump should be sent to.
|
|
* @param pkt packet to dump
|
|
* @param dump_payload True if the payload must be displayed, too.
|
|
* @param st AVStream that the packet belongs to
|
|
*/
|
|
void av_pkt_dump2(FILE *f, AVPacket *pkt, int dump_payload, AVStream *st);
|
|
|
|
|
|
/**
|
|
* Send a nice dump of a packet to the log.
|
|
*
|
|
* @param avcl A pointer to an arbitrary struct of which the first field is a
|
|
* pointer to an AVClass struct.
|
|
* @param level The importance level of the message, lower values signifying
|
|
* higher importance.
|
|
* @param pkt packet to dump
|
|
* @param dump_payload True if the payload must be displayed, too.
|
|
* @param st AVStream that the packet belongs to
|
|
*/
|
|
void av_pkt_dump_log2(void *avcl, int level, AVPacket *pkt, int dump_payload,
|
|
AVStream *st);
|
|
|
|
#if FF_API_PKT_DUMP
|
|
attribute_deprecated void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload);
|
|
attribute_deprecated void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt,
|
|
int dump_payload);
|
|
#endif
|
|
|
|
/**
|
|
* Initialize libavformat and register all the muxers, demuxers and
|
|
* protocols. If you do not call this function, then you can select
|
|
* exactly which formats you want to support.
|
|
*
|
|
* @see av_register_input_format()
|
|
* @see av_register_output_format()
|
|
* @see av_register_protocol()
|
|
*/
|
|
void av_register_all(void);
|
|
|
|
/**
|
|
* Get the CodecID for the given codec tag tag.
|
|
* If no codec id is found returns CODEC_ID_NONE.
|
|
*
|
|
* @param tags list of supported codec_id-codec_tag pairs, as stored
|
|
* in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
|
|
*/
|
|
enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag);
|
|
|
|
/**
|
|
* Get the codec tag for the given codec id id.
|
|
* If no codec tag is found returns 0.
|
|
*
|
|
* @param tags list of supported codec_id-codec_tag pairs, as stored
|
|
* in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
|
|
*/
|
|
unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id);
|
|
|
|
/* media file input */
|
|
|
|
/**
|
|
* Find AVInputFormat based on the short name of the input format.
|
|
*/
|
|
AVInputFormat *av_find_input_format(const char *short_name);
|
|
|
|
/**
|
|
* Guess the file format.
|
|
*
|
|
* @param is_opened Whether the file is already opened; determines whether
|
|
* demuxers with or without AVFMT_NOFILE are probed.
|
|
*/
|
|
AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened);
|
|
|
|
/**
|
|
* Guess the file format.
|
|
*
|
|
* @param is_opened Whether the file is already opened; determines whether
|
|
* demuxers with or without AVFMT_NOFILE are probed.
|
|
* @param score_max A probe score larger that this is required to accept a
|
|
* detection, the variable is set to the actual detection
|
|
* score afterwards.
|
|
* If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended
|
|
* to retry with a larger probe buffer.
|
|
*/
|
|
AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max);
|
|
|
|
/**
|
|
* Guess the file format.
|
|
*
|
|
* @param is_opened Whether the file is already opened; determines whether
|
|
* demuxers with or without AVFMT_NOFILE are probed.
|
|
* @param score_ret The score of the best detection.
|
|
*/
|
|
AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret);
|
|
|
|
/**
|
|
* Probe a bytestream to determine the input format. Each time a probe returns
|
|
* with a score that is too low, the probe buffer size is increased and another
|
|
* attempt is made. When the maximum probe size is reached, the input format
|
|
* with the highest score is returned.
|
|
*
|
|
* @param pb the bytestream to probe
|
|
* @param fmt the input format is put here
|
|
* @param filename the filename of the stream
|
|
* @param logctx the log context
|
|
* @param offset the offset within the bytestream to probe from
|
|
* @param max_probe_size the maximum probe buffer size (zero for default)
|
|
* @return 0 in case of success, a negative value corresponding to an
|
|
* AVERROR code otherwise
|
|
*/
|
|
int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
|
|
const char *filename, void *logctx,
|
|
unsigned int offset, unsigned int max_probe_size);
|
|
|
|
/**
|
|
* Allocate all the structures needed to read an input stream.
|
|
* This does not open the needed codecs for decoding the stream[s].
|
|
*/
|
|
int av_open_input_stream(AVFormatContext **ic_ptr,
|
|
AVIOContext *pb, const char *filename,
|
|
AVInputFormat *fmt, AVFormatParameters *ap);
|
|
|
|
/**
|
|
* Open a media file as input. The codecs are not opened. Only the file
|
|
* header (if present) is read.
|
|
*
|
|
* @param ic_ptr The opened media file handle is put here.
|
|
* @param filename filename to open
|
|
* @param fmt If non-NULL, force the file format to use.
|
|
* @param buf_size optional buffer size (zero if default is OK)
|
|
* @param ap Additional parameters needed when opening the file
|
|
* (NULL if default).
|
|
* @return 0 if OK, AVERROR_xxx otherwise
|
|
*/
|
|
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
|
|
AVInputFormat *fmt,
|
|
int buf_size,
|
|
AVFormatParameters *ap);
|
|
|
|
#if FF_API_ALLOC_FORMAT_CONTEXT
|
|
/**
|
|
* @deprecated Use avformat_alloc_context() instead.
|
|
*/
|
|
attribute_deprecated AVFormatContext *av_alloc_format_context(void);
|
|
#endif
|
|
int av_demuxer_open(AVFormatContext *ic, AVFormatParameters *ap);
|
|
|
|
/**
|
|
* Allocate an AVFormatContext.
|
|
* avformat_free_context() can be used to free the context and everything
|
|
* allocated by the framework within it.
|
|
*/
|
|
AVFormatContext *avformat_alloc_context(void);
|
|
|
|
#if FF_API_ALLOC_OUTPUT_CONTEXT
|
|
/**
|
|
* @deprecated deprecated in favor of avformat_alloc_output_context2()
|
|
*/
|
|
attribute_deprecated
|
|
AVFormatContext *avformat_alloc_output_context(const char *format,
|
|
AVOutputFormat *oformat,
|
|
const char *filename);
|
|
#endif
|
|
|
|
/**
|
|
* Allocate an AVFormatContext for an output format.
|
|
* avformat_free_context() can be used to free the context and
|
|
* everything allocated by the framework within it.
|
|
*
|
|
* @param *ctx is set to the created format context, or to NULL in
|
|
* case of failure
|
|
* @param oformat format to use for allocating the context, if NULL
|
|
* format_name and filename are used instead
|
|
* @param format_name the name of output format to use for allocating the
|
|
* context, if NULL filename is used instead
|
|
* @param filename the name of the filename to use for allocating the
|
|
* context, may be NULL
|
|
* @return >= 0 in case of success, a negative AVERROR code in case of
|
|
* failure
|
|
*/
|
|
int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat,
|
|
const char *format_name, const char *filename);
|
|
|
|
/**
|
|
* Read packets of a media file to get stream information. This
|
|
* is useful for file formats with no headers such as MPEG. This
|
|
* function also computes the real framerate in case of MPEG-2 repeat
|
|
* frame mode.
|
|
* The logical file position is not changed by this function;
|
|
* examined packets may be buffered for later processing.
|
|
*
|
|
* @param ic media file handle
|
|
* @return >=0 if OK, AVERROR_xxx on error
|
|
* @todo Let the user decide somehow what information is needed so that
|
|
* we do not waste time getting stuff the user does not need.
|
|
*/
|
|
int av_find_stream_info(AVFormatContext *ic);
|
|
|
|
/**
|
|
* Find the "best" stream in the file.
|
|
* The best stream is determined according to various heuristics as the most
|
|
* likely to be what the user expects.
|
|
* If the decoder parameter is non-NULL, av_find_best_stream will find the
|
|
* default decoder for the stream's codec; streams for which no decoder can
|
|
* be found are ignored.
|
|
*
|
|
* @param ic media file handle
|
|
* @param type stream type: video, audio, subtitles, etc.
|
|
* @param wanted_stream_nb user-requested stream number,
|
|
* or -1 for automatic selection
|
|
* @param related_stream try to find a stream related (eg. in the same
|
|
* program) to this one, or -1 if none
|
|
* @param decoder_ret if non-NULL, returns the decoder for the
|
|
* selected stream
|
|
* @param flags flags; none are currently defined
|
|
* @return the non-negative stream number in case of success,
|
|
* AVERROR_STREAM_NOT_FOUND if no stream with the requested type
|
|
* could be found,
|
|
* AVERROR_DECODER_NOT_FOUND if streams were found but no decoder
|
|
* @note If av_find_best_stream returns successfully and decoder_ret is not
|
|
* NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec.
|
|
*/
|
|
int av_find_best_stream(AVFormatContext *ic,
|
|
enum AVMediaType type,
|
|
int wanted_stream_nb,
|
|
int related_stream,
|
|
AVCodec **decoder_ret,
|
|
int flags);
|
|
|
|
/**
|
|
* Read a transport packet from a media file.
|
|
*
|
|
* This function is obsolete and should never be used.
|
|
* Use av_read_frame() instead.
|
|
*
|
|
* @param s media file handle
|
|
* @param pkt is filled
|
|
* @return 0 if OK, AVERROR_xxx on error
|
|
*/
|
|
int av_read_packet(AVFormatContext *s, AVPacket *pkt);
|
|
|
|
/**
|
|
* Return the next frame of a stream.
|
|
* This function returns what is stored in the file, and does not validate
|
|
* that what is there are valid frames for the decoder. It will split what is
|
|
* stored in the file into frames and return one for each call. It will not
|
|
* omit invalid data between valid frames so as to give the decoder the maximum
|
|
* information possible for decoding.
|
|
*
|
|
* The returned packet is valid
|
|
* until the next av_read_frame() or until av_close_input_file() and
|
|
* must be freed with av_free_packet. For video, the packet contains
|
|
* exactly one frame. For audio, it contains an integer number of
|
|
* frames if each frame has a known fixed size (e.g. PCM or ADPCM
|
|
* data). If the audio frames have a variable size (e.g. MPEG audio),
|
|
* then it contains one frame.
|
|
*
|
|
* pkt->pts, pkt->dts and pkt->duration are always set to correct
|
|
* values in AVStream.time_base units (and guessed if the format cannot
|
|
* provide them). pkt->pts can be AV_NOPTS_VALUE if the video format
|
|
* has B-frames, so it is better to rely on pkt->dts if you do not
|
|
* decompress the payload.
|
|
*
|
|
* @return 0 if OK, < 0 on error or end of file
|
|
*/
|
|
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
|
|
|
|
/**
|
|
* Seek to the keyframe at timestamp.
|
|
* 'timestamp' in 'stream_index'.
|
|
* @param stream_index If stream_index is (-1), a default
|
|
* stream is selected, and timestamp is automatically converted
|
|
* from AV_TIME_BASE units to the stream specific time_base.
|
|
* @param timestamp Timestamp in AVStream.time_base units
|
|
* or, if no stream is specified, in AV_TIME_BASE units.
|
|
* @param flags flags which select direction and seeking mode
|
|
* @return >= 0 on success
|
|
*/
|
|
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp,
|
|
int flags);
|
|
|
|
/**
|
|
* Seek to timestamp ts.
|
|
* Seeking will be done so that the point from which all active streams
|
|
* can be presented successfully will be closest to ts and within min/max_ts.
|
|
* Active streams are all streams that have AVStream.discard < AVDISCARD_ALL.
|
|
*
|
|
* If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and
|
|
* are the file position (this may not be supported by all demuxers).
|
|
* If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames
|
|
* in the stream with stream_index (this may not be supported by all demuxers).
|
|
* Otherwise all timestamps are in units of the stream selected by stream_index
|
|
* or if stream_index is -1, in AV_TIME_BASE units.
|
|
* If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as
|
|
* keyframes (this may not be supported by all demuxers).
|
|
*
|
|
* @param stream_index index of the stream which is used as time base reference
|
|
* @param min_ts smallest acceptable timestamp
|
|
* @param ts target timestamp
|
|
* @param max_ts largest acceptable timestamp
|
|
* @param flags flags
|
|
* @return >=0 on success, error code otherwise
|
|
*
|
|
* @note This is part of the new seek API which is still under construction.
|
|
* Thus do not use this yet. It may change at any time, do not expect
|
|
* ABI compatibility yet!
|
|
*/
|
|
int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
|
|
|
|
/**
|
|
* Start playing a network-based stream (e.g. RTSP stream) at the
|
|
* current position.
|
|
*/
|
|
int av_read_play(AVFormatContext *s);
|
|
|
|
/**
|
|
* Pause a network-based stream (e.g. RTSP stream).
|
|
*
|
|
* Use av_read_play() to resume it.
|
|
*/
|
|
int av_read_pause(AVFormatContext *s);
|
|
|
|
/**
|
|
* Free a AVFormatContext allocated by av_open_input_stream.
|
|
* @param s context to free
|
|
*/
|
|
void av_close_input_stream(AVFormatContext *s);
|
|
|
|
/**
|
|
* Close a media file (but not its codecs).
|
|
*
|
|
* @param s media file handle
|
|
*/
|
|
void av_close_input_file(AVFormatContext *s);
|
|
|
|
/**
|
|
* Free an AVFormatContext and all its streams.
|
|
* @param s context to free
|
|
*/
|
|
void avformat_free_context(AVFormatContext *s);
|
|
|
|
/**
|
|
* Add a new stream to a media file.
|
|
*
|
|
* Can only be called in the read_header() function. If the flag
|
|
* AVFMTCTX_NOHEADER is in the format context, then new streams
|
|
* can be added in read_packet too.
|
|
*
|
|
* @param s media file handle
|
|
* @param id file-format-dependent stream ID
|
|
*/
|
|
AVStream *av_new_stream(AVFormatContext *s, int id);
|
|
AVProgram *av_new_program(AVFormatContext *s, int id);
|
|
|
|
/**
|
|
* Set the pts for a given stream. If the new values would be invalid
|
|
* (<= 0), it leaves the AVStream unchanged.
|
|
*
|
|
* @param s stream
|
|
* @param pts_wrap_bits number of bits effectively used by the pts
|
|
* (used for wrap control, 33 is the value for MPEG)
|
|
* @param pts_num numerator to convert to seconds (MPEG: 1)
|
|
* @param pts_den denominator to convert to seconds (MPEG: 90000)
|
|
*/
|
|
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
|
|
unsigned int pts_num, unsigned int pts_den);
|
|
|
|
#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward
|
|
#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes
|
|
#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes
|
|
#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number
|
|
|
|
int av_find_default_stream_index(AVFormatContext *s);
|
|
|
|
/**
|
|
* Get the index for a specific timestamp.
|
|
* @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond
|
|
* to the timestamp which is <= the requested one, if backward
|
|
* is 0, then it will be >=
|
|
* if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise
|
|
* @return < 0 if no such timestamp could be found
|
|
*/
|
|
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags);
|
|
|
|
/**
|
|
* Add an index entry into a sorted list. Update the entry if the list
|
|
* already contains it.
|
|
*
|
|
* @param timestamp timestamp in the time base of the given stream
|
|
*/
|
|
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
|
|
int size, int distance, int flags);
|
|
|
|
/**
|
|
* Perform a binary search using av_index_search_timestamp() and
|
|
* AVInputFormat.read_timestamp().
|
|
* This is not supposed to be called directly by a user application,
|
|
* but by demuxers.
|
|
* @param target_ts target timestamp in the time base of the given stream
|
|
* @param stream_index stream number
|
|
*/
|
|
int av_seek_frame_binary(AVFormatContext *s, int stream_index,
|
|
int64_t target_ts, int flags);
|
|
|
|
/**
|
|
* Update cur_dts of all streams based on the given timestamp and AVStream.
|
|
*
|
|
* Stream ref_st unchanged, others set cur_dts in their native time base.
|
|
* Only needed for timestamp wrapping or if (dts not set and pts!=dts).
|
|
* @param timestamp new dts expressed in time_base of param ref_st
|
|
* @param ref_st reference stream giving time_base of param timestamp
|
|
*/
|
|
void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
|
|
|
|
/**
|
|
* Perform a binary search using read_timestamp().
|
|
* This is not supposed to be called directly by a user application,
|
|
* but by demuxers.
|
|
* @param target_ts target timestamp in the time base of the given stream
|
|
* @param stream_index stream number
|
|
*/
|
|
int64_t av_gen_search(AVFormatContext *s, int stream_index,
|
|
int64_t target_ts, int64_t pos_min,
|
|
int64_t pos_max, int64_t pos_limit,
|
|
int64_t ts_min, int64_t ts_max,
|
|
int flags, int64_t *ts_ret,
|
|
int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
|
|
|
|
/**
|
|
* media file output
|
|
*/
|
|
attribute_deprecated int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap);
|
|
|
|
/**
|
|
* Split a URL string into components.
|
|
*
|
|
* The pointers to buffers for storing individual components may be null,
|
|
* in order to ignore that component. Buffers for components not found are
|
|
* set to empty strings. If the port is not found, it is set to a negative
|
|
* value.
|
|
*
|
|
* @param proto the buffer for the protocol
|
|
* @param proto_size the size of the proto buffer
|
|
* @param authorization the buffer for the authorization
|
|
* @param authorization_size the size of the authorization buffer
|
|
* @param hostname the buffer for the host name
|
|
* @param hostname_size the size of the hostname buffer
|
|
* @param port_ptr a pointer to store the port number in
|
|
* @param path the buffer for the path
|
|
* @param path_size the size of the path buffer
|
|
* @param url the URL to split
|
|
*/
|
|
void av_url_split(char *proto, int proto_size,
|
|
char *authorization, int authorization_size,
|
|
char *hostname, int hostname_size,
|
|
int *port_ptr,
|
|
char *path, int path_size,
|
|
const char *url);
|
|
|
|
/**
|
|
* Allocate the stream private data and write the stream header to an
|
|
* output media file.
|
|
* @note: this sets stream time-bases, if possible to stream->codec->time_base
|
|
* but for some formats it might also be some other time base
|
|
*
|
|
* @param s media file handle
|
|
* @return 0 if OK, AVERROR_xxx on error
|
|
*/
|
|
int av_write_header(AVFormatContext *s);
|
|
|
|
/**
|
|
* Write a packet to an output media file.
|
|
*
|
|
* The packet shall contain one audio or video frame.
|
|
* The packet must be correctly interleaved according to the container
|
|
* specification, if not then av_interleaved_write_frame must be used.
|
|
*
|
|
* @param s media file handle
|
|
* @param pkt The packet, which contains the stream_index, buf/buf_size,
|
|
dts/pts, ...
|
|
* @return < 0 on error, = 0 if OK, 1 if end of stream wanted
|
|
*/
|
|
int av_write_frame(AVFormatContext *s, AVPacket *pkt);
|
|
|
|
/**
|
|
* Write a packet to an output media file ensuring correct interleaving.
|
|
*
|
|
* The packet must contain one audio or video frame.
|
|
* If the packets are already correctly interleaved, the application should
|
|
* call av_write_frame() instead as it is slightly faster. It is also important
|
|
* to keep in mind that completely non-interleaved input will need huge amounts
|
|
* of memory to interleave with this, so it is preferable to interleave at the
|
|
* demuxer level.
|
|
*
|
|
* @param s media file handle
|
|
* @param pkt The packet, which contains the stream_index, buf/buf_size,
|
|
dts/pts, ...
|
|
* @return < 0 on error, = 0 if OK, 1 if end of stream wanted
|
|
*/
|
|
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
|
|
|
|
/**
|
|
* Interleave a packet per dts in an output media file.
|
|
*
|
|
* Packets with pkt->destruct == av_destruct_packet will be freed inside this
|
|
* function, so they cannot be used after it. Note that calling av_free_packet()
|
|
* on them is still safe.
|
|
*
|
|
* @param s media file handle
|
|
* @param out the interleaved packet will be output here
|
|
* @param pkt the input packet
|
|
* @param flush 1 if no further packets are available as input and all
|
|
* remaining packets should be output
|
|
* @return 1 if a packet was output, 0 if no packet could be output,
|
|
* < 0 if an error occurred
|
|
*/
|
|
int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
|
|
AVPacket *pkt, int flush);
|
|
|
|
/**
|
|
* Write the stream trailer to an output media file and free the
|
|
* file private data.
|
|
*
|
|
* May only be called after a successful call to av_write_header.
|
|
*
|
|
* @param s media file handle
|
|
* @return 0 if OK, AVERROR_xxx on error
|
|
*/
|
|
int av_write_trailer(AVFormatContext *s);
|
|
|
|
#if FF_API_DUMP_FORMAT
|
|
/**
|
|
* @deprecated Deprecated in favor of av_dump_format().
|
|
*/
|
|
attribute_deprecated void dump_format(AVFormatContext *ic,
|
|
int index,
|
|
const char *url,
|
|
int is_output);
|
|
#endif
|
|
|
|
void av_dump_format(AVFormatContext *ic,
|
|
int index,
|
|
const char *url,
|
|
int is_output);
|
|
|
|
#if FF_API_PARSE_FRAME_PARAM
|
|
/**
|
|
* Parse width and height out of string str.
|
|
* @deprecated Use av_parse_video_frame_size instead.
|
|
*/
|
|
attribute_deprecated int parse_image_size(int *width_ptr, int *height_ptr,
|
|
const char *str);
|
|
|
|
/**
|
|
* Convert framerate from a string to a fraction.
|
|
* @deprecated Use av_parse_video_frame_rate instead.
|
|
*/
|
|
attribute_deprecated int parse_frame_rate(int *frame_rate, int *frame_rate_base,
|
|
const char *arg);
|
|
#endif
|
|
|
|
#if FF_API_PARSE_DATE
|
|
/**
|
|
* Parse datestr and return a corresponding number of microseconds.
|
|
*
|
|
* @param datestr String representing a date or a duration.
|
|
* See av_parse_time() for the syntax of the provided string.
|
|
* @deprecated in favor of av_parse_time()
|
|
*/
|
|
attribute_deprecated
|
|
int64_t parse_date(const char *datestr, int duration);
|
|
#endif
|
|
|
|
/**
|
|
* Get the current time in microseconds.
|
|
*/
|
|
int64_t av_gettime(void);
|
|
|
|
#if FF_API_FIND_INFO_TAG
|
|
/**
|
|
* @deprecated use av_find_info_tag in libavutil instead.
|
|
*/
|
|
attribute_deprecated int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info);
|
|
#endif
|
|
|
|
/**
|
|
* Return in 'buf' the path with '%d' replaced by a number.
|
|
*
|
|
* Also handles the '%0nd' format where 'n' is the total number
|
|
* of digits and '%%'.
|
|
*
|
|
* @param buf destination buffer
|
|
* @param buf_size destination buffer size
|
|
* @param path numbered sequence string
|
|
* @param number frame number
|
|
* @return 0 if OK, -1 on format error
|
|
*/
|
|
int av_get_frame_filename(char *buf, int buf_size,
|
|
const char *path, int number);
|
|
|
|
/**
|
|
* Check whether filename actually is a numbered sequence generator.
|
|
*
|
|
* @param filename possible numbered sequence string
|
|
* @return 1 if a valid numbered sequence string, 0 otherwise
|
|
*/
|
|
int av_filename_number_test(const char *filename);
|
|
|
|
/**
|
|
* Generate an SDP for an RTP session.
|
|
*
|
|
* @param ac array of AVFormatContexts describing the RTP streams. If the
|
|
* array is composed by only one context, such context can contain
|
|
* multiple AVStreams (one AVStream per RTP stream). Otherwise,
|
|
* all the contexts in the array (an AVCodecContext per RTP stream)
|
|
* must contain only one AVStream.
|
|
* @param n_files number of AVCodecContexts contained in ac
|
|
* @param buf buffer where the SDP will be stored (must be allocated by
|
|
* the caller)
|
|
* @param size the size of the buffer
|
|
* @return 0 if OK, AVERROR_xxx on error
|
|
*/
|
|
int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size);
|
|
|
|
#if FF_API_SDP_CREATE
|
|
attribute_deprecated int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size);
|
|
#endif
|
|
|
|
/**
|
|
* Return a positive value if the given filename has one of the given
|
|
* extensions, 0 otherwise.
|
|
*
|
|
* @param extensions a comma-separated list of filename extensions
|
|
*/
|
|
int av_match_ext(const char *filename, const char *extensions);
|
|
|
|
#endif /* AVFORMAT_AVFORMAT_H */
|