Updated FFmpeg to version 4.4
parent
0c648b3b1d
commit
cae132ad79
|
@ -329,10 +329,8 @@ ffmpeg_codec_data* init_ffmpeg_header_offset_subsong(STREAMFILE* sf, uint8_t* he
|
|||
|
||||
/* expose start samples to be skipped (encoder delay, usually added by MDCT-based encoders like AAC/MP3/ATRAC3/XMA/etc)
|
||||
* get after init_seek because some demuxers like AAC only fill skip_samples for the first packet */
|
||||
if (stream->start_skip_samples) /* samples to skip in the first packet */
|
||||
data->skipSamples = stream->start_skip_samples;
|
||||
else if (stream->skip_samples) /* samples to skip in any packet (first in this case), used sometimes instead (ex. AAC) */
|
||||
data->skipSamples = stream->skip_samples;
|
||||
if (stream->start_time)
|
||||
data->skipSamples = av_rescale_q(stream->start_time, stream->time_base, tb);
|
||||
|
||||
/* check ways to skip encoder delay/padding, for debugging purposes (some may be old/unused/encoder only/etc) */
|
||||
VGM_ASSERT(data->codecCtx->delay > 0, "FFMPEG: delay %i\n", (int)data->codecCtx->delay);//delay: OPUS
|
||||
|
@ -340,8 +338,7 @@ ffmpeg_codec_data* init_ffmpeg_header_offset_subsong(STREAMFILE* sf, uint8_t* he
|
|||
VGM_ASSERT(stream->codecpar->initial_padding > 0, "FFMPEG: initial_padding %i\n", (int)stream->codecpar->initial_padding);//delay: OPUS
|
||||
VGM_ASSERT(stream->codecpar->trailing_padding > 0, "FFMPEG: trailing_padding %i\n", (int)stream->codecpar->trailing_padding);
|
||||
VGM_ASSERT(stream->codecpar->seek_preroll > 0, "FFMPEG: seek_preroll %i\n", (int)stream->codecpar->seek_preroll);//seek delay: OPUS
|
||||
VGM_ASSERT(stream->skip_samples > 0, "FFMPEG: skip_samples %i\n", (int)stream->skip_samples); //delay: MP4
|
||||
VGM_ASSERT(stream->start_skip_samples > 0, "FFMPEG: start_skip_samples %i\n", (int)stream->start_skip_samples); //delay: MP3
|
||||
VGM_ASSERT(stream->start_time > 0, "FFMPEG: start_time %i\n", (int)stream->start_time); //delay
|
||||
VGM_ASSERT(stream->first_discard_sample > 0, "FFMPEG: first_discard_sample %i\n", (int)stream->first_discard_sample); //padding: MP3
|
||||
VGM_ASSERT(stream->last_discard_sample > 0, "FFMPEG: last_discard_sample %i\n", (int)stream->last_discard_sample); //padding: MP3
|
||||
/* also negative timestamp for formats like OGG/OPUS */
|
||||
|
@ -795,8 +792,7 @@ void seek_ffmpeg(ffmpeg_codec_data* data, int32_t num_sample) {
|
|||
if (data->skip_samples_set) {
|
||||
AVStream *stream = data->formatCtx->streams[data->streamIndex];
|
||||
/* sometimes (ex. AAC) after seeking to the first packet skip_samples is restored, but we want our value */
|
||||
stream->skip_samples = 0;
|
||||
stream->start_skip_samples = 0;
|
||||
stream->start_time = 0;
|
||||
|
||||
data->samples_discard += data->skipSamples;
|
||||
}
|
||||
|
@ -880,8 +876,7 @@ void ffmpeg_set_skip_samples(ffmpeg_codec_data* data, int skip_samples) {
|
|||
|
||||
/* overwrite FFmpeg's skip samples */
|
||||
stream = data->formatCtx->streams[data->streamIndex];
|
||||
stream->start_skip_samples = 0; /* used for the first packet *if* pts=0 */
|
||||
stream->skip_samples = 0; /* skip_samples can be used for any packet */
|
||||
stream->start_time = 0;
|
||||
|
||||
/* set skip samples with our internal discard */
|
||||
data->skip_samples_set = 1;
|
||||
|
|
|
@ -410,6 +410,11 @@ typedef struct RcOverride{
|
|||
* Export the AVVideoEncParams structure through frame side data.
|
||||
*/
|
||||
#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2)
|
||||
/**
|
||||
* Decoding only.
|
||||
* Do not apply film grain, export it instead.
|
||||
*/
|
||||
#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3)
|
||||
|
||||
/**
|
||||
* Pan Scan area.
|
||||
|
@ -508,6 +513,11 @@ typedef struct AVProducerReferenceTime {
|
|||
*/
|
||||
#define AV_GET_BUFFER_FLAG_REF (1 << 0)
|
||||
|
||||
/**
|
||||
* The encoder will keep a reference to the packet and may reuse it later.
|
||||
*/
|
||||
#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0)
|
||||
|
||||
struct AVCodecInternal;
|
||||
|
||||
/**
|
||||
|
@ -1314,9 +1324,9 @@ typedef struct AVCodecContext {
|
|||
*
|
||||
* Some decoders do not support linesizes changing between frames.
|
||||
*
|
||||
* If frame multithreading is used and thread_safe_callbacks is set,
|
||||
* this callback may be called from a different thread, but not from more
|
||||
* than one at once. Does not need to be reentrant.
|
||||
* If frame multithreading is used, this callback may be called from a
|
||||
* different thread, but not from more than one at once. Does not need to be
|
||||
* reentrant.
|
||||
*
|
||||
* @see avcodec_align_dimensions2()
|
||||
*
|
||||
|
@ -1340,6 +1350,7 @@ typedef struct AVCodecContext {
|
|||
*/
|
||||
int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);
|
||||
|
||||
#if FF_API_OLD_ENCDEC
|
||||
/**
|
||||
* If non-zero, the decoded audio and video frames returned from
|
||||
* avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted
|
||||
|
@ -1355,6 +1366,7 @@ typedef struct AVCodecContext {
|
|||
*/
|
||||
attribute_deprecated
|
||||
int refcounted_frames;
|
||||
#endif
|
||||
|
||||
/* - encoding parameters */
|
||||
float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
|
||||
|
@ -1614,42 +1626,20 @@ typedef struct AVCodecContext {
|
|||
#define FF_DEBUG_BITSTREAM 4
|
||||
#define FF_DEBUG_MB_TYPE 8
|
||||
#define FF_DEBUG_QP 16
|
||||
#if FF_API_DEBUG_MV
|
||||
/**
|
||||
* @deprecated this option does nothing
|
||||
*/
|
||||
#define FF_DEBUG_MV 32
|
||||
#endif
|
||||
#define FF_DEBUG_DCT_COEFF 0x00000040
|
||||
#define FF_DEBUG_SKIP 0x00000080
|
||||
#define FF_DEBUG_STARTCODE 0x00000100
|
||||
#define FF_DEBUG_ER 0x00000400
|
||||
#define FF_DEBUG_MMCO 0x00000800
|
||||
#define FF_DEBUG_BUGS 0x00001000
|
||||
#if FF_API_DEBUG_MV
|
||||
#define FF_DEBUG_VIS_QP 0x00002000
|
||||
#define FF_DEBUG_VIS_MB_TYPE 0x00004000
|
||||
#endif
|
||||
#define FF_DEBUG_BUFFERS 0x00008000
|
||||
#define FF_DEBUG_THREADS 0x00010000
|
||||
#define FF_DEBUG_GREEN_MD 0x00800000
|
||||
#define FF_DEBUG_NOMC 0x01000000
|
||||
|
||||
#if FF_API_DEBUG_MV
|
||||
/**
|
||||
* debug
|
||||
* - encoding: Set by user.
|
||||
* - decoding: Set by user.
|
||||
*/
|
||||
int debug_mv;
|
||||
#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 // visualize forward predicted MVs of P-frames
|
||||
#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 // visualize forward predicted MVs of B-frames
|
||||
#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 // visualize backward predicted MVs of B-frames
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Error recognition; may misdetect some more or less valid parts as errors.
|
||||
* - encoding: unused
|
||||
* - encoding: Set by user.
|
||||
* - decoding: Set by user.
|
||||
*/
|
||||
int err_recognition;
|
||||
|
@ -1756,14 +1746,12 @@ typedef struct AVCodecContext {
|
|||
*/
|
||||
int bits_per_raw_sample;
|
||||
|
||||
#if FF_API_LOWRES
|
||||
/**
|
||||
* low resolution decoding, 1-> 1/2 size, 2->1/4 size
|
||||
* - encoding: unused
|
||||
* - decoding: Set by user.
|
||||
*/
|
||||
int lowres;
|
||||
#endif
|
||||
|
||||
#if FF_API_CODED_FRAME
|
||||
/**
|
||||
|
@ -1803,6 +1791,7 @@ typedef struct AVCodecContext {
|
|||
*/
|
||||
int active_thread_type;
|
||||
|
||||
#if FF_API_THREAD_SAFE_CALLBACKS
|
||||
/**
|
||||
* Set by the client if its custom get_buffer() callback can be called
|
||||
* synchronously from another thread, which allows faster multithreaded decoding.
|
||||
|
@ -1810,8 +1799,18 @@ typedef struct AVCodecContext {
|
|||
* Ignored if the default get_buffer() is used.
|
||||
* - encoding: Set by user.
|
||||
* - decoding: Set by user.
|
||||
*
|
||||
* @deprecated the custom get_buffer2() callback should always be
|
||||
* thread-safe. Thread-unsafe get_buffer2() implementations will be
|
||||
* invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words,
|
||||
* libavcodec will behave as if this field was always set to 1.
|
||||
* Callers that want to be forward compatible with future libavcodec
|
||||
* versions should wrap access to this field in
|
||||
* #if LIBAVCODEC_VERSION_MAJOR < 60
|
||||
*/
|
||||
attribute_deprecated
|
||||
int thread_safe_callbacks;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* The codec may call this to execute several independent things.
|
||||
|
@ -1949,6 +1948,9 @@ typedef struct AVCodecContext {
|
|||
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3
|
||||
#define FF_PROFILE_HEVC_REXT 4
|
||||
|
||||
#define FF_PROFILE_VVC_MAIN_10 1
|
||||
#define FF_PROFILE_VVC_MAIN_10_444 33
|
||||
|
||||
#define FF_PROFILE_AV1_MAIN 0
|
||||
#define FF_PROFILE_AV1_HIGH 1
|
||||
#define FF_PROFILE_AV1_PROFESSIONAL 2
|
||||
|
@ -2089,15 +2091,6 @@ typedef struct AVCodecContext {
|
|||
*/
|
||||
const AVCodecDescriptor *codec_descriptor;
|
||||
|
||||
#if !FF_API_LOWRES
|
||||
/**
|
||||
* low resolution decoding, 1-> 1/2 size, 2->1/4 size
|
||||
* - encoding: unused
|
||||
* - decoding: Set by user.
|
||||
*/
|
||||
int lowres;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Current statistics for PTS correction.
|
||||
* - decoding: maintained and used by libavcodec, not intended to be used by user apps
|
||||
|
@ -2148,12 +2141,11 @@ typedef struct AVCodecContext {
|
|||
*/
|
||||
int seek_preroll;
|
||||
|
||||
#if !FF_API_DEBUG_MV
|
||||
#if FF_API_DEBUG_MV
|
||||
/**
|
||||
* debug motion vectors
|
||||
* - encoding: Set by user.
|
||||
* - decoding: Set by user.
|
||||
* @deprecated unused
|
||||
*/
|
||||
attribute_deprecated
|
||||
int debug_mv;
|
||||
#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
|
||||
#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
|
||||
|
@ -2352,6 +2344,44 @@ typedef struct AVCodecContext {
|
|||
* - encoding: set by user
|
||||
*/
|
||||
int export_side_data;
|
||||
|
||||
/**
|
||||
* This callback is called at the beginning of each packet to get a data
|
||||
* buffer for it.
|
||||
*
|
||||
* The following field will be set in the packet before this callback is
|
||||
* called:
|
||||
* - size
|
||||
* This callback must use the above value to calculate the required buffer size,
|
||||
* which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes.
|
||||
*
|
||||
* This callback must fill the following fields in the packet:
|
||||
* - data: alignment requirements for AVPacket apply, if any. Some architectures and
|
||||
* encoders may benefit from having aligned data.
|
||||
* - buf: must contain a pointer to an AVBufferRef structure. The packet's
|
||||
* data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(),
|
||||
* and av_buffer_ref().
|
||||
*
|
||||
* If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call
|
||||
* avcodec_default_get_encode_buffer() instead of providing a buffer allocated by
|
||||
* some other means.
|
||||
*
|
||||
* The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags.
|
||||
* They may be used for example to hint what use the buffer may get after being
|
||||
* created.
|
||||
* Implementations of this callback may ignore flags they don't understand.
|
||||
* If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused
|
||||
* (read and/or written to if it is writable) later by libavcodec.
|
||||
*
|
||||
* This callback must be thread-safe, as when frame threading is used, it may
|
||||
* be called from multiple threads simultaneously.
|
||||
*
|
||||
* @see avcodec_default_get_encode_buffer()
|
||||
*
|
||||
* - encoding: Set by libavcodec, user can override.
|
||||
* - decoding: unused
|
||||
*/
|
||||
int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags);
|
||||
} AVCodecContext;
|
||||
|
||||
#if FF_API_CODEC_GET_SET
|
||||
|
@ -2372,12 +2402,10 @@ void av_codec_set_codec_descriptor(AVCodecContext *avctx, co
|
|||
attribute_deprecated
|
||||
unsigned av_codec_get_codec_properties(const AVCodecContext *avctx);
|
||||
|
||||
#if FF_API_LOWRES
|
||||
attribute_deprecated
|
||||
int av_codec_get_lowres(const AVCodecContext *avctx);
|
||||
attribute_deprecated
|
||||
void av_codec_set_lowres(AVCodecContext *avctx, int val);
|
||||
#endif
|
||||
|
||||
attribute_deprecated
|
||||
int av_codec_get_seek_preroll(const AVCodecContext *avctx);
|
||||
|
@ -2727,25 +2755,13 @@ const char *avcodec_license(void);
|
|||
|
||||
#if FF_API_NEXT
|
||||
/**
|
||||
* Register the codec codec and initialize libavcodec.
|
||||
*
|
||||
* @warning either this function or avcodec_register_all() must be called
|
||||
* before any other libavcodec functions.
|
||||
*
|
||||
* @see avcodec_register_all()
|
||||
* @deprecated Calling this function is unnecessary.
|
||||
*/
|
||||
attribute_deprecated
|
||||
void avcodec_register(AVCodec *codec);
|
||||
|
||||
/**
|
||||
* Register all the codecs, parsers and bitstream filters which were enabled at
|
||||
* configuration time. If you do not call this function you can select exactly
|
||||
* which formats you want to support, by using the individual registration
|
||||
* functions.
|
||||
*
|
||||
* @see avcodec_register
|
||||
* @see av_register_codec_parser
|
||||
* @see av_register_bitstream_filter
|
||||
* @deprecated Calling this function is unnecessary.
|
||||
*/
|
||||
attribute_deprecated
|
||||
void avcodec_register_all(void);
|
||||
|
@ -2789,14 +2805,13 @@ int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec);
|
|||
*/
|
||||
const AVClass *avcodec_get_class(void);
|
||||
|
||||
#if FF_API_COPY_CONTEXT
|
||||
#if FF_API_GET_FRAME_CLASS
|
||||
/**
|
||||
* Get the AVClass for AVFrame. It can be used in combination with
|
||||
* AV_OPT_SEARCH_FAKE_OBJ for examining options.
|
||||
*
|
||||
* @see av_opt_find().
|
||||
* @deprecated This function should not be used.
|
||||
*/
|
||||
attribute_deprecated
|
||||
const AVClass *avcodec_get_frame_class(void);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Get the AVClass for AVSubtitleRect. It can be used in combination with
|
||||
|
@ -2806,6 +2821,7 @@ const AVClass *avcodec_get_frame_class(void);
|
|||
*/
|
||||
const AVClass *avcodec_get_subtitle_rect_class(void);
|
||||
|
||||
#if FF_API_COPY_CONTEXT
|
||||
/**
|
||||
* Copy the settings of the source AVCodecContext into the destination
|
||||
* AVCodecContext. The resulting destination codec context will be
|
||||
|
@ -2862,7 +2878,6 @@ int avcodec_parameters_to_context(AVCodecContext *codec,
|
|||
* @ref avcodec_receive_frame()).
|
||||
*
|
||||
* @code
|
||||
* avcodec_register_all();
|
||||
* av_dict_set(&opts, "b", "2.5M", 0);
|
||||
* codec = avcodec_find_decoder(AV_CODEC_ID_H264);
|
||||
* if (!codec)
|
||||
|
@ -2926,6 +2941,13 @@ void avsubtitle_free(AVSubtitle *sub);
|
|||
*/
|
||||
int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags);
|
||||
|
||||
/**
|
||||
* The default callback for AVCodecContext.get_encode_buffer(). It is made public so
|
||||
* it can be called by custom get_encode_buffer() implementations for encoders without
|
||||
* AV_CODEC_CAP_DR1 set.
|
||||
*/
|
||||
int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags);
|
||||
|
||||
/**
|
||||
* Modify width and height values so that they will result in a memory
|
||||
* buffer that is acceptable for the codec if you do not use any horizontal
|
||||
|
@ -2967,6 +2989,7 @@ int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos);
|
|||
*/
|
||||
enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos);
|
||||
|
||||
#if FF_API_OLD_ENCDEC
|
||||
/**
|
||||
* Decode the audio frame of size avpkt->size from avpkt->data into frame.
|
||||
*
|
||||
|
@ -3073,6 +3096,7 @@ attribute_deprecated
|
|||
int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
|
||||
int *got_picture_ptr,
|
||||
const AVPacket *avpkt);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Decode a subtitle message.
|
||||
|
@ -3529,7 +3553,10 @@ typedef struct AVCodecParser {
|
|||
const uint8_t *buf, int buf_size);
|
||||
void (*parser_close)(AVCodecParserContext *s);
|
||||
int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
|
||||
#if FF_API_NEXT
|
||||
attribute_deprecated
|
||||
struct AVCodecParser *next;
|
||||
#endif
|
||||
} AVCodecParser;
|
||||
|
||||
/**
|
||||
|
@ -3543,11 +3570,13 @@ typedef struct AVCodecParser {
|
|||
*/
|
||||
const AVCodecParser *av_parser_iterate(void **opaque);
|
||||
|
||||
#if FF_API_NEXT
|
||||
attribute_deprecated
|
||||
AVCodecParser *av_parser_next(const AVCodecParser *c);
|
||||
|
||||
attribute_deprecated
|
||||
void av_register_codec_parser(AVCodecParser *parser);
|
||||
#endif
|
||||
AVCodecParserContext *av_parser_init(int codec_id);
|
||||
|
||||
/**
|
||||
|
@ -3588,14 +3617,18 @@ int av_parser_parse2(AVCodecParserContext *s,
|
|||
int64_t pts, int64_t dts,
|
||||
int64_t pos);
|
||||
|
||||
#if FF_API_PARSER_CHANGE
|
||||
/**
|
||||
* @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
|
||||
* @deprecated use AVBitStreamFilter
|
||||
* @deprecated Use dump_extradata, remove_extra or extract_extradata
|
||||
* bitstream filters instead.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_parser_change(AVCodecParserContext *s,
|
||||
AVCodecContext *avctx,
|
||||
uint8_t **poutbuf, int *poutbuf_size,
|
||||
const uint8_t *buf, int buf_size, int keyframe);
|
||||
#endif
|
||||
void av_parser_close(AVCodecParserContext *s);
|
||||
|
||||
/**
|
||||
|
@ -3608,6 +3641,7 @@ void av_parser_close(AVCodecParserContext *s);
|
|||
* @{
|
||||
*/
|
||||
|
||||
#if FF_API_OLD_ENCDEC
|
||||
/**
|
||||
* Encode a frame of audio.
|
||||
*
|
||||
|
@ -3646,7 +3680,9 @@ void av_parser_close(AVCodecParserContext *s);
|
|||
* not be used.
|
||||
* @return 0 on success, negative error code on failure
|
||||
*
|
||||
* @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
|
||||
* @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead.
|
||||
* If allowed and required, set AVCodecContext.get_encode_buffer to
|
||||
* a custom function to pass user supplied output buffers.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
|
||||
|
@ -3685,11 +3721,14 @@ int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
|
|||
* not be used.
|
||||
* @return 0 on success, negative error code on failure
|
||||
*
|
||||
* @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
|
||||
* @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead.
|
||||
* If allowed and required, set AVCodecContext.get_encode_buffer to
|
||||
* a custom function to pass user supplied output buffers.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
|
||||
const AVFrame *frame, int *got_packet_ptr);
|
||||
#endif
|
||||
|
||||
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
|
||||
const AVSubtitle *sub);
|
||||
|
@ -3796,12 +3835,6 @@ void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int
|
|||
*/
|
||||
unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);
|
||||
|
||||
/**
|
||||
* @deprecated see av_get_pix_fmt_loss()
|
||||
*/
|
||||
int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
|
||||
int has_alpha);
|
||||
|
||||
/**
|
||||
* Find the best pixel format to convert to given a certain source pixel
|
||||
* format. When converting from one pixel format to another, information loss
|
||||
|
@ -3823,15 +3856,24 @@ enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *p
|
|||
enum AVPixelFormat src_pix_fmt,
|
||||
int has_alpha, int *loss_ptr);
|
||||
|
||||
#if FF_API_AVCODEC_PIX_FMT
|
||||
/**
|
||||
* @deprecated see av_get_pix_fmt_loss()
|
||||
*/
|
||||
attribute_deprecated
|
||||
int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
|
||||
int has_alpha);
|
||||
/**
|
||||
* @deprecated see av_find_best_pix_fmt_of_2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
|
||||
enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
|
||||
|
||||
attribute_deprecated
|
||||
enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
|
||||
enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
|
||||
#endif
|
||||
|
||||
enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
|
||||
|
||||
|
|
|
@ -215,7 +215,7 @@ int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt);
|
|||
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt);
|
||||
|
||||
/**
|
||||
* Reset the internal bitstream filter state / flush internal buffers.
|
||||
* Reset the internal bitstream filter state. Should be called e.g. when seeking.
|
||||
*/
|
||||
void av_bsf_flush(AVBSFContext *ctx);
|
||||
|
||||
|
|
|
@ -43,9 +43,11 @@
|
|||
*/
|
||||
#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0)
|
||||
/**
|
||||
* Codec uses get_buffer() for allocating buffers and supports custom allocators.
|
||||
* If not set, it might not use get_buffer() at all or use operations that
|
||||
* assume the buffer was allocated by avcodec_default_get_buffer.
|
||||
* Codec uses get_buffer() or get_encode_buffer() for allocating buffers and
|
||||
* supports custom allocators.
|
||||
* If not set, it might not use get_buffer() or get_encode_buffer() at all, or
|
||||
* use operations that assume the buffer was allocated by
|
||||
* avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer.
|
||||
*/
|
||||
#define AV_CODEC_CAP_DR1 (1 << 1)
|
||||
#define AV_CODEC_CAP_TRUNCATED (1 << 3)
|
||||
|
@ -113,9 +115,14 @@
|
|||
*/
|
||||
#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14)
|
||||
/**
|
||||
* Codec supports avctx->thread_count == 0 (auto).
|
||||
* Codec supports multithreading through a method other than slice- or
|
||||
* frame-level multithreading. Typically this marks wrappers around
|
||||
* multithreading-capable external libraries.
|
||||
*/
|
||||
#define AV_CODEC_CAP_AUTO_THREADS (1 << 15)
|
||||
#define AV_CODEC_CAP_OTHER_THREADS (1 << 15)
|
||||
#if FF_API_AUTO_THREADS
|
||||
#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS
|
||||
#endif
|
||||
/**
|
||||
* Audio encoder supports receiving a different number of samples in each call.
|
||||
*/
|
||||
|
@ -236,7 +243,9 @@ typedef struct AVCodec {
|
|||
*****************************************************************
|
||||
*/
|
||||
int priv_data_size;
|
||||
#if FF_API_NEXT
|
||||
struct AVCodec *next;
|
||||
#endif
|
||||
/**
|
||||
* @name Frame-level threading support functions
|
||||
* @{
|
||||
|
@ -257,7 +266,7 @@ typedef struct AVCodec {
|
|||
const AVCodecDefault *defaults;
|
||||
|
||||
/**
|
||||
* Initialize codec static data, called from avcodec_register().
|
||||
* Initialize codec static data, called from av_codec_iterate().
|
||||
*
|
||||
* This is not intended for time consuming operations as it is
|
||||
* run for every codec regardless of that codec being used.
|
||||
|
@ -271,7 +280,7 @@ typedef struct AVCodec {
|
|||
* Encode data to an AVPacket.
|
||||
*
|
||||
* @param avctx codec context
|
||||
* @param avpkt output AVPacket (may contain a user-provided buffer)
|
||||
* @param avpkt output AVPacket
|
||||
* @param[in] frame AVFrame containing the raw data to be encoded
|
||||
* @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
|
||||
* non-empty packet was returned in avpkt.
|
||||
|
@ -279,17 +288,26 @@ typedef struct AVCodec {
|
|||
*/
|
||||
int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt,
|
||||
const struct AVFrame *frame, int *got_packet_ptr);
|
||||
int (*decode)(struct AVCodecContext *, void *outdata, int *outdata_size, struct AVPacket *avpkt);
|
||||
/**
|
||||
* Decode picture or subtitle data.
|
||||
*
|
||||
* @param avctx codec context
|
||||
* @param outdata codec type dependent output struct
|
||||
* @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a
|
||||
* non-empty frame or subtitle was returned in
|
||||
* outdata.
|
||||
* @param[in] avpkt AVPacket containing the data to be decoded
|
||||
* @return amount of bytes read from the packet on success, negative error
|
||||
* code on failure
|
||||
*/
|
||||
int (*decode)(struct AVCodecContext *avctx, void *outdata,
|
||||
int *got_frame_ptr, struct AVPacket *avpkt);
|
||||
int (*close)(struct AVCodecContext *);
|
||||
/**
|
||||
* Encode API with decoupled packet/frame dataflow. The API is the
|
||||
* same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except
|
||||
* that:
|
||||
* - never called if the codec is closed or the wrong type,
|
||||
* - if AV_CODEC_CAP_DELAY is not set, drain frames are never sent,
|
||||
* - only one drain frame is ever passed down,
|
||||
* Encode API with decoupled frame/packet dataflow. This function is called
|
||||
* to get one output packet. It should call ff_encode_get_frame() to obtain
|
||||
* input data.
|
||||
*/
|
||||
int (*send_frame)(struct AVCodecContext *avctx, const struct AVFrame *frame);
|
||||
int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt);
|
||||
|
||||
/**
|
||||
|
@ -322,7 +340,7 @@ typedef struct AVCodec {
|
|||
*
|
||||
* The user can only access this field via avcodec_get_hw_config().
|
||||
*/
|
||||
const struct AVCodecHWConfigInternal **hw_configs;
|
||||
const struct AVCodecHWConfigInternal *const *hw_configs;
|
||||
|
||||
/**
|
||||
* List of supported codec_tags, terminated by FF_CODEC_TAGS_END.
|
||||
|
|
|
@ -241,6 +241,11 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_SCREENPRESSO,
|
||||
AV_CODEC_ID_RSCC,
|
||||
AV_CODEC_ID_AVS2,
|
||||
AV_CODEC_ID_PGX,
|
||||
AV_CODEC_ID_AVS3,
|
||||
AV_CODEC_ID_MSP2,
|
||||
AV_CODEC_ID_VVC,
|
||||
#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC
|
||||
|
||||
AV_CODEC_ID_Y41P = 0x8000,
|
||||
AV_CODEC_ID_AVRP,
|
||||
|
@ -295,6 +300,13 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_MV30,
|
||||
AV_CODEC_ID_NOTCHLC,
|
||||
AV_CODEC_ID_PFM,
|
||||
AV_CODEC_ID_MOBICLIP,
|
||||
AV_CODEC_ID_PHOTOCD,
|
||||
AV_CODEC_ID_IPU,
|
||||
AV_CODEC_ID_ARGO,
|
||||
AV_CODEC_ID_CRI,
|
||||
AV_CODEC_ID_SIMBIOSIS_IMX,
|
||||
AV_CODEC_ID_SGA_VIDEO,
|
||||
|
||||
/* various PCM "codecs" */
|
||||
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
|
||||
|
@ -335,6 +347,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_PCM_F16LE,
|
||||
AV_CODEC_ID_PCM_F24LE,
|
||||
AV_CODEC_ID_PCM_VIDC,
|
||||
AV_CODEC_ID_PCM_SGA,
|
||||
|
||||
/* various ADPCM codecs */
|
||||
AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
|
||||
|
@ -387,6 +400,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_ADPCM_IMA_ALP,
|
||||
AV_CODEC_ID_ADPCM_IMA_MTF,
|
||||
AV_CODEC_ID_ADPCM_IMA_CUNNING,
|
||||
AV_CODEC_ID_ADPCM_IMA_MOFLEX,
|
||||
|
||||
/* AMR */
|
||||
AV_CODEC_ID_AMR_NB = 0x12000,
|
||||
|
@ -502,6 +516,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_MPEGH_3D_AUDIO,
|
||||
AV_CODEC_ID_SIREN,
|
||||
AV_CODEC_ID_HCA,
|
||||
AV_CODEC_ID_FASTAUDIO,
|
||||
|
||||
/* subtitle codecs */
|
||||
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
|
||||
|
|
|
@ -282,6 +282,14 @@ enum AVPacketSideDataType {
|
|||
*/
|
||||
AV_PKT_DATA_DOVI_CONF,
|
||||
|
||||
/**
|
||||
* Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t
|
||||
* where the first uint32_t describes how many (1-3) of the other timecodes are used.
|
||||
* The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum()
|
||||
* function in libavutil/timecode.h.
|
||||
*/
|
||||
AV_PKT_DATA_S12M_TIMECODE,
|
||||
|
||||
/**
|
||||
* The number of side data types.
|
||||
* This is not part of the public API/ABI in the sense that it may
|
||||
|
@ -297,7 +305,11 @@ enum AVPacketSideDataType {
|
|||
|
||||
typedef struct AVPacketSideData {
|
||||
uint8_t *data;
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int size;
|
||||
#else
|
||||
size_t size;
|
||||
#endif
|
||||
enum AVPacketSideDataType type;
|
||||
} AVPacketSideData;
|
||||
|
||||
|
@ -311,10 +323,6 @@ typedef struct AVPacketSideData {
|
|||
* packets, with no compressed data, containing only side data
|
||||
* (e.g. to update some stream parameters at the end of encoding).
|
||||
*
|
||||
* AVPacket is one of the few structs in FFmpeg, whose size is a part of public
|
||||
* ABI. Thus it may be allocated on stack and no new fields can be added to it
|
||||
* without libavcodec and libavformat major bump.
|
||||
*
|
||||
* The semantics of data ownership depends on the buf field.
|
||||
* If it is set, the packet data is dynamically allocated and is
|
||||
* valid indefinitely until a call to av_packet_unref() reduces the
|
||||
|
@ -326,6 +334,12 @@ typedef struct AVPacketSideData {
|
|||
* The side data is always allocated with av_malloc(), copied by
|
||||
* av_packet_ref() and freed by av_packet_unref().
|
||||
*
|
||||
* sizeof(AVPacket) being a part of the public ABI is deprecated. once
|
||||
* av_init_packet() is removed, new packets will only be able to be allocated
|
||||
* with av_packet_alloc(), and new fields may be added to the end of the struct
|
||||
* with a minor bump.
|
||||
*
|
||||
* @see av_packet_alloc
|
||||
* @see av_packet_ref
|
||||
* @see av_packet_unref
|
||||
*/
|
||||
|
@ -385,6 +399,14 @@ typedef struct AVPacket {
|
|||
#endif
|
||||
} AVPacket;
|
||||
|
||||
#if FF_API_INIT_PACKET
|
||||
attribute_deprecated
|
||||
typedef struct AVPacketList {
|
||||
AVPacket pkt;
|
||||
struct AVPacketList *next;
|
||||
} AVPacketList;
|
||||
#endif
|
||||
|
||||
#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe
|
||||
#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
|
||||
/**
|
||||
|
@ -447,6 +469,7 @@ AVPacket *av_packet_clone(const AVPacket *src);
|
|||
*/
|
||||
void av_packet_free(AVPacket **pkt);
|
||||
|
||||
#if FF_API_INIT_PACKET
|
||||
/**
|
||||
* Initialize optional fields of a packet with default values.
|
||||
*
|
||||
|
@ -454,8 +477,16 @@ void av_packet_free(AVPacket **pkt);
|
|||
* initialized separately.
|
||||
*
|
||||
* @param pkt packet
|
||||
*
|
||||
* @see av_packet_alloc
|
||||
* @see av_packet_unref
|
||||
*
|
||||
* @deprecated This function is deprecated. Once it's removed,
|
||||
sizeof(AVPacket) will not be a part of the ABI anymore.
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_init_packet(AVPacket *pkt);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Allocate the payload of a packet and initialize its fields with
|
||||
|
@ -546,7 +577,11 @@ void av_free_packet(AVPacket *pkt);
|
|||
* @return pointer to fresh allocated data or NULL otherwise
|
||||
*/
|
||||
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int size);
|
||||
#else
|
||||
size_t size);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Wrap an existing array as a packet side data.
|
||||
|
@ -573,18 +608,27 @@ int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
|||
* @return 0 on success, < 0 on failure
|
||||
*/
|
||||
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int size);
|
||||
#else
|
||||
size_t size);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Get side information from packet.
|
||||
*
|
||||
* @param pkt packet
|
||||
* @param type desired side information type
|
||||
* @param size pointer for side information size to store (optional)
|
||||
* @param size If supplied, *size will be set to the size of the side data
|
||||
* or to zero if the desired side data is not present.
|
||||
* @return pointer to data if present or NULL otherwise
|
||||
*/
|
||||
uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int *size);
|
||||
#else
|
||||
size_t *size);
|
||||
#endif
|
||||
|
||||
#if FF_API_MERGE_SD_API
|
||||
attribute_deprecated
|
||||
|
@ -603,7 +647,11 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type);
|
|||
* @param size pointer to store the size of the returned data
|
||||
* @return pointer to data if successful, NULL otherwise
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
|
||||
#else
|
||||
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size);
|
||||
#endif
|
||||
/**
|
||||
* Unpack a dictionary from side_data.
|
||||
*
|
||||
|
@ -612,8 +660,12 @@ uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
|
|||
* @param dict the metadata storage dictionary
|
||||
* @return 0 on success, < 0 on failure
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
|
||||
|
||||
#else
|
||||
int av_packet_unpack_dictionary(const uint8_t *data, size_t size,
|
||||
AVDictionary **dict);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Convenience function to free all the side data stored.
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
||||
#define LIBAVCODEC_VERSION_MINOR 91
|
||||
#define LIBAVCODEC_VERSION_MINOR 134
|
||||
#define LIBAVCODEC_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
|
@ -51,12 +51,6 @@
|
|||
* at once through the bump. This improves the git bisect-ability of the change.
|
||||
*/
|
||||
|
||||
#ifndef FF_API_LOWRES
|
||||
#define FF_API_LOWRES (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_DEBUG_MV
|
||||
#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 58)
|
||||
#endif
|
||||
#ifndef FF_API_AVCTX_TIMEBASE
|
||||
#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
|
@ -144,6 +138,35 @@
|
|||
#ifndef FF_API_UNUSED_CODEC_CAPS
|
||||
#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
|
||||
#ifndef FF_API_AVPRIV_PUT_BITS
|
||||
#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OLD_ENCDEC
|
||||
#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_AVCODEC_PIX_FMT
|
||||
#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_MPV_RC_STRATEGY
|
||||
#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_PARSER_CHANGE
|
||||
#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_THREAD_SAFE_CALLBACKS
|
||||
#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60)
|
||||
#endif
|
||||
#ifndef FF_API_DEBUG_MV
|
||||
#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60)
|
||||
#endif
|
||||
#ifndef FF_API_GET_FRAME_CLASS
|
||||
#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60)
|
||||
#endif
|
||||
#ifndef FF_API_AUTO_THREADS
|
||||
#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60)
|
||||
#endif
|
||||
#ifndef FF_API_INIT_PACKET
|
||||
#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60)
|
||||
#endif
|
||||
|
||||
#endif /* AVCODEC_VERSION_H */
|
||||
|
|
|
@ -356,7 +356,7 @@ struct AVDeviceCapabilitiesQuery;
|
|||
* sorting will have '-sort' appended. E.g. artist="The Beatles",
|
||||
* artist-sort="Beatles, The".
|
||||
* - Some protocols and demuxers support metadata updates. After a successful
|
||||
* call to av_read_packet(), AVFormatContext.event_flags or AVStream.event_flags
|
||||
* call to av_read_frame(), AVFormatContext.event_flags or AVStream.event_flags
|
||||
* will be updated to indicate if metadata changed. In order to detect metadata
|
||||
* changes on a stream, you need to loop through all streams in the AVFormatContext
|
||||
* and check their individual event_flags.
|
||||
|
@ -534,7 +534,9 @@ typedef struct AVOutputFormat {
|
|||
#else
|
||||
#define ff_const59 const
|
||||
#endif
|
||||
#if FF_API_NEXT
|
||||
ff_const59 struct AVOutputFormat *next;
|
||||
#endif
|
||||
/**
|
||||
* size of private data so that it can be allocated in the wrapper
|
||||
*/
|
||||
|
@ -588,6 +590,7 @@ typedef struct AVOutputFormat {
|
|||
* @see avdevice_list_devices() for more details.
|
||||
*/
|
||||
int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
|
||||
#if LIBAVFORMAT_VERSION_MAJOR < 59
|
||||
/**
|
||||
* Initialize device capabilities submodule.
|
||||
* @see avdevice_capabilities_create() for more details.
|
||||
|
@ -598,6 +601,7 @@ typedef struct AVOutputFormat {
|
|||
* @see avdevice_capabilities_free() for more details.
|
||||
*/
|
||||
int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
|
||||
#endif
|
||||
enum AVCodecID data_codec; /**< default data codec */
|
||||
/**
|
||||
* Initialize format. May allocate data here, and set any AVFormatContext or
|
||||
|
@ -679,7 +683,9 @@ typedef struct AVInputFormat {
|
|||
* New public fields should be added right above.
|
||||
*****************************************************************
|
||||
*/
|
||||
#if FF_API_NEXT
|
||||
ff_const59 struct AVInputFormat *next;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Raw demuxers store their codec ID here.
|
||||
|
@ -765,6 +771,7 @@ typedef struct AVInputFormat {
|
|||
*/
|
||||
int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
|
||||
|
||||
#if LIBAVFORMAT_VERSION_MAJOR < 59
|
||||
/**
|
||||
* Initialize device capabilities submodule.
|
||||
* @see avdevice_capabilities_create() for more details.
|
||||
|
@ -776,6 +783,7 @@ typedef struct AVInputFormat {
|
|||
* @see avdevice_capabilities_free() for more details.
|
||||
*/
|
||||
int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
|
||||
#endif
|
||||
} AVInputFormat;
|
||||
/**
|
||||
* @}
|
||||
|
@ -973,12 +981,30 @@ typedef struct AVStream {
|
|||
int nb_side_data;
|
||||
|
||||
/**
|
||||
* Flags for the user to detect events happening on the stream. Flags must
|
||||
* be cleared by the user once the event has been handled.
|
||||
* A combination of AVSTREAM_EVENT_FLAG_*.
|
||||
* Flags indicating events happening on the stream, a combination of
|
||||
* AVSTREAM_EVENT_FLAG_*.
|
||||
*
|
||||
* - demuxing: may be set by the demuxer in avformat_open_input(),
|
||||
* avformat_find_stream_info() and av_read_frame(). Flags must be cleared
|
||||
* by the user once the event has been handled.
|
||||
* - muxing: may be set by the user after avformat_write_header(). to
|
||||
* indicate a user-triggered event. The muxer will clear the flags for
|
||||
* events it has handled in av_[interleaved]_write_frame().
|
||||
*/
|
||||
int event_flags;
|
||||
#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata.
|
||||
/**
|
||||
* - demuxing: the demuxer read new metadata from the file and updated
|
||||
* AVStream.metadata accordingly
|
||||
* - muxing: the user updated AVStream.metadata and wishes the muxer to write
|
||||
* it into the file
|
||||
*/
|
||||
#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001
|
||||
/**
|
||||
* - demuxing: new packets for this stream were read from the file. This
|
||||
* event is informational only and does not guarantee that new packets
|
||||
* for this stream will necessarily be returned from av_read_frame().
|
||||
*/
|
||||
#define AVSTREAM_EVENT_FLAG_NEW_PACKETS (1 << 1)
|
||||
|
||||
/**
|
||||
* Real base framerate of the stream.
|
||||
|
@ -1023,38 +1049,10 @@ typedef struct AVStream {
|
|||
*****************************************************************
|
||||
*/
|
||||
|
||||
#define MAX_STD_TIMEBASES (30*12+30+3+6)
|
||||
/**
|
||||
* Stream information used internally by avformat_find_stream_info()
|
||||
*/
|
||||
struct {
|
||||
int64_t last_dts;
|
||||
int64_t duration_gcd;
|
||||
int duration_count;
|
||||
int64_t rfps_duration_sum;
|
||||
double (*duration_error)[2][MAX_STD_TIMEBASES];
|
||||
int64_t codec_info_duration;
|
||||
int64_t codec_info_duration_fields;
|
||||
int frame_delay_evidence;
|
||||
|
||||
/**
|
||||
* 0 -> decoder has not been searched for yet.
|
||||
* >0 -> decoder found
|
||||
* <0 -> decoder with codec_id == -found_decoder has not been found
|
||||
*/
|
||||
int found_decoder;
|
||||
|
||||
int64_t last_duration;
|
||||
|
||||
/**
|
||||
* Those are used for average framerate estimation.
|
||||
*/
|
||||
int64_t fps_first_dts;
|
||||
int fps_first_dts_idx;
|
||||
int64_t fps_last_dts;
|
||||
int fps_last_dts_idx;
|
||||
|
||||
} *info;
|
||||
#if LIBAVFORMAT_VERSION_MAJOR < 59
|
||||
// kept for ABI compatibility only, do not access in any way
|
||||
void *unused;
|
||||
#endif
|
||||
|
||||
int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */
|
||||
|
||||
|
@ -1085,14 +1083,12 @@ typedef struct AVStream {
|
|||
enum AVStreamParseType need_parsing;
|
||||
struct AVCodecParserContext *parser;
|
||||
|
||||
/**
|
||||
* last packet in packet_buffer for this stream when muxing.
|
||||
*/
|
||||
struct AVPacketList *last_in_packet_buffer;
|
||||
AVProbeData probe_data;
|
||||
#define MAX_REORDER_DELAY 16
|
||||
int64_t pts_buffer[MAX_REORDER_DELAY+1];
|
||||
|
||||
#if LIBAVFORMAT_VERSION_MAJOR < 59
|
||||
// kept for ABI compatibility only, do not access in any way
|
||||
void *unused7;
|
||||
AVProbeData unused6;
|
||||
int64_t unused5[16+1];
|
||||
#endif
|
||||
AVIndexEntry *index_entries; /**< Only used if the format does not
|
||||
support seeking natively. */
|
||||
int nb_index_entries;
|
||||
|
@ -1105,115 +1101,12 @@ typedef struct AVStream {
|
|||
*/
|
||||
int stream_identifier;
|
||||
|
||||
/**
|
||||
* Details of the MPEG-TS program which created this stream.
|
||||
*/
|
||||
int program_num;
|
||||
int pmt_version;
|
||||
int pmt_stream_idx;
|
||||
|
||||
int64_t interleaver_chunk_size;
|
||||
int64_t interleaver_chunk_duration;
|
||||
|
||||
/**
|
||||
* stream probing state
|
||||
* -1 -> probing finished
|
||||
* 0 -> no probing requested
|
||||
* rest -> perform probing with request_probe being the minimum score to accept.
|
||||
*/
|
||||
int request_probe;
|
||||
/**
|
||||
* Indicates that everything up to the next keyframe
|
||||
* should be discarded.
|
||||
*/
|
||||
int skip_to_keyframe;
|
||||
|
||||
/**
|
||||
* Number of samples to skip at the start of the frame decoded from the next packet.
|
||||
*/
|
||||
int skip_samples;
|
||||
|
||||
/**
|
||||
* If not 0, the number of samples that should be skipped from the start of
|
||||
* the stream (the samples are removed from packets with pts==0, which also
|
||||
* assumes negative timestamps do not happen).
|
||||
* Intended for use with formats such as mp3 with ad-hoc gapless audio
|
||||
* support.
|
||||
*/
|
||||
int64_t start_skip_samples;
|
||||
|
||||
/**
|
||||
* If not 0, the first audio sample that should be discarded from the stream.
|
||||
* This is broken by design (needs global sample count), but can't be
|
||||
* avoided for broken by design formats such as mp3 with ad-hoc gapless
|
||||
* audio support.
|
||||
*/
|
||||
int64_t first_discard_sample;
|
||||
|
||||
/**
|
||||
* The sample after last sample that is intended to be discarded after
|
||||
* first_discard_sample. Works on frame boundaries only. Used to prevent
|
||||
* early EOF if the gapless info is broken (considered concatenated mp3s).
|
||||
*/
|
||||
int64_t last_discard_sample;
|
||||
|
||||
/**
|
||||
* Number of internally decoded frames, used internally in libavformat, do not access
|
||||
* its lifetime differs from info which is why it is not in that structure.
|
||||
*/
|
||||
int nb_decoded_frames;
|
||||
|
||||
/**
|
||||
* Timestamp offset added to timestamps before muxing
|
||||
*/
|
||||
int64_t mux_ts_offset;
|
||||
|
||||
/**
|
||||
* Internal data to check for wrapping of the time stamp
|
||||
*/
|
||||
int64_t pts_wrap_reference;
|
||||
|
||||
/**
|
||||
* Options for behavior, when a wrap is detected.
|
||||
*
|
||||
* Defined by AV_PTS_WRAP_ values.
|
||||
*
|
||||
* If correction is enabled, there are two possibilities:
|
||||
* If the first time stamp is near the wrap point, the wrap offset
|
||||
* will be subtracted, which will create negative time stamps.
|
||||
* Otherwise the offset will be added.
|
||||
*/
|
||||
int pts_wrap_behavior;
|
||||
|
||||
/**
|
||||
* Internal data to prevent doing update_initial_durations() twice
|
||||
*/
|
||||
int update_initial_durations_done;
|
||||
|
||||
/**
|
||||
* Internal data to generate dts from pts
|
||||
*/
|
||||
int64_t pts_reorder_error[MAX_REORDER_DELAY+1];
|
||||
uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1];
|
||||
|
||||
/**
|
||||
* Internal data to analyze DTS and detect faulty mpeg streams
|
||||
*/
|
||||
int64_t last_dts_for_order_check;
|
||||
uint8_t dts_ordered;
|
||||
uint8_t dts_misordered;
|
||||
|
||||
/**
|
||||
* Internal data to inject global side data
|
||||
*/
|
||||
int inject_global_side_data;
|
||||
|
||||
/**
|
||||
* display aspect ratio (0 if unknown)
|
||||
* - encoding: unused
|
||||
* - decoding: Set by libavformat to calculate sample_aspect_ratio internally
|
||||
*/
|
||||
AVRational display_aspect_ratio;
|
||||
#if LIBAVFORMAT_VERSION_MAJOR < 59
|
||||
// kept for ABI compatibility only, do not access in any way
|
||||
int unused8;
|
||||
int unused9;
|
||||
int unused10;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* An opaque field for libavformat internal usage.
|
||||
|
@ -1292,7 +1185,11 @@ typedef struct AVProgram {
|
|||
change dynamically at runtime. */
|
||||
|
||||
typedef struct AVChapter {
|
||||
#if FF_API_CHAPTER_ID_INT
|
||||
int id; ///< unique ID to identify the chapter
|
||||
#else
|
||||
int64_t id; ///< unique ID to identify the chapter
|
||||
#endif
|
||||
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
|
||||
AVDictionary *metadata;
|
||||
|
@ -1487,7 +1384,9 @@ typedef struct AVFormatContext {
|
|||
#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Deprecated, does nothing.
|
||||
#endif
|
||||
#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)
|
||||
#if FF_API_LAVF_PRIV_OPT
|
||||
#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (deprecated, will do nothing once av_demuxer_open() is removed)
|
||||
#endif
|
||||
#if FF_API_LAVF_KEEPSIDE_FLAG
|
||||
#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Deprecated, does nothing.
|
||||
#endif
|
||||
|
@ -1645,12 +1544,24 @@ typedef struct AVFormatContext {
|
|||
int strict_std_compliance;
|
||||
|
||||
/**
|
||||
* Flags for the user to detect events happening on the file. Flags must
|
||||
* be cleared by the user once the event has been handled.
|
||||
* A combination of AVFMT_EVENT_FLAG_*.
|
||||
* Flags indicating events happening on the file, a combination of
|
||||
* AVFMT_EVENT_FLAG_*.
|
||||
*
|
||||
* - demuxing: may be set by the demuxer in avformat_open_input(),
|
||||
* avformat_find_stream_info() and av_read_frame(). Flags must be cleared
|
||||
* by the user once the event has been handled.
|
||||
* - muxing: may be set by the user after avformat_write_header() to
|
||||
* indicate a user-triggered event. The muxer will clear the flags for
|
||||
* events it has handled in av_[interleaved]_write_frame().
|
||||
*/
|
||||
int event_flags;
|
||||
#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata.
|
||||
/**
|
||||
* - demuxing: the demuxer read new metadata from the file and updated
|
||||
* AVFormatContext.metadata accordingly
|
||||
* - muxing: the user updated AVFormatContext.metadata and wishes the muxer to
|
||||
* write it into the file
|
||||
*/
|
||||
#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001
|
||||
|
||||
/**
|
||||
* Maximum number of packets to read while waiting for the first timestamp.
|
||||
|
@ -2007,12 +1918,6 @@ void av_format_inject_global_side_data(AVFormatContext *s);
|
|||
*/
|
||||
enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx);
|
||||
|
||||
typedef struct AVPacketList {
|
||||
AVPacket pkt;
|
||||
struct AVPacketList *next;
|
||||
} AVPacketList;
|
||||
|
||||
|
||||
/**
|
||||
* @defgroup lavf_core Core functions
|
||||
* @ingroup libavf
|
||||
|
@ -2183,17 +2088,26 @@ int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type,
|
|||
* @return pointer to fresh allocated data or NULL otherwise
|
||||
*/
|
||||
uint8_t *av_stream_new_side_data(AVStream *stream,
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
enum AVPacketSideDataType type, int size);
|
||||
#else
|
||||
enum AVPacketSideDataType type, size_t size);
|
||||
#endif
|
||||
/**
|
||||
* Get side information from stream.
|
||||
*
|
||||
* @param stream stream
|
||||
* @param type desired side information type
|
||||
* @param size pointer for side information size to store (optional)
|
||||
* @param size If supplied, *size will be set to the size of the side data
|
||||
* or to zero if the desired side data is not present.
|
||||
* @return pointer to data if present or NULL otherwise
|
||||
*/
|
||||
uint8_t *av_stream_get_side_data(const AVStream *stream,
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
enum AVPacketSideDataType type, int *size);
|
||||
#else
|
||||
enum AVPacketSideDataType type, size_t *size);
|
||||
#endif
|
||||
|
||||
AVProgram *av_new_program(AVFormatContext *s, int id);
|
||||
|
||||
|
@ -2311,8 +2225,13 @@ int av_probe_input_buffer(AVIOContext *pb, ff_const59 AVInputFormat **fmt,
|
|||
*/
|
||||
int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options);
|
||||
|
||||
#if FF_API_DEMUXER_OPEN
|
||||
/**
|
||||
* @deprecated Use an AVDictionary to pass options to a demuxer.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_demuxer_open(AVFormatContext *ic);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Read packets of a media file to get stream information. This
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
||||
// Also please add any ticket numbers that you believe might be affected here
|
||||
#define LIBAVFORMAT_VERSION_MAJOR 58
|
||||
#define LIBAVFORMAT_VERSION_MINOR 45
|
||||
#define LIBAVFORMAT_VERSION_MINOR 76
|
||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
|
@ -106,6 +106,15 @@
|
|||
#ifndef FF_API_AVIOFORMAT
|
||||
#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_DEMUXER_OPEN
|
||||
#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_CHAPTER_ID_INT
|
||||
#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_LAVF_PRIV_OPT
|
||||
#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef FF_API_R_FRAME_RATE
|
||||
|
|
|
@ -27,8 +27,10 @@
|
|||
#ifndef AVUTIL_ADLER32_H
|
||||
#define AVUTIL_ADLER32_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_adler32 Adler-32
|
||||
|
@ -38,6 +40,12 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
typedef unsigned long AVAdler;
|
||||
#else
|
||||
typedef uint32_t AVAdler;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Calculate the Adler32 checksum of a buffer.
|
||||
*
|
||||
|
@ -50,8 +58,12 @@
|
|||
* @param len size of input buffer
|
||||
* @return updated checksum
|
||||
*/
|
||||
unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf,
|
||||
unsigned int len) av_pure;
|
||||
AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf,
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
unsigned int len) av_pure;
|
||||
#else
|
||||
size_t len) av_pure;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_string
|
||||
|
@ -155,10 +156,14 @@ static inline size_t av_strnlen(const char *s, size_t len)
|
|||
*/
|
||||
char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2);
|
||||
|
||||
#if FF_API_D2STR
|
||||
/**
|
||||
* Convert a number to an av_malloced string.
|
||||
* @deprecated use av_asprintf() with "%f" or a more specific format
|
||||
*/
|
||||
attribute_deprecated
|
||||
char *av_d2str(double d);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Unescape the given string until a non escaped terminating char,
|
||||
|
@ -319,6 +324,7 @@ enum AVEscapeMode {
|
|||
AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode.
|
||||
AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping.
|
||||
AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping.
|
||||
AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping.
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -338,6 +344,19 @@ enum AVEscapeMode {
|
|||
*/
|
||||
#define AV_ESCAPE_FLAG_STRICT (1 << 1)
|
||||
|
||||
/**
|
||||
* Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single
|
||||
* quoted attributes.
|
||||
*/
|
||||
#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2)
|
||||
|
||||
/**
|
||||
* Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double
|
||||
* quoted attributes.
|
||||
*/
|
||||
#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3)
|
||||
|
||||
|
||||
/**
|
||||
* Escape string in src, and put the escaped string in an allocated
|
||||
* string in *dst, which must be freed with av_free().
|
||||
|
|
|
@ -25,8 +25,11 @@
|
|||
#ifndef AVUTIL_BUFFER_H
|
||||
#define AVUTIL_BUFFER_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_buffer AVBuffer
|
||||
* @ingroup lavu_data
|
||||
|
@ -90,7 +93,11 @@ typedef struct AVBufferRef {
|
|||
/**
|
||||
* Size of data in bytes.
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int size;
|
||||
#else
|
||||
size_t size;
|
||||
#endif
|
||||
} AVBufferRef;
|
||||
|
||||
/**
|
||||
|
@ -98,13 +105,21 @@ typedef struct AVBufferRef {
|
|||
*
|
||||
* @return an AVBufferRef of given size or NULL when out of memory
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
AVBufferRef *av_buffer_alloc(int size);
|
||||
#else
|
||||
AVBufferRef *av_buffer_alloc(size_t size);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Same as av_buffer_alloc(), except the returned buffer will be initialized
|
||||
* to zero.
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
AVBufferRef *av_buffer_allocz(int size);
|
||||
#else
|
||||
AVBufferRef *av_buffer_allocz(size_t size);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Always treat the buffer as read-only, even when it has only one
|
||||
|
@ -127,7 +142,11 @@ AVBufferRef *av_buffer_allocz(int size);
|
|||
*
|
||||
* @return an AVBufferRef referring to data on success, NULL on failure.
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
AVBufferRef *av_buffer_create(uint8_t *data, int size,
|
||||
#else
|
||||
AVBufferRef *av_buffer_create(uint8_t *data, size_t size,
|
||||
#endif
|
||||
void (*free)(void *opaque, uint8_t *data),
|
||||
void *opaque, int flags);
|
||||
|
||||
|
@ -195,7 +214,27 @@ int av_buffer_make_writable(AVBufferRef **buf);
|
|||
* reference to it (i.e. the one passed to this function). In all other cases
|
||||
* a new buffer is allocated and the data is copied.
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int av_buffer_realloc(AVBufferRef **buf, int size);
|
||||
#else
|
||||
int av_buffer_realloc(AVBufferRef **buf, size_t size);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Ensure dst refers to the same data as src.
|
||||
*
|
||||
* When *dst is already equivalent to src, do nothing. Otherwise unreference dst
|
||||
* and replace it with a new reference to src.
|
||||
*
|
||||
* @param dst Pointer to either a valid buffer reference or NULL. On success,
|
||||
* this will point to a buffer reference equivalent to src. On
|
||||
* failure, dst will be left untouched.
|
||||
* @param src A buffer reference to replace dst with. May be NULL, then this
|
||||
* function is equivalent to av_buffer_unref(dst).
|
||||
* @return 0 on success
|
||||
* AVERROR(ENOMEM) on memory allocation failure.
|
||||
*/
|
||||
int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
@ -246,7 +285,11 @@ typedef struct AVBufferPool AVBufferPool;
|
|||
* (av_buffer_alloc()).
|
||||
* @return newly created buffer pool on success, NULL on error.
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
|
||||
#else
|
||||
AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size));
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Allocate and initialize a buffer pool with a more complex allocator.
|
||||
|
@ -263,8 +306,13 @@ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
|
|||
* data. May be NULL.
|
||||
* @return newly created buffer pool on success, NULL on error.
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
|
||||
AVBufferRef* (*alloc)(void *opaque, int size),
|
||||
#else
|
||||
AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque,
|
||||
AVBufferRef* (*alloc)(void *opaque, size_t size),
|
||||
#endif
|
||||
void (*pool_free)(void *opaque));
|
||||
|
||||
/**
|
||||
|
|
|
@ -71,6 +71,11 @@
|
|||
#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL
|
||||
#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL
|
||||
#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL
|
||||
#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL
|
||||
#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL
|
||||
#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL
|
||||
#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL
|
||||
#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL
|
||||
|
||||
/** Channel mask value used for AVCodecContext.request_channel_layout
|
||||
to indicate that the user requests the channel order of the decoder output
|
||||
|
@ -110,6 +115,7 @@
|
|||
#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
|
||||
#define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
|
||||
#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
|
||||
#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT)
|
||||
|
||||
enum AVMatrixEncoding {
|
||||
AV_MATRIX_ENCODING_NONE,
|
||||
|
|
|
@ -80,6 +80,15 @@
|
|||
*/
|
||||
#define FFNABS(a) ((a) <= 0 ? (a) : (-(a)))
|
||||
|
||||
/**
|
||||
* Unsigned Absolute value.
|
||||
* This takes the absolute value of a signed int and returns it as a unsigned.
|
||||
* This also works with INT_MIN which would otherwise not be representable
|
||||
* As with many macros, this evaluates its argument twice.
|
||||
*/
|
||||
#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a))
|
||||
#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a))
|
||||
|
||||
/**
|
||||
* Comparator.
|
||||
* For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0
|
||||
|
@ -106,8 +115,72 @@
|
|||
# include "intmath.h"
|
||||
#endif
|
||||
|
||||
/* Pull in unguarded fallback defines at the end of this file. */
|
||||
#include "common.h"
|
||||
#ifndef av_ceil_log2
|
||||
# define av_ceil_log2 av_ceil_log2_c
|
||||
#endif
|
||||
#ifndef av_clip
|
||||
# define av_clip av_clip_c
|
||||
#endif
|
||||
#ifndef av_clip64
|
||||
# define av_clip64 av_clip64_c
|
||||
#endif
|
||||
#ifndef av_clip_uint8
|
||||
# define av_clip_uint8 av_clip_uint8_c
|
||||
#endif
|
||||
#ifndef av_clip_int8
|
||||
# define av_clip_int8 av_clip_int8_c
|
||||
#endif
|
||||
#ifndef av_clip_uint16
|
||||
# define av_clip_uint16 av_clip_uint16_c
|
||||
#endif
|
||||
#ifndef av_clip_int16
|
||||
# define av_clip_int16 av_clip_int16_c
|
||||
#endif
|
||||
#ifndef av_clipl_int32
|
||||
# define av_clipl_int32 av_clipl_int32_c
|
||||
#endif
|
||||
#ifndef av_clip_intp2
|
||||
# define av_clip_intp2 av_clip_intp2_c
|
||||
#endif
|
||||
#ifndef av_clip_uintp2
|
||||
# define av_clip_uintp2 av_clip_uintp2_c
|
||||
#endif
|
||||
#ifndef av_mod_uintp2
|
||||
# define av_mod_uintp2 av_mod_uintp2_c
|
||||
#endif
|
||||
#ifndef av_sat_add32
|
||||
# define av_sat_add32 av_sat_add32_c
|
||||
#endif
|
||||
#ifndef av_sat_dadd32
|
||||
# define av_sat_dadd32 av_sat_dadd32_c
|
||||
#endif
|
||||
#ifndef av_sat_sub32
|
||||
# define av_sat_sub32 av_sat_sub32_c
|
||||
#endif
|
||||
#ifndef av_sat_dsub32
|
||||
# define av_sat_dsub32 av_sat_dsub32_c
|
||||
#endif
|
||||
#ifndef av_sat_add64
|
||||
# define av_sat_add64 av_sat_add64_c
|
||||
#endif
|
||||
#ifndef av_sat_sub64
|
||||
# define av_sat_sub64 av_sat_sub64_c
|
||||
#endif
|
||||
#ifndef av_clipf
|
||||
# define av_clipf av_clipf_c
|
||||
#endif
|
||||
#ifndef av_clipd
|
||||
# define av_clipd av_clipd_c
|
||||
#endif
|
||||
#ifndef av_popcount
|
||||
# define av_popcount av_popcount_c
|
||||
#endif
|
||||
#ifndef av_popcount64
|
||||
# define av_popcount64 av_popcount64_c
|
||||
#endif
|
||||
#ifndef av_parity
|
||||
# define av_parity av_parity_c
|
||||
#endif
|
||||
|
||||
#ifndef av_log2
|
||||
av_const int av_log2(unsigned v);
|
||||
|
@ -303,11 +376,10 @@ static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) {
|
|||
int64_t tmp;
|
||||
return !__builtin_add_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN);
|
||||
#else
|
||||
if (b >= 0 && a >= INT64_MAX - b)
|
||||
return INT64_MAX;
|
||||
if (b <= 0 && a <= INT64_MIN - b)
|
||||
return INT64_MIN;
|
||||
return a + b;
|
||||
int64_t s = a+(uint64_t)b;
|
||||
if ((int64_t)(a^b | ~s^b) >= 0)
|
||||
return INT64_MAX ^ (b >> 63);
|
||||
return s;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -534,75 +606,3 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
|
|||
#endif /* HAVE_AV_CONFIG_H */
|
||||
|
||||
#endif /* AVUTIL_COMMON_H */
|
||||
|
||||
/*
|
||||
* The following definitions are outside the multiple inclusion guard
|
||||
* to ensure they are immediately available in intmath.h.
|
||||
*/
|
||||
|
||||
#ifndef av_ceil_log2
|
||||
# define av_ceil_log2 av_ceil_log2_c
|
||||
#endif
|
||||
#ifndef av_clip
|
||||
# define av_clip av_clip_c
|
||||
#endif
|
||||
#ifndef av_clip64
|
||||
# define av_clip64 av_clip64_c
|
||||
#endif
|
||||
#ifndef av_clip_uint8
|
||||
# define av_clip_uint8 av_clip_uint8_c
|
||||
#endif
|
||||
#ifndef av_clip_int8
|
||||
# define av_clip_int8 av_clip_int8_c
|
||||
#endif
|
||||
#ifndef av_clip_uint16
|
||||
# define av_clip_uint16 av_clip_uint16_c
|
||||
#endif
|
||||
#ifndef av_clip_int16
|
||||
# define av_clip_int16 av_clip_int16_c
|
||||
#endif
|
||||
#ifndef av_clipl_int32
|
||||
# define av_clipl_int32 av_clipl_int32_c
|
||||
#endif
|
||||
#ifndef av_clip_intp2
|
||||
# define av_clip_intp2 av_clip_intp2_c
|
||||
#endif
|
||||
#ifndef av_clip_uintp2
|
||||
# define av_clip_uintp2 av_clip_uintp2_c
|
||||
#endif
|
||||
#ifndef av_mod_uintp2
|
||||
# define av_mod_uintp2 av_mod_uintp2_c
|
||||
#endif
|
||||
#ifndef av_sat_add32
|
||||
# define av_sat_add32 av_sat_add32_c
|
||||
#endif
|
||||
#ifndef av_sat_dadd32
|
||||
# define av_sat_dadd32 av_sat_dadd32_c
|
||||
#endif
|
||||
#ifndef av_sat_sub32
|
||||
# define av_sat_sub32 av_sat_sub32_c
|
||||
#endif
|
||||
#ifndef av_sat_dsub32
|
||||
# define av_sat_dsub32 av_sat_dsub32_c
|
||||
#endif
|
||||
#ifndef av_sat_add64
|
||||
# define av_sat_add64 av_sat_add64_c
|
||||
#endif
|
||||
#ifndef av_sat_sub64
|
||||
# define av_sat_sub64 av_sat_sub64_c
|
||||
#endif
|
||||
#ifndef av_clipf
|
||||
# define av_clipf av_clipf_c
|
||||
#endif
|
||||
#ifndef av_clipd
|
||||
# define av_clipd av_clipd_c
|
||||
#endif
|
||||
#ifndef av_popcount
|
||||
# define av_popcount av_popcount_c
|
||||
#endif
|
||||
#ifndef av_popcount64
|
||||
# define av_popcount64 av_popcount64_c
|
||||
#endif
|
||||
#ifndef av_parity
|
||||
# define av_parity av_parity_c
|
||||
#endif
|
||||
|
|
|
@ -71,6 +71,9 @@
|
|||
#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations
|
||||
#define AV_CPU_FLAG_SETEND (1 <<16)
|
||||
|
||||
#define AV_CPU_FLAG_MMI (1 << 0)
|
||||
#define AV_CPU_FLAG_MSA (1 << 1)
|
||||
|
||||
/**
|
||||
* Return the flags which specify extensions supported by the CPU.
|
||||
* The returned value is affected by av_force_cpu_flags() if that was used
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Automatically generated by version.sh, do not manually edit! */
|
||||
#ifndef AVUTIL_FFVERSION_H
|
||||
#define AVUTIL_FFVERSION_H
|
||||
#define FFMPEG_VERSION "n4.3.2"
|
||||
#define FFMPEG_VERSION "4.4"
|
||||
#endif /* AVUTIL_FFVERSION_H */
|
||||
|
|
|
@ -0,0 +1,168 @@
|
|||
/*
|
||||
* 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 AVUTIL_FILM_GRAIN_PARAMS_H
|
||||
#define AVUTIL_FILM_GRAIN_PARAMS_H
|
||||
|
||||
#include "frame.h"
|
||||
|
||||
enum AVFilmGrainParamsType {
|
||||
AV_FILM_GRAIN_PARAMS_NONE = 0,
|
||||
|
||||
/**
|
||||
* The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom)
|
||||
*/
|
||||
AV_FILM_GRAIN_PARAMS_AV1,
|
||||
};
|
||||
|
||||
/**
|
||||
* This structure describes how to handle film grain synthesis for AOM codecs.
|
||||
*
|
||||
* @note The struct must be allocated as part of AVFilmGrainParams using
|
||||
* av_film_grain_params_alloc(). Its size is not a part of the public ABI.
|
||||
*/
|
||||
typedef struct AVFilmGrainAOMParams {
|
||||
/**
|
||||
* Number of points, and the scale and value for each point of the
|
||||
* piecewise linear scaling function for the uma plane.
|
||||
*/
|
||||
int num_y_points;
|
||||
uint8_t y_points[14][2 /* value, scaling */];
|
||||
|
||||
/**
|
||||
* Signals whether to derive the chroma scaling function from the luma.
|
||||
* Not equivalent to copying the luma values and scales.
|
||||
*/
|
||||
int chroma_scaling_from_luma;
|
||||
|
||||
/**
|
||||
* If chroma_scaling_from_luma is set to 0, signals the chroma scaling
|
||||
* function parameters.
|
||||
*/
|
||||
int num_uv_points[2 /* cb, cr */];
|
||||
uint8_t uv_points[2 /* cb, cr */][10][2 /* value, scaling */];
|
||||
|
||||
/**
|
||||
* Specifies the shift applied to the chroma components. For AV1, its within
|
||||
* [8; 11] and determines the range and quantization of the film grain.
|
||||
*/
|
||||
int scaling_shift;
|
||||
|
||||
/**
|
||||
* Specifies the auto-regression lag.
|
||||
*/
|
||||
int ar_coeff_lag;
|
||||
|
||||
/**
|
||||
* Luma auto-regression coefficients. The number of coefficients is given by
|
||||
* 2 * ar_coeff_lag * (ar_coeff_lag + 1).
|
||||
*/
|
||||
int8_t ar_coeffs_y[24];
|
||||
|
||||
/**
|
||||
* Chroma auto-regression coefficients. The number of coefficients is given by
|
||||
* 2 * ar_coeff_lag * (ar_coeff_lag + 1) + !!num_y_points.
|
||||
*/
|
||||
int8_t ar_coeffs_uv[2 /* cb, cr */][25];
|
||||
|
||||
/**
|
||||
* Specifies the range of the auto-regressive coefficients. Values of 6,
|
||||
* 7, 8 and so on represent a range of [-2, 2), [-1, 1), [-0.5, 0.5) and
|
||||
* so on. For AV1 must be between 6 and 9.
|
||||
*/
|
||||
int ar_coeff_shift;
|
||||
|
||||
/**
|
||||
* Signals the down shift applied to the generated gaussian numbers during
|
||||
* synthesis.
|
||||
*/
|
||||
int grain_scale_shift;
|
||||
|
||||
/**
|
||||
* Specifies the luma/chroma multipliers for the index to the component
|
||||
* scaling function.
|
||||
*/
|
||||
int uv_mult[2 /* cb, cr */];
|
||||
int uv_mult_luma[2 /* cb, cr */];
|
||||
|
||||
/**
|
||||
* Offset used for component scaling function. For AV1 its a 9-bit value
|
||||
* with a range [-256, 255]
|
||||
*/
|
||||
int uv_offset[2 /* cb, cr */];
|
||||
|
||||
/**
|
||||
* Signals whether to overlap film grain blocks.
|
||||
*/
|
||||
int overlap_flag;
|
||||
|
||||
/**
|
||||
* Signals to clip to limited color levels after film grain application.
|
||||
*/
|
||||
int limit_output_range;
|
||||
} AVFilmGrainAOMParams;
|
||||
|
||||
/**
|
||||
* This structure describes how to handle film grain synthesis in video
|
||||
* for specific codecs. Must be present on every frame where film grain is
|
||||
* meant to be synthesised for correct presentation.
|
||||
*
|
||||
* @note The struct must be allocated with av_film_grain_params_alloc() and
|
||||
* its size is not a part of the public ABI.
|
||||
*/
|
||||
typedef struct AVFilmGrainParams {
|
||||
/**
|
||||
* Specifies the codec for which this structure is valid.
|
||||
*/
|
||||
enum AVFilmGrainParamsType type;
|
||||
|
||||
/**
|
||||
* Seed to use for the synthesis process, if the codec allows for it.
|
||||
*/
|
||||
uint64_t seed;
|
||||
|
||||
/**
|
||||
* Additional fields may be added both here and in any structure included.
|
||||
* If a codec's film grain structure differs slightly over another
|
||||
* codec's, fields within may change meaning depending on the type.
|
||||
*/
|
||||
union {
|
||||
AVFilmGrainAOMParams aom;
|
||||
} codec;
|
||||
} AVFilmGrainParams;
|
||||
|
||||
/**
|
||||
* Allocate an AVFilmGrainParams structure and set its fields to
|
||||
* default values. The resulting struct can be freed using av_freep().
|
||||
* If size is not NULL it will be set to the number of bytes allocated.
|
||||
*
|
||||
* @return An AVFilmGrainParams filled with default values or NULL
|
||||
* on failure.
|
||||
*/
|
||||
AVFilmGrainParams *av_film_grain_params_alloc(size_t *size);
|
||||
|
||||
/**
|
||||
* Allocate a complete AVFilmGrainParams and add it to the frame.
|
||||
*
|
||||
* @param frame The frame which side data is added to.
|
||||
*
|
||||
* @return The AVFilmGrainParams structure to be filled by caller.
|
||||
*/
|
||||
AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame);
|
||||
|
||||
#endif /* AVUTIL_FILM_GRAIN_PARAMS_H */
|
|
@ -162,8 +162,8 @@ enum AVFrameSideDataType {
|
|||
/**
|
||||
* Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t
|
||||
* where the first uint32_t describes how many (1-3) of the other timecodes are used.
|
||||
* The timecode format is described in the av_timecode_get_smpte_from_framenum()
|
||||
* function in libavutil/timecode.c.
|
||||
* The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum()
|
||||
* function in libavutil/timecode.h.
|
||||
*/
|
||||
AV_FRAME_DATA_S12M_TIMECODE,
|
||||
|
||||
|
@ -184,6 +184,20 @@ enum AVFrameSideDataType {
|
|||
* Encoding parameters for a video frame, as described by AVVideoEncParams.
|
||||
*/
|
||||
AV_FRAME_DATA_VIDEO_ENC_PARAMS,
|
||||
|
||||
/**
|
||||
* User data unregistered metadata associated with a video frame.
|
||||
* This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose
|
||||
* The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of
|
||||
* uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte.
|
||||
*/
|
||||
AV_FRAME_DATA_SEI_UNREGISTERED,
|
||||
|
||||
/**
|
||||
* Film grain parameters for a frame, described by AVFilmGrainParams.
|
||||
* Must be present for every frame which should have film grain applied.
|
||||
*/
|
||||
AV_FRAME_DATA_FILM_GRAIN_PARAMS,
|
||||
};
|
||||
|
||||
enum AVActiveFormatDescription {
|
||||
|
@ -206,7 +220,11 @@ enum AVActiveFormatDescription {
|
|||
typedef struct AVFrameSideData {
|
||||
enum AVFrameSideDataType type;
|
||||
uint8_t *data;
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int size;
|
||||
#else
|
||||
size_t size;
|
||||
#endif
|
||||
AVDictionary *metadata;
|
||||
AVBufferRef *buf;
|
||||
} AVFrameSideData;
|
||||
|
@ -899,7 +917,11 @@ AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane);
|
|||
*/
|
||||
AVFrameSideData *av_frame_new_side_data(AVFrame *frame,
|
||||
enum AVFrameSideDataType type,
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int size);
|
||||
#else
|
||||
size_t size);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Add a new side data to a frame from an existing AVBufferRef
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#ifndef AVUTIL_HASH_H
|
||||
#define AVUTIL_HASH_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
|
|
|
@ -67,6 +67,20 @@ int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane);
|
|||
*/
|
||||
int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width);
|
||||
|
||||
/**
|
||||
* Fill plane sizes for an image with pixel format pix_fmt and height height.
|
||||
*
|
||||
* @param size the array to be filled with the size of each image plane
|
||||
* @param linesizes the array containing the linesize for each
|
||||
* plane, should be filled by av_image_fill_linesizes()
|
||||
* @return >= 0 in case of success, a negative error code otherwise
|
||||
*
|
||||
* @note The linesize parameters have the type ptrdiff_t here, while they are
|
||||
* int for av_image_fill_linesizes().
|
||||
*/
|
||||
int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt,
|
||||
int height, const ptrdiff_t linesizes[4]);
|
||||
|
||||
/**
|
||||
* Fill plane data pointers for an image with pixel format pix_fmt and
|
||||
* height height.
|
||||
|
|
|
@ -112,6 +112,7 @@ typedef struct AVClass {
|
|||
*/
|
||||
void* (*child_next)(void *obj, void *prev);
|
||||
|
||||
#if FF_API_CHILD_CLASS_NEXT
|
||||
/**
|
||||
* Return an AVClass corresponding to the next potential
|
||||
* AVOptions-enabled child.
|
||||
|
@ -120,7 +121,9 @@ typedef struct AVClass {
|
|||
* child_next iterates over _already existing_ objects, while
|
||||
* child_class_next iterates over _all possible_ children.
|
||||
*/
|
||||
attribute_deprecated
|
||||
const struct AVClass* (*child_class_next)(const struct AVClass *prev);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Category used for visualization (like color)
|
||||
|
@ -140,6 +143,21 @@ typedef struct AVClass {
|
|||
* available since version (52.12)
|
||||
*/
|
||||
int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags);
|
||||
|
||||
/**
|
||||
* Iterate over the AVClasses corresponding to potential AVOptions-enabled
|
||||
* children.
|
||||
*
|
||||
* @param iter pointer to opaque iteration state. The caller must initialize
|
||||
* *iter to NULL before the first call.
|
||||
* @return AVClass for the next AVOptions-enabled child or NULL if there are
|
||||
* no more such children.
|
||||
*
|
||||
* @note The difference between child_next and this is that child_next
|
||||
* iterates over _already existing_ objects, while child_class_iterate
|
||||
* iterates over _all possible_ children.
|
||||
*/
|
||||
const struct AVClass* (*child_class_iterate)(void **iter);
|
||||
} AVClass;
|
||||
|
||||
/**
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "attributes.h"
|
||||
#include "error.h"
|
||||
#include "avutil.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_mem
|
||||
|
@ -49,6 +50,10 @@
|
|||
* dealing with memory consistently possible on all platforms.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if FF_API_DECLARE_ALIGNED
|
||||
/**
|
||||
*
|
||||
* @defgroup lavu_mem_macros Alignment Macros
|
||||
* Helper macros for declaring aligned variables.
|
||||
|
@ -125,6 +130,7 @@
|
|||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup lavu_mem_attrs Function Attributes
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#ifndef AVUTIL_MURMUR3_H
|
||||
#define AVUTIL_MURMUR3_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
|
|
|
@ -114,7 +114,7 @@
|
|||
* libavcodec exports generic options, while its priv_data field exports
|
||||
* codec-specific options). In such a case, it is possible to set up the
|
||||
* parent struct to export a child's options. To do that, simply
|
||||
* implement AVClass.child_next() and AVClass.child_class_next() in the
|
||||
* implement AVClass.child_next() and AVClass.child_class_iterate() in the
|
||||
* parent struct's AVClass.
|
||||
* Assuming that the test_struct from above now also contains a
|
||||
* child_struct field:
|
||||
|
@ -143,23 +143,25 @@
|
|||
* return t->child_struct;
|
||||
* return NULL
|
||||
* }
|
||||
* const AVClass child_class_next(const AVClass *prev)
|
||||
* const AVClass child_class_iterate(void **iter)
|
||||
* {
|
||||
* return prev ? NULL : &child_class;
|
||||
* const AVClass *c = *iter ? NULL : &child_class;
|
||||
* *iter = (void*)(uintptr_t)c;
|
||||
* return c;
|
||||
* }
|
||||
* @endcode
|
||||
* Putting child_next() and child_class_next() as defined above into
|
||||
* Putting child_next() and child_class_iterate() as defined above into
|
||||
* test_class will now make child_struct's options accessible through
|
||||
* test_struct (again, proper setup as described above needs to be done on
|
||||
* child_struct right after it is created).
|
||||
*
|
||||
* From the above example it might not be clear why both child_next()
|
||||
* and child_class_next() are needed. The distinction is that child_next()
|
||||
* iterates over actually existing objects, while child_class_next()
|
||||
* and child_class_iterate() are needed. The distinction is that child_next()
|
||||
* iterates over actually existing objects, while child_class_iterate()
|
||||
* iterates over all possible child classes. E.g. if an AVCodecContext
|
||||
* was initialized to use a codec which has private options, then its
|
||||
* child_next() will return AVCodecContext.priv_data and finish
|
||||
* iterating. OTOH child_class_next() on AVCodecContext.av_class will
|
||||
* iterating. OTOH child_class_iterate() on AVCodecContext.av_class will
|
||||
* iterate over all available codecs with private options.
|
||||
*
|
||||
* @subsection avoptions_implement_named_constants Named constants
|
||||
|
@ -194,7 +196,7 @@
|
|||
* For enumerating there are basically two cases. The first is when you want to
|
||||
* get all options that may potentially exist on the struct and its children
|
||||
* (e.g. when constructing documentation). In that case you should call
|
||||
* av_opt_child_class_next() recursively on the parent struct's AVClass. The
|
||||
* av_opt_child_class_iterate() recursively on the parent struct's AVClass. The
|
||||
* second case is when you have an already initialized struct with all its
|
||||
* children and you want to get all options that can be actually written or read
|
||||
* from it. In that case you should call av_opt_child_next() recursively (and
|
||||
|
@ -646,13 +648,26 @@ const AVOption *av_opt_next(const void *obj, const AVOption *prev);
|
|||
*/
|
||||
void *av_opt_child_next(void *obj, void *prev);
|
||||
|
||||
#if FF_API_CHILD_CLASS_NEXT
|
||||
/**
|
||||
* Iterate over potential AVOptions-enabled children of parent.
|
||||
*
|
||||
* @param prev result of a previous call to this function or NULL
|
||||
* @return AVClass corresponding to next potential child or NULL
|
||||
*
|
||||
* @deprecated use av_opt_child_class_iterate
|
||||
*/
|
||||
attribute_deprecated
|
||||
const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Iterate over potential AVOptions-enabled children of parent.
|
||||
*
|
||||
* @param iter a pointer where iteration state is stored.
|
||||
* @return AVClass corresponding to next potential child or NULL
|
||||
*/
|
||||
const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter);
|
||||
|
||||
/**
|
||||
* @defgroup opt_set_funcs Option setting functions
|
||||
|
|
|
@ -147,6 +147,7 @@ typedef struct AVPixFmtDescriptor {
|
|||
*/
|
||||
#define AV_PIX_FMT_FLAG_RGB (1 << 5)
|
||||
|
||||
#if FF_API_PSEUDOPAL
|
||||
/**
|
||||
* The pixel format is "pseudo-paletted". This means that it contains a
|
||||
* fixed palette in the 2nd plane but the palette is fixed/constant for each
|
||||
|
@ -164,6 +165,7 @@ typedef struct AVPixFmtDescriptor {
|
|||
* before the deprecation, though).
|
||||
*/
|
||||
#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* The pixel format has an alpha channel. This is set on all formats that
|
||||
|
|
|
@ -358,6 +358,8 @@ enum AVPixelFormat {
|
|||
AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian
|
||||
AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian
|
||||
|
||||
AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined
|
||||
AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined
|
||||
AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
|
||||
};
|
||||
|
||||
|
@ -447,6 +449,7 @@ enum AVPixelFormat {
|
|||
#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE)
|
||||
|
||||
#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE)
|
||||
#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE)
|
||||
|
||||
/**
|
||||
* Chromaticity coordinates of the source primaries.
|
||||
|
@ -527,12 +530,60 @@ enum AVColorSpace {
|
|||
};
|
||||
|
||||
/**
|
||||
* MPEG vs JPEG YUV range.
|
||||
* Visual content value range.
|
||||
*
|
||||
* These values are based on definitions that can be found in multiple
|
||||
* specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance
|
||||
* and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital
|
||||
* Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit
|
||||
* integer representation). At the time of writing, the BT.2100 one is
|
||||
* recommended, as it also defines the full range representation.
|
||||
*
|
||||
* Common definitions:
|
||||
* - For RGB and luminance planes such as Y in YCbCr and I in ICtCp,
|
||||
* 'E' is the original value in range of 0.0 to 1.0.
|
||||
* - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original
|
||||
* value in range of -0.5 to 0.5.
|
||||
* - 'n' is the output bit depth.
|
||||
* - For additional definitions such as rounding and clipping to valid n
|
||||
* bit unsigned integer range, please refer to BT.2100 (Table 9).
|
||||
*/
|
||||
enum AVColorRange {
|
||||
AVCOL_RANGE_UNSPECIFIED = 0,
|
||||
AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
|
||||
AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges
|
||||
|
||||
/**
|
||||
* Narrow or limited range content.
|
||||
*
|
||||
* - For luminance planes:
|
||||
*
|
||||
* (219 * E + 16) * 2^(n-8)
|
||||
*
|
||||
* F.ex. the range of 16-235 for 8 bits
|
||||
*
|
||||
* - For chrominance planes:
|
||||
*
|
||||
* (224 * E + 128) * 2^(n-8)
|
||||
*
|
||||
* F.ex. the range of 16-240 for 8 bits
|
||||
*/
|
||||
AVCOL_RANGE_MPEG = 1,
|
||||
|
||||
/**
|
||||
* Full range content.
|
||||
*
|
||||
* - For RGB and luminance planes:
|
||||
*
|
||||
* (2^n - 1) * E
|
||||
*
|
||||
* F.ex. the range of 0-255 for 8 bits
|
||||
*
|
||||
* - For chrominance planes:
|
||||
*
|
||||
* (2^n - 1) * E + 2^(n - 1)
|
||||
*
|
||||
* F.ex. the range of 1-255 for 8 bits
|
||||
*/
|
||||
AVCOL_RANGE_JPEG = 2,
|
||||
AVCOL_RANGE_NB ///< Not part of ABI
|
||||
};
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#ifndef AVUTIL_RIPEMD_H
|
||||
#define AVUTIL_RIPEMD_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
|
|
|
@ -49,9 +49,9 @@ typedef struct {
|
|||
* Adjust frame number for NTSC drop frame time code.
|
||||
*
|
||||
* @param framenum frame number to adjust
|
||||
* @param fps frame per second, 30 or 60
|
||||
* @param fps frame per second, multiples of 30
|
||||
* @return adjusted frame number
|
||||
* @warning adjustment is only valid in NTSC 29.97 and 59.94
|
||||
* @warning adjustment is only valid for multiples of NTSC 29.97
|
||||
*/
|
||||
int av_timecode_adjust_ntsc_framenum2(int framenum, int fps);
|
||||
|
||||
|
@ -62,14 +62,39 @@ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps);
|
|||
* @param framenum frame number
|
||||
* @return the SMPTE binary representation
|
||||
*
|
||||
* See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)"
|
||||
* the format description as follows:
|
||||
* bits 0-5: hours, in BCD(6bits)
|
||||
* bits 6: BGF1
|
||||
* bits 7: BGF2 (NTSC) or FIELD (PAL)
|
||||
* bits 8-14: minutes, in BCD(7bits)
|
||||
* bits 15: BGF0 (NTSC) or BGF2 (PAL)
|
||||
* bits 16-22: seconds, in BCD(7bits)
|
||||
* bits 23: FIELD (NTSC) or BGF0 (PAL)
|
||||
* bits 24-29: frames, in BCD(6bits)
|
||||
* bits 30: drop frame flag (0: non drop, 1: drop)
|
||||
* bits 31: color frame flag (0: unsync mode, 1: sync mode)
|
||||
* @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens.
|
||||
* @note Frame number adjustment is automatically done in case of drop timecode,
|
||||
* you do NOT have to call av_timecode_adjust_ntsc_framenum2().
|
||||
* @note The frame number is relative to tc->start.
|
||||
* @note Color frame (CF), binary group flags (BGF) and biphase mark polarity
|
||||
* correction (PC) bits are set to zero.
|
||||
* @note Color frame (CF) and binary group flags (BGF) bits are set to zero.
|
||||
*/
|
||||
uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum);
|
||||
|
||||
/**
|
||||
* Convert sei info to SMPTE 12M binary representation.
|
||||
*
|
||||
* @param rate frame rate in rational form
|
||||
* @param drop drop flag
|
||||
* @param hh hour
|
||||
* @param mm minute
|
||||
* @param ss second
|
||||
* @param ff frame number
|
||||
* @return the SMPTE binary representation
|
||||
*/
|
||||
uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff);
|
||||
|
||||
/**
|
||||
* Load timecode string in buf.
|
||||
*
|
||||
|
@ -84,6 +109,23 @@ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum)
|
|||
*/
|
||||
char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum);
|
||||
|
||||
/**
|
||||
* Get the timecode string from the SMPTE timecode format.
|
||||
*
|
||||
* In contrast to av_timecode_make_smpte_tc_string this function supports 50/60
|
||||
* fps timecodes by using the field bit.
|
||||
*
|
||||
* @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long
|
||||
* @param rate frame rate of the timecode
|
||||
* @param tcsmpte the 32-bit SMPTE timecode
|
||||
* @param prevent_df prevent the use of a drop flag when it is known the DF bit
|
||||
* is arbitrary
|
||||
* @param skip_field prevent the use of a field flag when it is known the field
|
||||
* bit is arbitrary (e.g. because it is used as PC flag)
|
||||
* @return the buf parameter
|
||||
*/
|
||||
char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field);
|
||||
|
||||
/**
|
||||
* Get the timecode string from the SMPTE timecode format.
|
||||
*
|
||||
|
@ -118,6 +160,23 @@ char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit);
|
|||
*/
|
||||
int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx);
|
||||
|
||||
/**
|
||||
* Init a timecode struct from the passed timecode components.
|
||||
*
|
||||
* @param log_ctx a pointer to an arbitrary struct of which the first field
|
||||
* is a pointer to an AVClass struct (used for av_log)
|
||||
* @param tc pointer to an allocated AVTimecode
|
||||
* @param rate frame rate in rational form
|
||||
* @param flags miscellaneous flags such as drop frame, +24 hours, ...
|
||||
* (see AVTimecodeFlag)
|
||||
* @param hh hours
|
||||
* @param mm minutes
|
||||
* @param ss seconds
|
||||
* @param ff frames
|
||||
* @return 0 on success, AVERROR otherwise
|
||||
*/
|
||||
int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx);
|
||||
|
||||
/**
|
||||
* Parse timecode representation (hh:mm:ss[:;.]ff).
|
||||
*
|
||||
|
|
|
@ -43,6 +43,7 @@ enum AVTXType {
|
|||
* The stride parameter is ignored.
|
||||
*/
|
||||
AV_TX_FLOAT_FFT = 0,
|
||||
|
||||
/**
|
||||
* Standard MDCT with sample data type of float and a scale type of
|
||||
* float. Length is the frame size, not the window size (which is 2x frame)
|
||||
|
@ -51,21 +52,27 @@ enum AVTXType {
|
|||
* For inverse transforms, the stride specifies the spacing between each
|
||||
* sample in the input array in bytes. The output will be a flat array.
|
||||
* Stride must be a non-zero multiple of sizeof(float).
|
||||
* NOTE: the inverse transform is half-length, meaning the output will not
|
||||
* contain redundant data. This is what most codecs work with.
|
||||
*/
|
||||
AV_TX_FLOAT_MDCT = 1,
|
||||
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_FFT with a data type of AVComplexDouble.
|
||||
*/
|
||||
AV_TX_DOUBLE_FFT = 2,
|
||||
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_MDCT with data and scale type of double.
|
||||
* Stride must be a non-zero multiple of sizeof(double).
|
||||
*/
|
||||
AV_TX_DOUBLE_MDCT = 3,
|
||||
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32.
|
||||
*/
|
||||
AV_TX_INT32_FFT = 4,
|
||||
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_MDCT with data type of int32_t and scale type of float.
|
||||
* Only scale values less than or equal to 1.0 are supported.
|
||||
|
@ -91,10 +98,21 @@ enum AVTXType {
|
|||
*/
|
||||
typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride);
|
||||
|
||||
/**
|
||||
* Flags for av_tx_init()
|
||||
*/
|
||||
enum AVTXFlags {
|
||||
/**
|
||||
* Performs an in-place transformation on the input. The output argument
|
||||
* of av_tn_fn() MUST match the input. May be unsupported or slower for some
|
||||
* transform types.
|
||||
*/
|
||||
AV_TX_INPLACE = 1ULL << 0,
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize a transform context with the given configuration
|
||||
* Currently power of two lengths from 2 to 131072 are supported, along with
|
||||
* any length decomposable to a power of two and either 3, 5 or 15.
|
||||
* (i)MDCTs with an odd length are currently not supported.
|
||||
*
|
||||
* @param ctx the context to allocate, will be NULL on error
|
||||
* @param tx pointer to the transform function pointer to set
|
||||
|
@ -102,7 +120,7 @@ typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride);
|
|||
* @param inv whether to do an inverse or a forward transform
|
||||
* @param len the size of the transform in samples
|
||||
* @param scale pointer to the value to scale the output if supported by type
|
||||
* @param flags currently unused
|
||||
* @param flags a bitmask of AVTXFlags or 0
|
||||
*
|
||||
* @return 0 on success, negative error code on failure
|
||||
*/
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
*/
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 56
|
||||
#define LIBAVUTIL_VERSION_MINOR 51
|
||||
#define LIBAVUTIL_VERSION_MINOR 70
|
||||
#define LIBAVUTIL_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
|
@ -129,7 +129,18 @@
|
|||
#ifndef FF_API_PSEUDOPAL
|
||||
#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
|
||||
#ifndef FF_API_CHILD_CLASS_NEXT
|
||||
#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_BUFFER_SIZE_T
|
||||
#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_D2STR
|
||||
#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58)
|
||||
#endif
|
||||
#ifndef FF_API_DECLARE_ALIGNED
|
||||
#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -55,6 +55,14 @@ enum AVVideoEncParamsType {
|
|||
* as AVVideoBlockParams.qp_delta.
|
||||
*/
|
||||
AV_VIDEO_ENC_PARAMS_H264,
|
||||
|
||||
/*
|
||||
* MPEG-2-compatible quantizer.
|
||||
*
|
||||
* Summing the frame-level qp with the per-block delta_qp gives the
|
||||
* resulting quantizer for the block.
|
||||
*/
|
||||
AV_VIDEO_ENC_PARAMS_MPEG2,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -153,7 +161,7 @@ AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type,
|
|||
/**
|
||||
* Allocates memory for AVEncodeInfoFrame plus an array of
|
||||
* {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame}
|
||||
* as AVFrameSideData of type AV_FRAME_DATA_ENCODE_INFO
|
||||
* as AVFrameSideData of type AV_FRAME_DATA_VIDEO_ENC_PARAMS
|
||||
* and initializes the variables.
|
||||
*/
|
||||
AVVideoEncParams*
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "libavutil/avutil.h"
|
||||
|
||||
#define LIBSWRESAMPLE_VERSION_MAJOR 3
|
||||
#define LIBSWRESAMPLE_VERSION_MINOR 7
|
||||
#define LIBSWRESAMPLE_VERSION_MINOR 9
|
||||
#define LIBSWRESAMPLE_VERSION_MICRO 100
|
||||
|
||||
#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue