Updated FFmpeg.

CQTexperiment
Christopher Snowhill 2017-03-12 21:00:18 -07:00
parent 3d0d0ee24f
commit b8110b85de
20 changed files with 224 additions and 109 deletions

View File

@ -6,13 +6,9 @@
--disable-postproc --disable-swresample --disable-avfilter\ --disable-postproc --disable-swresample --disable-avfilter\
--disable-swscale --disable-network --disable-swscale-alpha --disable-vdpau\ --disable-swscale --disable-network --disable-swscale-alpha --disable-vdpau\
--disable-dxva2 --disable-everything --enable-hwaccels\ --disable-dxva2 --disable-everything --enable-hwaccels\
--enable-parser=ac3,mpegaudio,xma\ --enable-parser=ac3,mpegaudio,xma,vorbis\
--enable-demuxer=ac3,asf,xwma,mov,oma,ogg,tak,dsf,wav,aac,dts,dtshd,mp3\ --enable-demuxer=ac3,asf,xwma,mov,oma,ogg,tak,dsf,wav,aac,dts,dtshd,mp3,bink,flac,msf,xmv,caf\
--enable-demuxer=bink,flac,msf,xmv\ --enable-decoder=ac3,wmapro,wmav1,wmav2,wmavoice,wmalossless,xma1,xma2,dca,tak,dsd_lsbf,dsd_lsbf_planar,dsd_mbf,dsd_msbf_planar,aac,atrac3,atrac3p,mp3float,bink,binkaudio_dct,binkaudio_rdft,flac,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,vorbis\
--enable-decoder=ac3,wmapro,wmav1,wmav2,wmavoice,wmalossless,xma1,xma2\
--enable-decoder=dca,tak,dsd_lsbf,dsd_lsbf_planar,dsd_msbf,dsd_msbf_planar\
--enable-decoder=aac,atrac3,atrac3p,mp3float,bink,binkaudio_dct,binkaudio_rdft\
--enable-decoder=flac,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,theora\
--disable-parser=mpeg4video,h263\ --disable-parser=mpeg4video,h263\
--disable-decoder=mpeg2video,h263,h264,mpeg1video,mpeg2video,mpeg4,hevc,vp9\ --disable-decoder=mpeg2video,h263,h264,mpeg1video,mpeg2video,mpeg4,hevc,vp9\
--disable-version3 --disable-version3

View File

@ -112,6 +112,12 @@
* are filled. This situation is handled transparently if you follow the steps * are filled. This situation is handled transparently if you follow the steps
* outlined above. * outlined above.
* *
* In theory, sending input can result in EAGAIN - this should happen only if
* not all output was received. You can use this to structure alternative decode
* or encode loops other than the one suggested above. For example, you could
* try sending new input on each iteration, and try to receive output if that
* returns EAGAIN.
*
* End of stream situations. These require "flushing" (aka draining) the codec, * End of stream situations. These require "flushing" (aka draining) the codec,
* as the codec might buffer multiple frames or packets internally for * as the codec might buffer multiple frames or packets internally for
* performance or out of necessity (consider B-frames). * performance or out of necessity (consider B-frames).
@ -146,7 +152,8 @@
* Unlike with the old video decoding API, multiple frames might result from * Unlike with the old video decoding API, multiple frames might result from
* a packet. For audio, splitting the input packet into frames by partially * a packet. For audio, splitting the input packet into frames by partially
* decoding packets becomes transparent to the API user. You never need to * decoding packets becomes transparent to the API user. You never need to
* feed an AVPacket to the API twice. * feed an AVPacket to the API twice (unless it is rejected with EAGAIN - then
* no data was read from the packet).
* Additionally, sending a flush/draining packet is required only once. * Additionally, sending a flush/draining packet is required only once.
* - avcodec_encode_video2()/avcodec_encode_audio2(): * - avcodec_encode_video2()/avcodec_encode_audio2():
* Use avcodec_send_frame() to feed input to the encoder, then use * Use avcodec_send_frame() to feed input to the encoder, then use
@ -159,7 +166,22 @@
* and will result in undefined behavior. * and will result in undefined behavior.
* *
* Some codecs might require using the new API; using the old API will return * Some codecs might require using the new API; using the old API will return
* an error when calling it. * an error when calling it. All codecs support the new API.
*
* A codec is not allowed to return EAGAIN for both sending and receiving. This
* would be an invalid state, which could put the codec user into an endless
* loop. The API has no concept of time either: it cannot happen that trying to
* do avcodec_send_packet() results in EAGAIN, but a repeated call 1 second
* later accepts the packet (with no other receive/flush API calls involved).
* The API is a strict state machine, and the passage of time is not supposed
* to influence it. Some timing-dependent behavior might still be deemed
* acceptable in certain cases. But it must never result in both send/receive
* returning EAGAIN at the same time at any point. It must also absolutely be
* avoided that the current state is "unstable" and can "flip-flop" between
* the send/receive APIs allowing progress. For example, it's not allowed that
* the codec randomly decides that it actually wants to consume a packet now
* instead of returning a frame, after it just returned EAGAIN on an
* avcodec_send_packet() call.
* @} * @}
*/ */
@ -414,6 +436,10 @@ enum AVCodecID {
AV_CODEC_ID_PSD, AV_CODEC_ID_PSD,
AV_CODEC_ID_PIXLET, AV_CODEC_ID_PIXLET,
AV_CODEC_ID_SPEEDHQ, AV_CODEC_ID_SPEEDHQ,
AV_CODEC_ID_FMVC,
AV_CODEC_ID_SCPR,
AV_CODEC_ID_CLEARVIDEO,
AV_CODEC_ID_XPM,
/* various PCM "codecs" */ /* various PCM "codecs" */
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
@ -603,6 +629,8 @@ enum AVCodecID {
AV_CODEC_ID_XMA1, AV_CODEC_ID_XMA1,
AV_CODEC_ID_XMA2, AV_CODEC_ID_XMA2,
AV_CODEC_ID_DST, AV_CODEC_ID_DST,
AV_CODEC_ID_ATRAC3AL,
AV_CODEC_ID_ATRAC3PAL,
/* subtitle codecs */ /* subtitle codecs */
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
@ -1676,7 +1704,7 @@ enum AVFieldOrder {
* New fields can be added to the end with minor version bumps. * New fields can be added to the end with minor version bumps.
* Removal, reordering and changes to existing fields require a major * Removal, reordering and changes to existing fields require a major
* version bump. * version bump.
* Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user
* applications. * applications.
* The name string for AVOptions options matches the associated command line * The name string for AVOptions options matches the associated command line
* parameter name and can be found in libavcodec/options_table.h * parameter name and can be found in libavcodec/options_table.h
@ -2947,8 +2975,8 @@ typedef struct AVCodecContext {
#define FF_DEBUG_MMCO 0x00000800 #define FF_DEBUG_MMCO 0x00000800
#define FF_DEBUG_BUGS 0x00001000 #define FF_DEBUG_BUGS 0x00001000
#if FF_API_DEBUG_MV #if FF_API_DEBUG_MV
#define FF_DEBUG_VIS_QP 0x00002000 ///< only access through AVOptions from outside libavcodec #define FF_DEBUG_VIS_QP 0x00002000
#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec #define FF_DEBUG_VIS_MB_TYPE 0x00004000
#endif #endif
#define FF_DEBUG_BUFFERS 0x00008000 #define FF_DEBUG_BUFFERS 0x00008000
#define FF_DEBUG_THREADS 0x00010000 #define FF_DEBUG_THREADS 0x00010000
@ -2958,7 +2986,6 @@ typedef struct AVCodecContext {
#if FF_API_DEBUG_MV #if FF_API_DEBUG_MV
/** /**
* debug * debug
* Code outside libavcodec should access this field using AVOptions
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: Set by user.
*/ */
@ -3093,8 +3120,6 @@ typedef struct AVCodecContext {
* low resolution decoding, 1-> 1/2 size, 2->1/4 size * low resolution decoding, 1-> 1/2 size, 2->1/4 size
* - encoding: unused * - encoding: unused
* - decoding: Set by user. * - decoding: Set by user.
* Code outside libavcodec should access this field using:
* av_codec_{get,set}_lowres(avctx)
*/ */
int lowres; int lowres;
#endif #endif
@ -3395,8 +3420,6 @@ typedef struct AVCodecContext {
/** /**
* Timebase in which pkt_dts/pts and AVPacket.dts/pts are. * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
* Code outside libavcodec should access this field using:
* av_codec_{get,set}_pkt_timebase(avctx)
* - encoding unused. * - encoding unused.
* - decoding set by user. * - decoding set by user.
*/ */
@ -3404,8 +3427,6 @@ typedef struct AVCodecContext {
/** /**
* AVCodecDescriptor * AVCodecDescriptor
* Code outside libavcodec should access this field using:
* av_codec_{get,set}_codec_descriptor(avctx)
* - encoding: unused. * - encoding: unused.
* - decoding: set by libavcodec. * - decoding: set by libavcodec.
*/ */
@ -3416,8 +3437,6 @@ typedef struct AVCodecContext {
* low resolution decoding, 1-> 1/2 size, 2->1/4 size * low resolution decoding, 1-> 1/2 size, 2->1/4 size
* - encoding: unused * - encoding: unused
* - decoding: Set by user. * - decoding: Set by user.
* Code outside libavcodec should access this field using:
* av_codec_{get,set}_lowres(avctx)
*/ */
int lowres; int lowres;
#endif #endif
@ -3458,7 +3477,6 @@ typedef struct AVCodecContext {
* However for formats that do not use pre-multiplied alpha * However for formats that do not use pre-multiplied alpha
* there might be serious artefacts (though e.g. libswscale currently * there might be serious artefacts (though e.g. libswscale currently
* assumes pre-multiplied alpha anyway). * assumes pre-multiplied alpha anyway).
* Code outside libavcodec should access this field using AVOptions
* *
* - decoding: set by user * - decoding: set by user
* - encoding: unused * - encoding: unused
@ -3475,7 +3493,6 @@ typedef struct AVCodecContext {
#if !FF_API_DEBUG_MV #if !FF_API_DEBUG_MV
/** /**
* debug motion vectors * debug motion vectors
* Code outside libavcodec should access this field using AVOptions
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: Set by user.
*/ */
@ -3487,7 +3504,6 @@ typedef struct AVCodecContext {
/** /**
* custom intra quantization matrix * custom intra quantization matrix
* Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()
* - encoding: Set by user, can be NULL. * - encoding: Set by user, can be NULL.
* - decoding: unused. * - decoding: unused.
*/ */
@ -3496,8 +3512,6 @@ typedef struct AVCodecContext {
/** /**
* dump format separator. * dump format separator.
* can be ", " or "\n " or anything else * can be ", " or "\n " or anything else
* Code outside libavcodec should access this field using AVOptions
* (NO direct access).
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: Set by user.
*/ */
@ -3507,13 +3521,12 @@ typedef struct AVCodecContext {
* ',' separated list of allowed decoders. * ',' separated list of allowed decoders.
* If NULL then all are allowed * If NULL then all are allowed
* - encoding: unused * - encoding: unused
* - decoding: set by user through AVOPtions (NO direct access) * - decoding: set by user
*/ */
char *codec_whitelist; char *codec_whitelist;
/* /*
* Properties of the stream that gets decoded * Properties of the stream that gets decoded
* To be accessed through av_codec_get_properties() (NO direct access)
* - encoding: unused * - encoding: unused
* - decoding: set by libavcodec * - decoding: set by libavcodec
*/ */
@ -3533,7 +3546,8 @@ typedef struct AVCodecContext {
/** /**
* A reference to the AVHWFramesContext describing the input (for encoding) * A reference to the AVHWFramesContext describing the input (for encoding)
* or output (decoding) frames. The reference is set by the caller and * or output (decoding) frames. The reference is set by the caller and
* afterwards owned (and freed) by libavcodec. * afterwards owned (and freed) by libavcodec - it should never be read by
* the caller after being set.
* *
* - decoding: This field should be set by the caller from the get_format() * - decoding: This field should be set by the caller from the get_format()
* callback. The previous reference (if any) will always be * callback. The previous reference (if any) will always be
@ -3583,6 +3597,27 @@ typedef struct AVCodecContext {
*/ */
int64_t max_pixels; int64_t max_pixels;
/**
* A reference to the AVHWDeviceContext describing the device which will
* be used by a hardware encoder/decoder. The reference is set by the
* caller and afterwards owned (and freed) by libavcodec.
*
* This should be used if either the codec device does not require
* hardware frames or any that are used are to be allocated internally by
* libavcodec. If the user wishes to supply any of the frames used as
* encoder input or decoder output then hw_frames_ctx should be used
* instead. When hw_frames_ctx is set in get_format() for a decoder, this
* field will be ignored while decoding the associated stream segment, but
* may again be used on a following one after another get_format() call.
*
* For both encoders and decoders this field should be set before
* avcodec_open2() is called and must not be written to thereafter.
*
* Note that some decoders may require this field to be set initially in
* order to support hw_frames_ctx at all - in that case, all frames
* contexts used must be created on the same device.
*/
AVBufferRef *hw_device_ctx;
} AVCodecContext; } AVCodecContext;
AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx);
@ -3642,7 +3677,7 @@ typedef struct AVCodec {
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres() uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
const AVClass *priv_class; ///< AVClass for the private context const AVClass *priv_class; ///< AVClass for the private context
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
@ -4902,8 +4937,10 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
* a flush packet. * a flush packet.
* *
* @return 0 on success, otherwise negative error code: * @return 0 on success, otherwise negative error code:
* AVERROR(EAGAIN): input is not accepted right now - the packet must be * AVERROR(EAGAIN): input is not accepted in the current state - user
* resent after trying to read output * must read output with avcodec_receive_frame() (once
* all output is read, the packet should be resent, and
* the call will not fail with EAGAIN).
* AVERROR_EOF: the decoder has been flushed, and no new packets can * AVERROR_EOF: the decoder has been flushed, and no new packets can
* be sent to it (also returned if more than 1 flush * be sent to it (also returned if more than 1 flush
* packet is sent) * packet is sent)
@ -4924,7 +4961,7 @@ int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);
* *
* @return * @return
* 0: success, a frame was returned * 0: success, a frame was returned
* AVERROR(EAGAIN): output is not available right now - user must try * AVERROR(EAGAIN): output is not available in this state - user must try
* to send new input * to send new input
* AVERROR_EOF: the decoder has been fully flushed, and there will be * AVERROR_EOF: the decoder has been fully flushed, and there will be
* no more output frames * no more output frames
@ -4957,8 +4994,10 @@ int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);
* avctx->frame_size for all frames except the last. * avctx->frame_size for all frames except the last.
* The final frame may be smaller than avctx->frame_size. * The final frame may be smaller than avctx->frame_size.
* @return 0 on success, otherwise negative error code: * @return 0 on success, otherwise negative error code:
* AVERROR(EAGAIN): input is not accepted right now - the frame must be * AVERROR(EAGAIN): input is not accepted in the current state - user
* resent after trying to read output packets * must read output with avcodec_receive_packet() (once
* all output is read, the packet should be resent, and
* the call will not fail with EAGAIN).
* AVERROR_EOF: the encoder has been flushed, and no new frames can * AVERROR_EOF: the encoder has been flushed, and no new frames can
* be sent to it * be sent to it
* AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a
@ -4976,8 +5015,8 @@ int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);
* encoder. Note that the function will always call * encoder. Note that the function will always call
* av_frame_unref(frame) before doing anything else. * av_frame_unref(frame) before doing anything else.
* @return 0 on success, otherwise negative error code: * @return 0 on success, otherwise negative error code:
* AVERROR(EAGAIN): output is not available right now - user must try * AVERROR(EAGAIN): output is not available in the current state - user
* to send input * must try to send input
* AVERROR_EOF: the encoder has been fully flushed, and there will be * AVERROR_EOF: the encoder has been fully flushed, and there will be
* no more output packets * no more output packets
* AVERROR(EINVAL): codec not opened, or it is an encoder * AVERROR(EINVAL): codec not opened, or it is an encoder

View File

@ -28,7 +28,7 @@
#include "libavutil/version.h" #include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 75 #define LIBAVCODEC_VERSION_MINOR 83
#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \

View File

@ -58,7 +58,8 @@ typedef struct AVVideotoolboxContext {
/** /**
* CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. * CVPixelBuffer Format Type that Videotoolbox will use for decoded frames.
* set by the caller. * set by the caller. If this is set to 0, then no specific format is
* requested from the decoder, and its native format is output.
*/ */
OSType cv_pix_fmt_type; OSType cv_pix_fmt_type;

View File

@ -1005,7 +1005,9 @@ typedef struct AVStream {
* All fields below this line are not part of the public API. They * All fields below this line are not part of the public API. They
* may not be used outside of libavformat and can be changed and * may not be used outside of libavformat and can be changed and
* removed at will. * removed at will.
* New public fields should be added right above. * Internal note: be aware that physically removing these fields
* will break ABI. Replace removed fields with dummy fields, and
* add new fields to AVStreamInternal.
***************************************************************** *****************************************************************
*/ */
@ -1201,6 +1203,12 @@ typedef struct AVStream {
*/ */
int inject_global_side_data; int inject_global_side_data;
/*****************************************************************
* All fields above this line are not part of the public API.
* Fields below are part of the public API and ABI again.
*****************************************************************
*/
/** /**
* String containing paris of key and values describing recommended encoder configuration. * String containing paris of key and values describing recommended encoder configuration.
* Paris are separated by ','. * Paris are separated by ','.
@ -1649,7 +1657,7 @@ typedef struct AVFormatContext {
/** /**
* Audio preload in microseconds. * Audio preload in microseconds.
* Note, not all formats support this and unpredictable things may happen if it is used when not supported. * Note, not all formats support this and unpredictable things may happen if it is used when not supported.
* - encoding: Set by user via AVOptions (NO direct access) * - encoding: Set by user
* - decoding: unused * - decoding: unused
*/ */
int audio_preload; int audio_preload;
@ -1657,7 +1665,7 @@ typedef struct AVFormatContext {
/** /**
* Max chunk time in microseconds. * Max chunk time in microseconds.
* Note, not all formats support this and unpredictable things may happen if it is used when not supported. * Note, not all formats support this and unpredictable things may happen if it is used when not supported.
* - encoding: Set by user via AVOptions (NO direct access) * - encoding: Set by user
* - decoding: unused * - decoding: unused
*/ */
int max_chunk_duration; int max_chunk_duration;
@ -1665,7 +1673,7 @@ typedef struct AVFormatContext {
/** /**
* Max chunk size in bytes * Max chunk size in bytes
* Note, not all formats support this and unpredictable things may happen if it is used when not supported. * Note, not all formats support this and unpredictable things may happen if it is used when not supported.
* - encoding: Set by user via AVOptions (NO direct access) * - encoding: Set by user
* - decoding: unused * - decoding: unused
*/ */
int max_chunk_size; int max_chunk_size;
@ -1674,14 +1682,14 @@ typedef struct AVFormatContext {
* forces the use of wallclock timestamps as pts/dts of packets * forces the use of wallclock timestamps as pts/dts of packets
* This has undefined results in the presence of B frames. * This has undefined results in the presence of B frames.
* - encoding: unused * - encoding: unused
* - decoding: Set by user via AVOptions (NO direct access) * - decoding: Set by user
*/ */
int use_wallclock_as_timestamps; int use_wallclock_as_timestamps;
/** /**
* avio flags, used to force AVIO_FLAG_DIRECT. * avio flags, used to force AVIO_FLAG_DIRECT.
* - encoding: unused * - encoding: unused
* - decoding: Set by user via AVOptions (NO direct access) * - decoding: Set by user
*/ */
int avio_flags; int avio_flags;
@ -1689,34 +1697,34 @@ typedef struct AVFormatContext {
* The duration field can be estimated through various ways, and this field can be used * The duration field can be estimated through various ways, and this field can be used
* to know how the duration was estimated. * to know how the duration was estimated.
* - encoding: unused * - encoding: unused
* - decoding: Read by user via AVOptions (NO direct access) * - decoding: Read by user
*/ */
enum AVDurationEstimationMethod duration_estimation_method; enum AVDurationEstimationMethod duration_estimation_method;
/** /**
* Skip initial bytes when opening stream * Skip initial bytes when opening stream
* - encoding: unused * - encoding: unused
* - decoding: Set by user via AVOptions (NO direct access) * - decoding: Set by user
*/ */
int64_t skip_initial_bytes; int64_t skip_initial_bytes;
/** /**
* Correct single timestamp overflows * Correct single timestamp overflows
* - encoding: unused * - encoding: unused
* - decoding: Set by user via AVOptions (NO direct access) * - decoding: Set by user
*/ */
unsigned int correct_ts_overflow; unsigned int correct_ts_overflow;
/** /**
* Force seeking to any (also non key) frames. * Force seeking to any (also non key) frames.
* - encoding: unused * - encoding: unused
* - decoding: Set by user via AVOptions (NO direct access) * - decoding: Set by user
*/ */
int seek2any; int seek2any;
/** /**
* Flush the I/O context after each packet. * Flush the I/O context after each packet.
* - encoding: Set by user via AVOptions (NO direct access) * - encoding: Set by user
* - decoding: unused * - decoding: unused
*/ */
int flush_packets; int flush_packets;
@ -1726,14 +1734,14 @@ typedef struct AVFormatContext {
* The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes
* the format. * the format.
* - encoding: unused * - encoding: unused
* - decoding: set by avformat, read by user via av_format_get_probe_score() (NO direct access) * - decoding: set by avformat, read by user
*/ */
int probe_score; int probe_score;
/** /**
* number of bytes to read maximally to identify format. * number of bytes to read maximally to identify format.
* - encoding: unused * - encoding: unused
* - decoding: set by user through AVOPtions (NO direct access) * - decoding: set by user
*/ */
int format_probesize; int format_probesize;
@ -1741,7 +1749,7 @@ typedef struct AVFormatContext {
* ',' separated list of allowed decoders. * ',' separated list of allowed decoders.
* If NULL then all are allowed * If NULL then all are allowed
* - encoding: unused * - encoding: unused
* - decoding: set by user through AVOptions (NO direct access) * - decoding: set by user
*/ */
char *codec_whitelist; char *codec_whitelist;
@ -1749,7 +1757,7 @@ typedef struct AVFormatContext {
* ',' separated list of allowed demuxers. * ',' separated list of allowed demuxers.
* If NULL then all are allowed * If NULL then all are allowed
* - encoding: unused * - encoding: unused
* - decoding: set by user through AVOptions (NO direct access) * - decoding: set by user
*/ */
char *format_whitelist; char *format_whitelist;
@ -1771,7 +1779,7 @@ typedef struct AVFormatContext {
* Forced video codec. * Forced video codec.
* This allows forcing a specific decoder, even when there are multiple with * This allows forcing a specific decoder, even when there are multiple with
* the same codec_id. * the same codec_id.
* Demuxing: Set by user via av_format_set_video_codec (NO direct access). * Demuxing: Set by user
*/ */
AVCodec *video_codec; AVCodec *video_codec;
@ -1779,7 +1787,7 @@ typedef struct AVFormatContext {
* Forced audio codec. * Forced audio codec.
* This allows forcing a specific decoder, even when there are multiple with * This allows forcing a specific decoder, even when there are multiple with
* the same codec_id. * the same codec_id.
* Demuxing: Set by user via av_format_set_audio_codec (NO direct access). * Demuxing: Set by user
*/ */
AVCodec *audio_codec; AVCodec *audio_codec;
@ -1787,7 +1795,7 @@ typedef struct AVFormatContext {
* Forced subtitle codec. * Forced subtitle codec.
* This allows forcing a specific decoder, even when there are multiple with * This allows forcing a specific decoder, even when there are multiple with
* the same codec_id. * the same codec_id.
* Demuxing: Set by user via av_format_set_subtitle_codec (NO direct access). * Demuxing: Set by user
*/ */
AVCodec *subtitle_codec; AVCodec *subtitle_codec;
@ -1795,7 +1803,7 @@ typedef struct AVFormatContext {
* Forced data codec. * Forced data codec.
* This allows forcing a specific decoder, even when there are multiple with * This allows forcing a specific decoder, even when there are multiple with
* the same codec_id. * the same codec_id.
* Demuxing: Set by user via av_format_set_data_codec (NO direct access). * Demuxing: Set by user
*/ */
AVCodec *data_codec; AVCodec *data_codec;
@ -1819,15 +1827,13 @@ typedef struct AVFormatContext {
/** /**
* Output timestamp offset, in microseconds. * Output timestamp offset, in microseconds.
* Muxing: set by user via AVOptions (NO direct access) * Muxing: set by user
*/ */
int64_t output_ts_offset; int64_t output_ts_offset;
/** /**
* dump format separator. * dump format separator.
* can be ", " or "\n " or anything else * can be ", " or "\n " or anything else
* Code outside libavformat should access this field using AVOptions
* (NO direct access).
* - muxing: Set by user. * - muxing: Set by user.
* - demuxing: Set by user. * - demuxing: Set by user.
*/ */
@ -1864,7 +1870,7 @@ typedef struct AVFormatContext {
/** /**
* ',' separated list of allowed protocols. * ',' separated list of allowed protocols.
* - encoding: unused * - encoding: unused
* - decoding: set by user through AVOptions (NO direct access) * - decoding: set by user
*/ */
char *protocol_whitelist; char *protocol_whitelist;
@ -1899,18 +1905,22 @@ typedef struct AVFormatContext {
/** /**
* ',' separated list of disallowed protocols. * ',' separated list of disallowed protocols.
* - encoding: unused * - encoding: unused
* - decoding: set by user through AVOptions (NO direct access) * - decoding: set by user
*/ */
char *protocol_blacklist; char *protocol_blacklist;
/** /**
* The maximum number of streams. * The maximum number of streams.
* - encoding: unused * - encoding: unused
* - decoding: set by user through AVOptions (NO direct access) * - decoding: set by user
*/ */
int max_streams; int max_streams;
} AVFormatContext; } AVFormatContext;
/**
* Accessors for some AVFormatContext fields. These used to be provided for ABI
* compatibility, and do not need to be used anymore.
*/
int av_format_get_probe_score(const AVFormatContext *s); int av_format_get_probe_score(const AVFormatContext *s);
AVCodec * av_format_get_video_codec(const AVFormatContext *s); AVCodec * av_format_get_video_codec(const AVFormatContext *s);
void av_format_set_video_codec(AVFormatContext *s, AVCodec *c); void av_format_set_video_codec(AVFormatContext *s, AVCodec *c);

View File

@ -313,6 +313,12 @@ typedef struct AVIOContext {
*/ */
enum AVIODataMarkerType current_type; enum AVIODataMarkerType current_type;
int64_t last_time; int64_t last_time;
/**
* A callback that is used instead of short_seek_threshold.
* This is current internal only, do not use from outside.
*/
int (*short_seek_get)(void *opaque);
} AVIOContext; } AVIOContext;
/** /**

View File

@ -32,8 +32,8 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here // Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 57 #define LIBAVFORMAT_VERSION_MAJOR 57
#define LIBAVFORMAT_VERSION_MINOR 65 #define LIBAVFORMAT_VERSION_MINOR 66
#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_MICRO 104
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \ LIBAVFORMAT_VERSION_MINOR, \
@ -85,6 +85,10 @@
#ifndef FF_API_HTTP_USER_AGENT #ifndef FF_API_HTTP_USER_AGENT
#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 58) #define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 58)
#endif #endif
#ifndef FF_API_HLS_WRAP
#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 58)
#endif
#ifndef FF_API_R_FRAME_RATE #ifndef FF_API_R_FRAME_RATE
#define FF_API_R_FRAME_RATE 1 #define FF_API_R_FRAME_RATE 1

View File

@ -121,8 +121,7 @@
#endif #endif
#endif #endif
#if defined(__GNUC__) || defined(__clang__)
#if defined(__GNUC__)
# define av_unused __attribute__((unused)) # define av_unused __attribute__((unused))
#else #else
# define av_unused # define av_unused
@ -133,7 +132,7 @@
* away. This is useful for variables accessed only from inline * away. This is useful for variables accessed only from inline
* assembler without the compiler being aware. * assembler without the compiler being aware.
*/ */
#if AV_GCC_VERSION_AT_LEAST(3,1) #if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__)
# define av_used __attribute__((used)) # define av_used __attribute__((used))
#else #else
# define av_used # define av_used

View File

@ -39,6 +39,7 @@
#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster #define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster
///< than regular MMX/SSE (e.g. Core1) ///< than regular MMX/SSE (e.g. Core1)
#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions #define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions
#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster
#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower #define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower
#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions #define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions #define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions

View File

@ -1,5 +1,5 @@
/* Automatically generated by version.sh, do not manually edit! */ /* Automatically generated by version.sh, do not manually edit! */
#ifndef AVUTIL_FFVERSION_H #ifndef AVUTIL_FFVERSION_H
#define AVUTIL_FFVERSION_H #define AVUTIL_FFVERSION_H
#define FFMPEG_VERSION "N-83255-g6d83f20" #define FFMPEG_VERSION "N-83885-g967feea"
#endif /* AVUTIL_FFVERSION_H */ #endif /* AVUTIL_FFVERSION_H */

View File

@ -179,9 +179,6 @@ typedef struct AVFrameSideData {
* *
* sizeof(AVFrame) is not a part of the public ABI, so new fields may be added * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
* to the end with a minor bump. * to the end with a minor bump.
* Similarly fields that are marked as to be only accessed by
* av_opt_ptr() can be reordered. This allows 2 forks to add fields
* without breaking compatibility with each other.
* *
* Fields can be accessed through AVOptions, the name string used, matches the * Fields can be accessed through AVOptions, the name string used, matches the
* C structure field name for fields accessible through AVOptions. The AVClass * C structure field name for fields accessible through AVOptions. The AVClass
@ -420,8 +417,6 @@ typedef struct AVFrame {
/** /**
* MPEG vs JPEG YUV range. * MPEG vs JPEG YUV range.
* It must be accessed using av_frame_get_color_range() and
* av_frame_set_color_range().
* - encoding: Set by user * - encoding: Set by user
* - decoding: Set by libavcodec * - decoding: Set by libavcodec
*/ */
@ -433,8 +428,6 @@ typedef struct AVFrame {
/** /**
* YUV colorspace type. * YUV colorspace type.
* It must be accessed using av_frame_get_colorspace() and
* av_frame_set_colorspace().
* - encoding: Set by user * - encoding: Set by user
* - decoding: Set by libavcodec * - decoding: Set by libavcodec
*/ */
@ -444,8 +437,6 @@ typedef struct AVFrame {
/** /**
* frame timestamp estimated using various heuristics, in stream time base * frame timestamp estimated using various heuristics, in stream time base
* Code outside libavutil should access this field using:
* av_frame_get_best_effort_timestamp(frame)
* - encoding: unused * - encoding: unused
* - decoding: set by libavcodec, read by user. * - decoding: set by libavcodec, read by user.
*/ */
@ -453,8 +444,6 @@ typedef struct AVFrame {
/** /**
* reordered pos from the last AVPacket that has been input into the decoder * reordered pos from the last AVPacket that has been input into the decoder
* Code outside libavutil should access this field using:
* av_frame_get_pkt_pos(frame)
* - encoding: unused * - encoding: unused
* - decoding: Read by user. * - decoding: Read by user.
*/ */
@ -463,8 +452,6 @@ typedef struct AVFrame {
/** /**
* duration of the corresponding packet, expressed in * duration of the corresponding packet, expressed in
* AVStream->time_base units, 0 if unknown. * AVStream->time_base units, 0 if unknown.
* Code outside libavutil should access this field using:
* av_frame_get_pkt_duration(frame)
* - encoding: unused * - encoding: unused
* - decoding: Read by user. * - decoding: Read by user.
*/ */
@ -472,8 +459,6 @@ typedef struct AVFrame {
/** /**
* metadata. * metadata.
* Code outside libavutil should access this field using:
* av_frame_get_metadata(frame)
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by libavcodec. * - decoding: Set by libavcodec.
*/ */
@ -483,8 +468,6 @@ typedef struct AVFrame {
* decode error flags of the frame, set to a combination of * decode error flags of the frame, set to a combination of
* FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
* were errors during the decoding. * were errors during the decoding.
* Code outside libavutil should access this field using:
* av_frame_get_decode_error_flags(frame)
* - encoding: unused * - encoding: unused
* - decoding: set by libavcodec, read by user. * - decoding: set by libavcodec, read by user.
*/ */
@ -494,8 +477,6 @@ typedef struct AVFrame {
/** /**
* number of audio channels, only used for audio. * number of audio channels, only used for audio.
* Code outside libavutil should access this field using:
* av_frame_get_channels(frame)
* - encoding: unused * - encoding: unused
* - decoding: Read by user. * - decoding: Read by user.
*/ */
@ -503,8 +484,7 @@ typedef struct AVFrame {
/** /**
* size of the corresponding packet containing the compressed * size of the corresponding packet containing the compressed
* frame. It must be accessed using av_frame_get_pkt_size() and * frame.
* av_frame_set_pkt_size().
* It is set to a negative value if unknown. * It is set to a negative value if unknown.
* - encoding: unused * - encoding: unused
* - decoding: set by libavcodec, read by user. * - decoding: set by libavcodec, read by user.
@ -514,13 +494,11 @@ typedef struct AVFrame {
#if FF_API_FRAME_QP #if FF_API_FRAME_QP
/** /**
* QP table * QP table
* Not to be accessed directly from outside libavutil
*/ */
attribute_deprecated attribute_deprecated
int8_t *qscale_table; int8_t *qscale_table;
/** /**
* QP store stride * QP store stride
* Not to be accessed directly from outside libavutil
*/ */
attribute_deprecated attribute_deprecated
int qstride; int qstride;
@ -528,9 +506,6 @@ typedef struct AVFrame {
attribute_deprecated attribute_deprecated
int qscale_type; int qscale_type;
/**
* Not to be accessed directly from outside libavutil
*/
AVBufferRef *qp_table_buf; AVBufferRef *qp_table_buf;
#endif #endif
/** /**
@ -538,12 +513,22 @@ typedef struct AVFrame {
* AVHWFramesContext describing the frame. * AVHWFramesContext describing the frame.
*/ */
AVBufferRef *hw_frames_ctx; AVBufferRef *hw_frames_ctx;
/**
* AVBufferRef for free use by the API user. FFmpeg will never check the
* contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
* the frame is unreferenced. av_frame_copy_props() calls create a new
* reference with av_buffer_ref() for the target frame's opaque_ref field.
*
* This is unrelated to the opaque field, although it serves a similar
* purpose.
*/
AVBufferRef *opaque_ref;
} AVFrame; } AVFrame;
/** /**
* Accessors for some AVFrame fields. * Accessors for some AVFrame fields. These used to be provided for ABI
* The position of these field in the structure is not part of the ABI, * compatibility, and do not need to be used anymore.
* they should not be accessed directly outside libavutil.
*/ */
int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame);
void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val);

View File

@ -97,7 +97,7 @@
#define DECLARE_ASM_CONST(n,t,v) \ #define DECLARE_ASM_CONST(n,t,v) \
AV_PRAGMA(DATA_ALIGN(v,n)) \ AV_PRAGMA(DATA_ALIGN(v,n)) \
static const t __attribute__((aligned(n))) v static const t __attribute__((aligned(n))) v
#elif defined(__GNUC__) #elif defined(__GNUC__) || defined(__clang__)
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
#define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v
#elif defined(_MSC_VER) #elif defined(_MSC_VER)

View File

@ -63,6 +63,13 @@ enum AVSphericalProjection {
* to the back. * to the back.
*/ */
AV_SPHERICAL_CUBEMAP, AV_SPHERICAL_CUBEMAP,
/**
* Video represents a portion of a sphere mapped on a flat surface
* using equirectangular projection. The @ref bounding fields indicate
* the position of the current video in a larger surface.
*/
AV_SPHERICAL_EQUIRECTANGULAR_TILE,
}; };
/** /**
@ -122,6 +129,57 @@ typedef struct AVSphericalMapping {
/** /**
* @} * @}
*/ */
/**
* @name Bounding rectangle
* @anchor bounding
* @{
* These fields indicate the location of the current tile, and where
* it should be mapped relative to the original surface. They are
* exported as 0.32 fixed point, and can be converted to classic
* pixel values with av_spherical_bounds().
*
* @code{.unparsed}
* +----------------+----------+
* | |bound_top |
* | +--------+ |
* | bound_left |tile | |
* +<---------->| |<--->+bound_right
* | +--------+ |
* | | |
* | bound_bottom| |
* +----------------+----------+
* @endcode
*
* If needed, the original video surface dimensions can be derived
* by adding the current stream or frame size to the related bounds,
* like in the following example:
*
* @code{c}
* original_width = tile->width + bound_left + bound_right;
* original_height = tile->height + bound_top + bound_bottom;
* @endcode
*
* @note These values are valid only for the tiled equirectangular
* projection type (@ref AV_SPHERICAL_EQUIRECTANGULAR_TILE),
* and should be ignored in all other cases.
*/
size_t bound_left; ///< Distance from the left edge
size_t bound_top; ///< Distance from the top edge
size_t bound_right; ///< Distance from the right edge
size_t bound_bottom; ///< Distance from the bottom edge
/**
* @}
*/
/**
* Number of pixels to pad from the edge of each cube face.
*
* @note This value is valid for only for the cubemap projection type
* (@ref AV_SPHERICAL_CUBEMAP), and should be ignored in all other
* cases.
*/
size_t padding;
} AVSphericalMapping; } AVSphericalMapping;
/** /**
@ -132,6 +190,22 @@ typedef struct AVSphericalMapping {
*/ */
AVSphericalMapping *av_spherical_alloc(size_t *size); AVSphericalMapping *av_spherical_alloc(size_t *size);
/**
* Convert the @ref bounding fields from an AVSphericalVideo
* from 0.32 fixed point to pixels.
*
* @param map The AVSphericalVideo map to read bound values from.
* @param width Width of the current frame or stream.
* @param height Height of the current frame or stream.
* @param left Pixels from the left edge.
* @param top Pixels from the top edge.
* @param right Pixels from the right edge.
* @param bottom Pixels from the bottom edge.
*/
void av_spherical_tile_bounds(AVSphericalMapping *map,
size_t width, size_t height,
size_t *left, size_t *top,
size_t *right, size_t *bottom);
/** /**
* @} * @}
* @} * @}

View File

@ -79,7 +79,7 @@
*/ */
#define LIBAVUTIL_VERSION_MAJOR 55 #define LIBAVUTIL_VERSION_MAJOR 55
#define LIBAVUTIL_VERSION_MINOR 45 #define LIBAVUTIL_VERSION_MINOR 48
#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,12 +1,12 @@
prefix=/Users/Chris/Source/Repos/cog/ThirdParty/ffmpeg prefix=/Users/chris/Source/Repos/cog/ThirdParty/ffmpeg
exec_prefix=${prefix} exec_prefix=${prefix}
libdir=${prefix}/lib libdir=${prefix}/lib
includedir=${prefix}/include includedir=${prefix}/include
Name: libavcodec Name: libavcodec
Description: FFmpeg codec library Description: FFmpeg codec library
Version: 57.75.100 Version: 57.83.100
Requires: libavutil >= 55.45.100 Requires: libavutil >= 55.48.100
Requires.private: Requires.private:
Conflicts: Conflicts:
Libs: -L${libdir} -lavcodec -framework QuartzCore -framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo -framework CoreFoundation -framework AudioToolbox -framework CoreMedia -framework VideoDecodeAcceleration -framework CoreFoundation -framework QuartzCore -liconv -Wl,-framework,CoreFoundation -Wl,-framework,Security -lm -lbz2 -lz -pthread -framework CoreServices Libs: -L${libdir} -lavcodec -framework QuartzCore -framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo -framework CoreFoundation -framework AudioToolbox -framework CoreMedia -framework VideoDecodeAcceleration -framework CoreFoundation -framework QuartzCore -liconv -Wl,-framework,CoreFoundation -Wl,-framework,Security -lm -lbz2 -lz -pthread -framework CoreServices

View File

@ -1,12 +1,12 @@
prefix=/Users/Chris/Source/Repos/cog/ThirdParty/ffmpeg prefix=/Users/chris/Source/Repos/cog/ThirdParty/ffmpeg
exec_prefix=${prefix} exec_prefix=${prefix}
libdir=${prefix}/lib libdir=${prefix}/lib
includedir=${prefix}/include includedir=${prefix}/include
Name: libavformat Name: libavformat
Description: FFmpeg container format library Description: FFmpeg container format library
Version: 57.65.100 Version: 57.66.104
Requires: libavcodec >= 57.75.100, libavutil >= 55.45.100 Requires: libavcodec >= 57.83.100, libavutil >= 55.48.100
Requires.private: Requires.private:
Conflicts: Conflicts:
Libs: -L${libdir} -lavformat -framework QuartzCore -framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo -framework CoreFoundation -framework AudioToolbox -framework CoreMedia -framework VideoDecodeAcceleration -framework CoreFoundation -framework QuartzCore -liconv -Wl,-framework,CoreFoundation -Wl,-framework,Security -lm -lbz2 -lz -pthread -framework CoreServices Libs: -L${libdir} -lavformat -framework QuartzCore -framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo -framework CoreFoundation -framework AudioToolbox -framework CoreMedia -framework VideoDecodeAcceleration -framework CoreFoundation -framework QuartzCore -liconv -Wl,-framework,CoreFoundation -Wl,-framework,Security -lm -lbz2 -lz -pthread -framework CoreServices

View File

@ -1,11 +1,11 @@
prefix=/Users/Chris/Source/Repos/cog/ThirdParty/ffmpeg prefix=/Users/chris/Source/Repos/cog/ThirdParty/ffmpeg
exec_prefix=${prefix} exec_prefix=${prefix}
libdir=${prefix}/lib libdir=${prefix}/lib
includedir=${prefix}/include includedir=${prefix}/include
Name: libavutil Name: libavutil
Description: FFmpeg utility library Description: FFmpeg utility library
Version: 55.45.100 Version: 55.48.100
Requires: Requires:
Requires.private: Requires.private:
Conflicts: Conflicts: