mirror of https://github.com/PCSX2/pcsx2.git
3rdparty: Update ffmpeg headers to 6.0
This commit is contained in:
parent
161cead2e4
commit
29420c25e4
|
@ -1 +1 @@
|
|||
ffmpeg-4.4.3 from https://ffmpeg.org/releases/ffmpeg-4.4.3.tar.xz
|
||||
ffmpeg-6.0.0 from https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -30,12 +30,31 @@
|
|||
#include "packet.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavc_core
|
||||
* @defgroup lavc_bsf Bitstream filters
|
||||
* @ingroup libavc
|
||||
*
|
||||
* Bitstream filters transform encoded media data without decoding it. This
|
||||
* allows e.g. manipulating various header values. Bitstream filters operate on
|
||||
* @ref AVPacket "AVPackets".
|
||||
*
|
||||
* The bitstream filtering API is centered around two structures:
|
||||
* AVBitStreamFilter and AVBSFContext. The former represents a bitstream filter
|
||||
* in abstract, the latter a specific filtering process. Obtain an
|
||||
* AVBitStreamFilter using av_bsf_get_by_name() or av_bsf_iterate(), then pass
|
||||
* it to av_bsf_alloc() to create an AVBSFContext. Fill in the user-settable
|
||||
* AVBSFContext fields, as described in its documentation, then call
|
||||
* av_bsf_init() to prepare the filter context for use.
|
||||
*
|
||||
* Submit packets for filtering using av_bsf_send_packet(), obtain filtered
|
||||
* results with av_bsf_receive_packet(). When no more input packets will be
|
||||
* sent, submit a NULL AVPacket to signal the end of the stream to the filter.
|
||||
* av_bsf_receive_packet() will then return trailing packets, if any are
|
||||
* produced by the filter.
|
||||
*
|
||||
* Finally, free the filter context with av_bsf_free().
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef struct AVBSFInternal AVBSFInternal;
|
||||
|
||||
/**
|
||||
* The bitstream filter state.
|
||||
*
|
||||
|
@ -57,12 +76,6 @@ typedef struct AVBSFContext {
|
|||
*/
|
||||
const struct AVBitStreamFilter *filter;
|
||||
|
||||
/**
|
||||
* Opaque libavcodec internal data. Must not be touched by the caller in any
|
||||
* way.
|
||||
*/
|
||||
AVBSFInternal *internal;
|
||||
|
||||
/**
|
||||
* Opaque filter-specific private data. If filter->priv_class is non-NULL,
|
||||
* this is an AVOptions-enabled struct.
|
||||
|
@ -115,20 +128,6 @@ typedef struct AVBitStreamFilter {
|
|||
* code to this class.
|
||||
*/
|
||||
const AVClass *priv_class;
|
||||
|
||||
/*****************************************************************
|
||||
* No fields below this line are part of the public API. They
|
||||
* may not be used outside of libavcodec and can be changed and
|
||||
* removed at will.
|
||||
* New public fields should be added right above.
|
||||
*****************************************************************
|
||||
*/
|
||||
|
||||
int priv_data_size;
|
||||
int (*init)(AVBSFContext *ctx);
|
||||
int (*filter)(AVBSFContext *ctx, AVPacket *pkt);
|
||||
void (*close)(AVBSFContext *ctx);
|
||||
void (*flush)(AVBSFContext *ctx);
|
||||
} AVBitStreamFilter;
|
||||
|
||||
/**
|
||||
|
@ -154,9 +153,9 @@ const AVBitStreamFilter *av_bsf_iterate(void **opaque);
|
|||
* av_bsf_init() before sending any data to the filter.
|
||||
*
|
||||
* @param filter the filter for which to allocate an instance.
|
||||
* @param ctx a pointer into which the pointer to the newly-allocated context
|
||||
* will be written. It must be freed with av_bsf_free() after the
|
||||
* filtering is done.
|
||||
* @param[out] ctx a pointer into which the pointer to the newly-allocated context
|
||||
* will be written. It must be freed with av_bsf_free() after the
|
||||
* filtering is done.
|
||||
*
|
||||
* @return 0 on success, a negative AVERROR code on failure
|
||||
*/
|
||||
|
@ -165,6 +164,8 @@ int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx);
|
|||
/**
|
||||
* Prepare the filter for use, after all the parameters and options have been
|
||||
* set.
|
||||
*
|
||||
* @param ctx a AVBSFContext previously allocated with av_bsf_alloc()
|
||||
*/
|
||||
int av_bsf_init(AVBSFContext *ctx);
|
||||
|
||||
|
@ -175,6 +176,7 @@ int av_bsf_init(AVBSFContext *ctx);
|
|||
* av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or
|
||||
* AVERROR_EOF.
|
||||
*
|
||||
* @param ctx an initialized AVBSFContext
|
||||
* @param pkt the packet to filter. The bitstream filter will take ownership of
|
||||
* the packet and reset the contents of pkt. pkt is not touched if an error occurs.
|
||||
* If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero),
|
||||
|
@ -182,15 +184,18 @@ int av_bsf_init(AVBSFContext *ctx);
|
|||
* sending more empty packets does nothing) and will cause the filter to output
|
||||
* any packets it may have buffered internally.
|
||||
*
|
||||
* @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the
|
||||
* filter (using av_bsf_receive_packet()) before new input can be consumed. Another
|
||||
* negative AVERROR value if an error occurs.
|
||||
* @return
|
||||
* - 0 on success.
|
||||
* - AVERROR(EAGAIN) if packets need to be retrieved from the filter (using
|
||||
* av_bsf_receive_packet()) before new input can be consumed.
|
||||
* - Another negative AVERROR value if an error occurs.
|
||||
*/
|
||||
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt);
|
||||
|
||||
/**
|
||||
* Retrieve a filtered packet.
|
||||
*
|
||||
* @param ctx an initialized AVBSFContext
|
||||
* @param[out] pkt this struct will be filled with the contents of the filtered
|
||||
* packet. It is owned by the caller and must be freed using
|
||||
* av_packet_unref() when it is no longer needed.
|
||||
|
@ -201,10 +206,12 @@ int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt);
|
|||
* overwritten by the returned data. On failure, pkt is not
|
||||
* touched.
|
||||
*
|
||||
* @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the
|
||||
* filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there
|
||||
* will be no further output from the filter. Another negative AVERROR value if
|
||||
* an error occurs.
|
||||
* @return
|
||||
* - 0 on success.
|
||||
* - AVERROR(EAGAIN) if more packets need to be sent to the filter (using
|
||||
* av_bsf_send_packet()) to get more output.
|
||||
* - AVERROR_EOF if there will be no further output from the filter.
|
||||
* - Another negative AVERROR value if an error occurs.
|
||||
*
|
||||
* @note one input packet may result in several output packets, so after sending
|
||||
* a packet with av_bsf_send_packet(), this function needs to be called
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "libavutil/samplefmt.h"
|
||||
|
||||
#include "libavcodec/codec_id.h"
|
||||
#include "libavcodec/version.h"
|
||||
#include "libavcodec/version_major.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavc_core
|
||||
|
@ -50,7 +50,6 @@
|
|||
* avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer.
|
||||
*/
|
||||
#define AV_CODEC_CAP_DR1 (1 << 1)
|
||||
#define AV_CODEC_CAP_TRUNCATED (1 << 3)
|
||||
/**
|
||||
* Encoder or decoder requires flushing with NULL input at the end in order to
|
||||
* give the complete and correct output.
|
||||
|
@ -120,9 +119,6 @@
|
|||
* multithreading-capable external libraries.
|
||||
*/
|
||||
#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.
|
||||
*/
|
||||
|
@ -138,17 +134,6 @@
|
|||
*/
|
||||
#define AV_CODEC_CAP_AVOID_PROBING (1 << 17)
|
||||
|
||||
#if FF_API_UNUSED_CODEC_CAPS
|
||||
/**
|
||||
* Deprecated and unused. Use AVCodecDescriptor.props instead
|
||||
*/
|
||||
#define AV_CODEC_CAP_INTRA_ONLY 0x40000000
|
||||
/**
|
||||
* Deprecated and unused. Use AVCodecDescriptor.props instead
|
||||
*/
|
||||
#define AV_CODEC_CAP_LOSSLESS 0x80000000
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Codec is backed by a hardware implementation. Typically used to
|
||||
* identify a non-hwaccel hardware decoder. For information about hwaccels, use
|
||||
|
@ -164,9 +149,9 @@
|
|||
#define AV_CODEC_CAP_HYBRID (1 << 19)
|
||||
|
||||
/**
|
||||
* This codec takes the reordered_opaque field from input AVFrames
|
||||
* and returns it in the corresponding field in AVCodecContext after
|
||||
* encoding.
|
||||
* This encoder can reorder user opaque values from input AVFrames and return
|
||||
* them with corresponding output packets.
|
||||
* @see AV_CODEC_FLAG_COPY_OPAQUE
|
||||
*/
|
||||
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20)
|
||||
|
||||
|
@ -177,6 +162,14 @@
|
|||
*/
|
||||
#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21)
|
||||
|
||||
/**
|
||||
* The encoder is able to output reconstructed frame data, i.e. raw frames that
|
||||
* would be produced by decoding the encoded bitstream.
|
||||
*
|
||||
* Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag.
|
||||
*/
|
||||
#define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22)
|
||||
|
||||
/**
|
||||
* AVProfile.
|
||||
*/
|
||||
|
@ -185,12 +178,6 @@ typedef struct AVProfile {
|
|||
const char *name; ///< short name for the profile
|
||||
} AVProfile;
|
||||
|
||||
typedef struct AVCodecDefault AVCodecDefault;
|
||||
|
||||
struct AVCodecContext;
|
||||
struct AVSubtitle;
|
||||
struct AVPacket;
|
||||
|
||||
/**
|
||||
* AVCodec.
|
||||
*/
|
||||
|
@ -214,12 +201,18 @@ typedef struct AVCodec {
|
|||
* see AV_CODEC_CAP_*
|
||||
*/
|
||||
int capabilities;
|
||||
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
|
||||
const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
|
||||
const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
|
||||
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
|
||||
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* @deprecated use ch_layouts instead
|
||||
*/
|
||||
attribute_deprecated
|
||||
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
|
||||
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
|
||||
#endif
|
||||
const AVClass *priv_class; ///< AVClass for the private context
|
||||
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
|
||||
|
||||
|
@ -235,117 +228,10 @@ typedef struct AVCodec {
|
|||
*/
|
||||
const char *wrapper_name;
|
||||
|
||||
/*****************************************************************
|
||||
* No fields below this line are part of the public API. They
|
||||
* may not be used outside of libavcodec and can be changed and
|
||||
* removed at will.
|
||||
* New public fields should be added right above.
|
||||
*****************************************************************
|
||||
*/
|
||||
int priv_data_size;
|
||||
#if FF_API_NEXT
|
||||
struct AVCodec *next;
|
||||
#endif
|
||||
/**
|
||||
* @name Frame-level threading support functions
|
||||
* @{
|
||||
* Array of supported channel layouts, terminated with a zeroed layout.
|
||||
*/
|
||||
/**
|
||||
* Copy necessary context variables from a previous thread context to the current one.
|
||||
* If not defined, the next thread will start automatically; otherwise, the codec
|
||||
* must call ff_thread_finish_setup().
|
||||
*
|
||||
* dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
|
||||
*/
|
||||
int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src);
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* Private codec-specific defaults.
|
||||
*/
|
||||
const AVCodecDefault *defaults;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
void (*init_static_data)(struct AVCodec *codec);
|
||||
|
||||
int (*init)(struct AVCodecContext *);
|
||||
int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size,
|
||||
const struct AVSubtitle *sub);
|
||||
/**
|
||||
* Encode data to an AVPacket.
|
||||
*
|
||||
* @param avctx codec context
|
||||
* @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.
|
||||
* @return 0 on success, negative error code on failure
|
||||
*/
|
||||
int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt,
|
||||
const struct AVFrame *frame, int *got_packet_ptr);
|
||||
/**
|
||||
* 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 frame/packet dataflow. This function is called
|
||||
* to get one output packet. It should call ff_encode_get_frame() to obtain
|
||||
* input data.
|
||||
*/
|
||||
int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt);
|
||||
|
||||
/**
|
||||
* Decode API with decoupled packet/frame dataflow. This function is called
|
||||
* to get one output frame. It should call ff_decode_get_packet() to obtain
|
||||
* input data.
|
||||
*/
|
||||
int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame);
|
||||
/**
|
||||
* Flush buffers.
|
||||
* Will be called when seeking
|
||||
*/
|
||||
void (*flush)(struct AVCodecContext *);
|
||||
/**
|
||||
* Internal codec capabilities.
|
||||
* See FF_CODEC_CAP_* in internal.h
|
||||
*/
|
||||
int caps_internal;
|
||||
|
||||
/**
|
||||
* Decoding only, a comma-separated list of bitstream filters to apply to
|
||||
* packets before decoding.
|
||||
*/
|
||||
const char *bsfs;
|
||||
|
||||
/**
|
||||
* Array of pointers to hardware configurations supported by the codec,
|
||||
* or NULL if no hardware supported. The array is terminated by a NULL
|
||||
* pointer.
|
||||
*
|
||||
* The user can only access this field via avcodec_get_hw_config().
|
||||
*/
|
||||
const struct AVCodecHWConfigInternal *const *hw_configs;
|
||||
|
||||
/**
|
||||
* List of supported codec_tags, terminated by FF_CODEC_TAGS_END.
|
||||
*/
|
||||
const uint32_t *codec_tags;
|
||||
const AVChannelLayout *ch_layouts;
|
||||
} AVCodec;
|
||||
|
||||
/**
|
||||
|
@ -365,7 +251,7 @@ const AVCodec *av_codec_iterate(void **opaque);
|
|||
* @param id AVCodecID of the requested decoder
|
||||
* @return A decoder if one was found, NULL otherwise.
|
||||
*/
|
||||
AVCodec *avcodec_find_decoder(enum AVCodecID id);
|
||||
const AVCodec *avcodec_find_decoder(enum AVCodecID id);
|
||||
|
||||
/**
|
||||
* Find a registered decoder with the specified name.
|
||||
|
@ -373,7 +259,7 @@ AVCodec *avcodec_find_decoder(enum AVCodecID id);
|
|||
* @param name name of the requested decoder
|
||||
* @return A decoder if one was found, NULL otherwise.
|
||||
*/
|
||||
AVCodec *avcodec_find_decoder_by_name(const char *name);
|
||||
const AVCodec *avcodec_find_decoder_by_name(const char *name);
|
||||
|
||||
/**
|
||||
* Find a registered encoder with a matching codec ID.
|
||||
|
@ -381,7 +267,7 @@ AVCodec *avcodec_find_decoder_by_name(const char *name);
|
|||
* @param id AVCodecID of the requested encoder
|
||||
* @return An encoder if one was found, NULL otherwise.
|
||||
*/
|
||||
AVCodec *avcodec_find_encoder(enum AVCodecID id);
|
||||
const AVCodec *avcodec_find_encoder(enum AVCodecID id);
|
||||
|
||||
/**
|
||||
* Find a registered encoder with the specified name.
|
||||
|
@ -389,7 +275,7 @@ AVCodec *avcodec_find_encoder(enum AVCodecID id);
|
|||
* @param name name of the requested encoder
|
||||
* @return An encoder if one was found, NULL otherwise.
|
||||
*/
|
||||
AVCodec *avcodec_find_encoder_by_name(const char *name);
|
||||
const AVCodec *avcodec_find_encoder_by_name(const char *name);
|
||||
/**
|
||||
* @return a non-zero number if codec is an encoder, zero otherwise
|
||||
*/
|
||||
|
@ -400,6 +286,15 @@ int av_codec_is_encoder(const AVCodec *codec);
|
|||
*/
|
||||
int av_codec_is_decoder(const AVCodec *codec);
|
||||
|
||||
/**
|
||||
* Return a name for the specified profile, if available.
|
||||
*
|
||||
* @param codec the codec that is searched for the given profile
|
||||
* @param profile the profile value for which a name is requested
|
||||
* @return A name for the profile if found, NULL otherwise.
|
||||
*/
|
||||
const char *av_get_profile_name(const AVCodec *codec, int profile);
|
||||
|
||||
enum {
|
||||
/**
|
||||
* The codec supports this format via the hw_device_ctx interface.
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
#define AVCODEC_CODEC_ID_H
|
||||
|
||||
#include "libavutil/avutil.h"
|
||||
#include "libavutil/samplefmt.h"
|
||||
|
||||
#include "version_major.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavc_core
|
||||
|
@ -246,12 +249,13 @@ enum AVCodecID {
|
|||
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_Y41P,
|
||||
AV_CODEC_ID_AVRP,
|
||||
AV_CODEC_ID_012V,
|
||||
AV_CODEC_ID_AVUI,
|
||||
#if FF_API_AYUV_CODECID
|
||||
AV_CODEC_ID_AYUV,
|
||||
#endif
|
||||
AV_CODEC_ID_TARGA_Y216,
|
||||
AV_CODEC_ID_V308,
|
||||
AV_CODEC_ID_V408,
|
||||
|
@ -307,6 +311,15 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_CRI,
|
||||
AV_CODEC_ID_SIMBIOSIS_IMX,
|
||||
AV_CODEC_ID_SGA_VIDEO,
|
||||
AV_CODEC_ID_GEM,
|
||||
AV_CODEC_ID_VBN,
|
||||
AV_CODEC_ID_JPEGXL,
|
||||
AV_CODEC_ID_QOI,
|
||||
AV_CODEC_ID_PHM,
|
||||
AV_CODEC_ID_RADIANCE_HDR,
|
||||
AV_CODEC_ID_WBMP,
|
||||
AV_CODEC_ID_MEDIA100,
|
||||
AV_CODEC_ID_VQC,
|
||||
|
||||
/* various PCM "codecs" */
|
||||
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
|
||||
|
@ -341,8 +354,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_PCM_S24LE_PLANAR,
|
||||
AV_CODEC_ID_PCM_S32LE_PLANAR,
|
||||
AV_CODEC_ID_PCM_S16BE_PLANAR,
|
||||
|
||||
AV_CODEC_ID_PCM_S64LE = 0x10800,
|
||||
AV_CODEC_ID_PCM_S64LE,
|
||||
AV_CODEC_ID_PCM_S64BE,
|
||||
AV_CODEC_ID_PCM_F16LE,
|
||||
AV_CODEC_ID_PCM_F24LE,
|
||||
|
@ -381,8 +393,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_ADPCM_G722,
|
||||
AV_CODEC_ID_ADPCM_IMA_APC,
|
||||
AV_CODEC_ID_ADPCM_VIMA,
|
||||
|
||||
AV_CODEC_ID_ADPCM_AFC = 0x11800,
|
||||
AV_CODEC_ID_ADPCM_AFC,
|
||||
AV_CODEC_ID_ADPCM_IMA_OKI,
|
||||
AV_CODEC_ID_ADPCM_DTK,
|
||||
AV_CODEC_ID_ADPCM_IMA_RAD,
|
||||
|
@ -401,6 +412,8 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_ADPCM_IMA_MTF,
|
||||
AV_CODEC_ID_ADPCM_IMA_CUNNING,
|
||||
AV_CODEC_ID_ADPCM_IMA_MOFLEX,
|
||||
AV_CODEC_ID_ADPCM_IMA_ACORN,
|
||||
AV_CODEC_ID_ADPCM_XMD,
|
||||
|
||||
/* AMR */
|
||||
AV_CODEC_ID_AMR_NB = 0x12000,
|
||||
|
@ -415,10 +428,11 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_INTERPLAY_DPCM,
|
||||
AV_CODEC_ID_XAN_DPCM,
|
||||
AV_CODEC_ID_SOL_DPCM,
|
||||
|
||||
AV_CODEC_ID_SDX2_DPCM = 0x14800,
|
||||
AV_CODEC_ID_SDX2_DPCM,
|
||||
AV_CODEC_ID_GREMLIN_DPCM,
|
||||
AV_CODEC_ID_DERF_DPCM,
|
||||
AV_CODEC_ID_WADY_DPCM,
|
||||
AV_CODEC_ID_CBD2_DPCM,
|
||||
|
||||
/* audio codecs */
|
||||
AV_CODEC_ID_MP2 = 0x15000,
|
||||
|
@ -489,8 +503,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_ON2AVC,
|
||||
AV_CODEC_ID_DSS_SP,
|
||||
AV_CODEC_ID_CODEC2,
|
||||
|
||||
AV_CODEC_ID_FFWAVESYNTH = 0x15800,
|
||||
AV_CODEC_ID_FFWAVESYNTH,
|
||||
AV_CODEC_ID_SONIC,
|
||||
AV_CODEC_ID_SONIC_LS,
|
||||
AV_CODEC_ID_EVRC,
|
||||
|
@ -517,6 +530,14 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_SIREN,
|
||||
AV_CODEC_ID_HCA,
|
||||
AV_CODEC_ID_FASTAUDIO,
|
||||
AV_CODEC_ID_MSNSIREN,
|
||||
AV_CODEC_ID_DFPWM,
|
||||
AV_CODEC_ID_BONK,
|
||||
AV_CODEC_ID_MISC4,
|
||||
AV_CODEC_ID_APAC,
|
||||
AV_CODEC_ID_FTR,
|
||||
AV_CODEC_ID_WAVARC,
|
||||
AV_CODEC_ID_RKA,
|
||||
|
||||
/* subtitle codecs */
|
||||
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
|
||||
|
@ -529,8 +550,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_HDMV_PGS_SUBTITLE,
|
||||
AV_CODEC_ID_DVB_TELETEXT,
|
||||
AV_CODEC_ID_SRT,
|
||||
|
||||
AV_CODEC_ID_MICRODVD = 0x17800,
|
||||
AV_CODEC_ID_MICRODVD,
|
||||
AV_CODEC_ID_EIA_608,
|
||||
AV_CODEC_ID_JACOSUB,
|
||||
AV_CODEC_ID_SAMI,
|
||||
|
@ -554,7 +574,7 @@ enum AVCodecID {
|
|||
|
||||
AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.
|
||||
AV_CODEC_ID_EPG,
|
||||
AV_CODEC_ID_BINTEXT = 0x18800,
|
||||
AV_CODEC_ID_BINTEXT,
|
||||
AV_CODEC_ID_XBIN,
|
||||
AV_CODEC_ID_IDF,
|
||||
AV_CODEC_ID_OTF,
|
||||
|
@ -572,6 +592,16 @@ enum AVCodecID {
|
|||
* stream (only used by libavformat) */
|
||||
AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
|
||||
AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket
|
||||
/**
|
||||
* Dummy null video codec, useful mainly for development and debugging.
|
||||
* Null encoder/decoder discard all input and never return any output.
|
||||
*/
|
||||
AV_CODEC_ID_VNULL,
|
||||
/**
|
||||
* Dummy null audio codec, useful mainly for development and debugging.
|
||||
* Null encoder/decoder discard all input and never return any output.
|
||||
*/
|
||||
AV_CODEC_ID_ANULL,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -585,6 +615,45 @@ enum AVMediaType avcodec_get_type(enum AVCodecID codec_id);
|
|||
*/
|
||||
const char *avcodec_get_name(enum AVCodecID id);
|
||||
|
||||
/**
|
||||
* Return codec bits per sample.
|
||||
*
|
||||
* @param[in] codec_id the codec
|
||||
* @return Number of bits per sample or zero if unknown for the given codec.
|
||||
*/
|
||||
int av_get_bits_per_sample(enum AVCodecID codec_id);
|
||||
|
||||
/**
|
||||
* Return codec bits per sample.
|
||||
* Only return non-zero if the bits per sample is exactly correct, not an
|
||||
* approximation.
|
||||
*
|
||||
* @param[in] codec_id the codec
|
||||
* @return Number of bits per sample or zero if unknown for the given codec.
|
||||
*/
|
||||
int av_get_exact_bits_per_sample(enum AVCodecID codec_id);
|
||||
|
||||
/**
|
||||
* Return a name for the specified profile, if available.
|
||||
*
|
||||
* @param codec_id the ID of the codec to which the requested profile belongs
|
||||
* @param profile the profile value for which a name is requested
|
||||
* @return A name for the profile if found, NULL otherwise.
|
||||
*
|
||||
* @note unlike av_get_profile_name(), which searches a list of profiles
|
||||
* supported by a specific decoder or encoder implementation, this
|
||||
* function searches the list of profiles from the AVCodecDescriptor
|
||||
*/
|
||||
const char *avcodec_profile_name(enum AVCodecID codec_id, int profile);
|
||||
|
||||
/**
|
||||
* Return the PCM codec associated with a sample format.
|
||||
* @param be endianness, 0 for little, 1 for big,
|
||||
* -1 (or anything else) for native
|
||||
* @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE
|
||||
*/
|
||||
enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/avutil.h"
|
||||
#include "libavutil/channel_layout.h"
|
||||
#include "libavutil/rational.h"
|
||||
#include "libavutil/pixfmt.h"
|
||||
|
||||
|
@ -31,15 +32,16 @@
|
|||
|
||||
/**
|
||||
* @addtogroup lavc_core
|
||||
* @{
|
||||
*/
|
||||
|
||||
enum AVFieldOrder {
|
||||
AV_FIELD_UNKNOWN,
|
||||
AV_FIELD_PROGRESSIVE,
|
||||
AV_FIELD_TT, //< Top coded_first, top displayed first
|
||||
AV_FIELD_BB, //< Bottom coded first, bottom displayed first
|
||||
AV_FIELD_TB, //< Top coded first, bottom displayed first
|
||||
AV_FIELD_BT, //< Bottom coded first, top displayed first
|
||||
AV_FIELD_TT, ///< Top coded_first, top displayed first
|
||||
AV_FIELD_BB, ///< Bottom coded first, bottom displayed first
|
||||
AV_FIELD_TB, ///< Top coded first, bottom displayed first
|
||||
AV_FIELD_BT, ///< Bottom coded first, top displayed first
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -154,16 +156,22 @@ typedef struct AVCodecParameters {
|
|||
*/
|
||||
int video_delay;
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* Audio only. The channel layout bitmask. May be 0 if the channel layout is
|
||||
* unknown or unspecified, otherwise the number of bits set must be equal to
|
||||
* the channels field.
|
||||
* @deprecated use ch_layout
|
||||
*/
|
||||
attribute_deprecated
|
||||
uint64_t channel_layout;
|
||||
/**
|
||||
* Audio only. The number of audio channels.
|
||||
* @deprecated use ch_layout.nb_channels
|
||||
*/
|
||||
attribute_deprecated
|
||||
int channels;
|
||||
#endif
|
||||
/**
|
||||
* Audio only. The number of audio samples per second.
|
||||
*/
|
||||
|
@ -198,6 +206,11 @@ typedef struct AVCodecParameters {
|
|||
* Audio only. Number of samples to skip after a discontinuity.
|
||||
*/
|
||||
int seek_preroll;
|
||||
|
||||
/**
|
||||
* Audio only. The channel layout and number of channels.
|
||||
*/
|
||||
AVChannelLayout ch_layout;
|
||||
} AVCodecParameters;
|
||||
|
||||
/**
|
||||
|
@ -221,6 +234,11 @@ void avcodec_parameters_free(AVCodecParameters **par);
|
|||
*/
|
||||
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src);
|
||||
|
||||
/**
|
||||
* This function is the same as av_get_audio_frame_duration(), except it works
|
||||
* with AVCodecParameters instead of an AVCodecContext.
|
||||
*/
|
||||
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -0,0 +1,192 @@
|
|||
/*
|
||||
*
|
||||
* 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 AVCODEC_DEFS_H
|
||||
#define AVCODEC_DEFS_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup libavc
|
||||
* Misc types and constants that do not belong anywhere else.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/**
|
||||
* @ingroup lavc_decoding
|
||||
* Required number of additionally allocated bytes at the end of the input bitstream for decoding.
|
||||
* This is mainly needed because some optimized bitstream readers read
|
||||
* 32 or 64 bit at once and could read over the end.<br>
|
||||
* Note: If the first 23 bits of the additional bytes are not 0, then damaged
|
||||
* MPEG bitstreams could cause overread and segfault.
|
||||
*/
|
||||
#define AV_INPUT_BUFFER_PADDING_SIZE 64
|
||||
|
||||
/**
|
||||
* Verify checksums embedded in the bitstream (could be of either encoded or
|
||||
* decoded data, depending on the format) and print an error message on mismatch.
|
||||
* If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
|
||||
* decoder/demuxer returning an error.
|
||||
*/
|
||||
#define AV_EF_CRCCHECK (1<<0)
|
||||
#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations
|
||||
#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length
|
||||
#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection
|
||||
|
||||
#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue
|
||||
#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
|
||||
#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors
|
||||
#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder/muxer should not do as an error
|
||||
|
||||
#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software.
|
||||
#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences.
|
||||
#define FF_COMPLIANCE_NORMAL 0
|
||||
#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions
|
||||
#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
|
||||
|
||||
/**
|
||||
* @ingroup lavc_decoding
|
||||
*/
|
||||
enum AVDiscard{
|
||||
/* We leave some space between them for extensions (drop some
|
||||
* keyframes for intra-only or drop just some bidir frames). */
|
||||
AVDISCARD_NONE =-16, ///< discard nothing
|
||||
AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi
|
||||
AVDISCARD_NONREF = 8, ///< discard all non reference
|
||||
AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
|
||||
AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
|
||||
AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
|
||||
AVDISCARD_ALL = 48, ///< discard all
|
||||
};
|
||||
|
||||
enum AVAudioServiceType {
|
||||
AV_AUDIO_SERVICE_TYPE_MAIN = 0,
|
||||
AV_AUDIO_SERVICE_TYPE_EFFECTS = 1,
|
||||
AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
|
||||
AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3,
|
||||
AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4,
|
||||
AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5,
|
||||
AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6,
|
||||
AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7,
|
||||
AV_AUDIO_SERVICE_TYPE_KARAOKE = 8,
|
||||
AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI
|
||||
};
|
||||
|
||||
/**
|
||||
* Pan Scan area.
|
||||
* This specifies the area which should be displayed.
|
||||
* Note there may be multiple such areas for one frame.
|
||||
*/
|
||||
typedef struct AVPanScan {
|
||||
/**
|
||||
* id
|
||||
* - encoding: Set by user.
|
||||
* - decoding: Set by libavcodec.
|
||||
*/
|
||||
int id;
|
||||
|
||||
/**
|
||||
* width and height in 1/16 pel
|
||||
* - encoding: Set by user.
|
||||
* - decoding: Set by libavcodec.
|
||||
*/
|
||||
int width;
|
||||
int height;
|
||||
|
||||
/**
|
||||
* position of the top left corner in 1/16 pel for up to 3 fields/frames
|
||||
* - encoding: Set by user.
|
||||
* - decoding: Set by libavcodec.
|
||||
*/
|
||||
int16_t position[3][2];
|
||||
} AVPanScan;
|
||||
|
||||
/**
|
||||
* This structure describes the bitrate properties of an encoded bitstream. It
|
||||
* roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD
|
||||
* parameters for H.264/HEVC.
|
||||
*/
|
||||
typedef struct AVCPBProperties {
|
||||
/**
|
||||
* Maximum bitrate of the stream, in bits per second.
|
||||
* Zero if unknown or unspecified.
|
||||
*/
|
||||
int64_t max_bitrate;
|
||||
/**
|
||||
* Minimum bitrate of the stream, in bits per second.
|
||||
* Zero if unknown or unspecified.
|
||||
*/
|
||||
int64_t min_bitrate;
|
||||
/**
|
||||
* Average bitrate of the stream, in bits per second.
|
||||
* Zero if unknown or unspecified.
|
||||
*/
|
||||
int64_t avg_bitrate;
|
||||
|
||||
/**
|
||||
* The size of the buffer to which the ratecontrol is applied, in bits.
|
||||
* Zero if unknown or unspecified.
|
||||
*/
|
||||
int64_t buffer_size;
|
||||
|
||||
/**
|
||||
* The delay between the time the packet this structure is associated with
|
||||
* is received and the time when it should be decoded, in periods of a 27MHz
|
||||
* clock.
|
||||
*
|
||||
* UINT64_MAX when unknown or unspecified.
|
||||
*/
|
||||
uint64_t vbv_delay;
|
||||
} AVCPBProperties;
|
||||
|
||||
/**
|
||||
* Allocate a CPB properties structure and initialize its fields to default
|
||||
* values.
|
||||
*
|
||||
* @param size if non-NULL, the size of the allocated struct will be written
|
||||
* here. This is useful for embedding it in side data.
|
||||
*
|
||||
* @return the newly allocated struct or NULL on failure
|
||||
*/
|
||||
AVCPBProperties *av_cpb_properties_alloc(size_t *size);
|
||||
|
||||
/**
|
||||
* This structure supplies correlation between a packet timestamp and a wall clock
|
||||
* production time. The definition follows the Producer Reference Time ('prft')
|
||||
* as defined in ISO/IEC 14496-12
|
||||
*/
|
||||
typedef struct AVProducerReferenceTime {
|
||||
/**
|
||||
* A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()).
|
||||
*/
|
||||
int64_t wallclock;
|
||||
int flags;
|
||||
} AVProducerReferenceTime;
|
||||
|
||||
/**
|
||||
* Encode extradata length to a buffer. Used by xiph codecs.
|
||||
*
|
||||
* @param s buffer to write to; must be at least (v/255+1) bytes long
|
||||
* @param v size of extradata in bytes
|
||||
* @return number of bytes written to the buffer.
|
||||
*/
|
||||
unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
|
||||
|
||||
#endif // AVCODEC_DEFS_H
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
#include "libavutil/pixfmt.h"
|
||||
#include "libavutil/rational.h"
|
||||
#include "avcodec.h"
|
||||
|
||||
/* minimum number of bytes to read from a DV stream in order to
|
||||
* determine the profile */
|
||||
|
|
|
@ -88,13 +88,15 @@ int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render);
|
|||
/**
|
||||
* Release a MediaCodec buffer and render it at the given time to the surface
|
||||
* that is associated with the decoder. The timestamp must be within one second
|
||||
* of the current java/lang/System#nanoTime() (which is implemented using
|
||||
* CLOCK_MONOTONIC on Android). See the Android MediaCodec documentation
|
||||
* of android/media/MediaCodec#releaseOutputBuffer(int,long) for more details.
|
||||
* of the current `java/lang/System#nanoTime()` (which is implemented using
|
||||
* `CLOCK_MONOTONIC` on Android). See the Android MediaCodec documentation
|
||||
* of [`android/media/MediaCodec#releaseOutputBuffer(int,long)`][0] for more details.
|
||||
*
|
||||
* @param buffer the buffer to render
|
||||
* @param time timestamp in nanoseconds of when to render the buffer
|
||||
* @return 0 on success, < 0 otherwise
|
||||
*
|
||||
* [0]: https://developer.android.com/reference/android/media/MediaCodec#releaseOutputBuffer(int,%20long)
|
||||
*/
|
||||
int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time);
|
||||
|
||||
|
|
|
@ -28,8 +28,9 @@
|
|||
#include "libavutil/buffer.h"
|
||||
#include "libavutil/dict.h"
|
||||
#include "libavutil/rational.h"
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#include "libavcodec/version.h"
|
||||
#include "libavcodec/version_major.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavc_packet AVPacket
|
||||
|
@ -160,7 +161,7 @@ enum AVPacketSideDataType {
|
|||
* the packet may contain "dual mono" audio specific to Japanese DTV
|
||||
* and if it is true, recommends only the selected channel to be used.
|
||||
* @code
|
||||
* u8 selected channels (0=mail/left, 1=sub/right, 2=both)
|
||||
* u8 selected channels (0=main/left, 1=sub/right, 2=both)
|
||||
* @endcode
|
||||
*/
|
||||
AV_PKT_DATA_JP_DUALMONO,
|
||||
|
@ -290,6 +291,14 @@ enum AVPacketSideDataType {
|
|||
*/
|
||||
AV_PKT_DATA_S12M_TIMECODE,
|
||||
|
||||
/**
|
||||
* HDR10+ dynamic metadata associated with a video frame. The metadata is in
|
||||
* the form of the AVDynamicHDRPlus struct and contains
|
||||
* information for color volume transform - application 4 of
|
||||
* SMPTE 2094-40:2016 standard.
|
||||
*/
|
||||
AV_PKT_DATA_DYNAMIC_HDR10_PLUS,
|
||||
|
||||
/**
|
||||
* The number of side data types.
|
||||
* This is not part of the public API/ABI in the sense that it may
|
||||
|
@ -305,11 +314,7 @@ 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;
|
||||
|
||||
|
@ -388,15 +393,29 @@ typedef struct AVPacket {
|
|||
|
||||
int64_t pos; ///< byte position in stream, -1 if unknown
|
||||
|
||||
#if FF_API_CONVERGENCE_DURATION
|
||||
/**
|
||||
* @deprecated Same as the duration field, but as int64_t. This was required
|
||||
* for Matroska subtitles, whose duration values could overflow when the
|
||||
* duration field was still an int.
|
||||
* for some private data of the user
|
||||
*/
|
||||
attribute_deprecated
|
||||
int64_t convergence_duration;
|
||||
#endif
|
||||
void *opaque;
|
||||
|
||||
/**
|
||||
* AVBufferRef for free use by the API user. FFmpeg will never check the
|
||||
* contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
|
||||
* the packet is unreferenced. av_packet_copy_props() calls create a new
|
||||
* reference with av_buffer_ref() for the target packet's opaque_ref field.
|
||||
*
|
||||
* This is unrelated to the opaque field, although it serves a similar
|
||||
* purpose.
|
||||
*/
|
||||
AVBufferRef *opaque_ref;
|
||||
|
||||
/**
|
||||
* Time base of the packet's timestamps.
|
||||
* In the future, this field may be set on packets output by encoders or
|
||||
* demuxers, but its value will be by default ignored on input to decoders
|
||||
* or muxers.
|
||||
*/
|
||||
AVRational time_base;
|
||||
} AVPacket;
|
||||
|
||||
#if FF_API_INIT_PACKET
|
||||
|
@ -429,8 +448,13 @@ typedef struct AVPacketList {
|
|||
#define AV_PKT_FLAG_DISPOSABLE 0x0010
|
||||
|
||||
enum AVSideDataParamChangeFlags {
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* @deprecated those are not used by any decoder
|
||||
*/
|
||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001,
|
||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
|
||||
#endif
|
||||
AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004,
|
||||
AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008,
|
||||
};
|
||||
|
@ -529,45 +553,6 @@ int av_grow_packet(AVPacket *pkt, int grow_by);
|
|||
*/
|
||||
int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
|
||||
|
||||
#if FF_API_AVPACKET_OLD_API
|
||||
/**
|
||||
* @warning This is a hack - the packet memory allocation stuff is broken. The
|
||||
* packet is allocated if it was not really allocated.
|
||||
*
|
||||
* @deprecated Use av_packet_ref or av_packet_make_refcounted
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_dup_packet(AVPacket *pkt);
|
||||
/**
|
||||
* Copy packet, including contents
|
||||
*
|
||||
* @return 0 on success, negative AVERROR on fail
|
||||
*
|
||||
* @deprecated Use av_packet_ref
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_copy_packet(AVPacket *dst, const AVPacket *src);
|
||||
|
||||
/**
|
||||
* Copy packet side data
|
||||
*
|
||||
* @return 0 on success, negative AVERROR on fail
|
||||
*
|
||||
* @deprecated Use av_packet_copy_props
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
|
||||
|
||||
/**
|
||||
* Free a packet.
|
||||
*
|
||||
* @deprecated Use av_packet_unref
|
||||
*
|
||||
* @param pkt packet to free
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_free_packet(AVPacket *pkt);
|
||||
#endif
|
||||
/**
|
||||
* Allocate new information of a packet.
|
||||
*
|
||||
|
@ -577,11 +562,7 @@ 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.
|
||||
|
@ -608,11 +589,7 @@ 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.
|
||||
|
@ -624,19 +601,7 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
|||
* @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
|
||||
int av_packet_merge_side_data(AVPacket *pkt);
|
||||
|
||||
attribute_deprecated
|
||||
int av_packet_split_side_data(AVPacket *pkt);
|
||||
#endif
|
||||
|
||||
const char *av_packet_side_data_name(enum AVPacketSideDataType type);
|
||||
|
||||
|
@ -647,11 +612,7 @@ 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.
|
||||
*
|
||||
|
@ -660,12 +621,8 @@ uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *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.
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#ifndef AVCODEC_QSV_H
|
||||
#define AVCODEC_QSV_H
|
||||
|
||||
#include <mfx/mfxvideo.h>
|
||||
#include <mfxvideo.h>
|
||||
|
||||
#include "libavutil/buffer.h"
|
||||
|
||||
|
@ -61,6 +61,8 @@ typedef struct AVQSVContext {
|
|||
* required by the encoder and the user-provided value nb_opaque_surfaces.
|
||||
* The array of the opaque surfaces will be exported to the caller through
|
||||
* the opaque_surfaces field.
|
||||
*
|
||||
* The caller must set this field to zero for oneVPL (MFX_VERSION >= 2.0)
|
||||
*/
|
||||
int opaque_alloc;
|
||||
|
||||
|
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* Video Acceleration API (shared data between FFmpeg and the video player)
|
||||
* HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1
|
||||
*
|
||||
* Copyright (C) 2008-2009 Splitted-Desktop Systems
|
||||
*
|
||||
* 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 AVCODEC_VAAPI_H
|
||||
#define AVCODEC_VAAPI_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup lavc_codec_hwaccel_vaapi
|
||||
* Public libavcodec VA API header.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "libavutil/attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
#if FF_API_STRUCT_VAAPI_CONTEXT
|
||||
|
||||
/**
|
||||
* @defgroup lavc_codec_hwaccel_vaapi VA API Decoding
|
||||
* @ingroup lavc_codec_hwaccel
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* This structure is used to share data between the FFmpeg library and
|
||||
* the client video application.
|
||||
* This shall be zero-allocated and available as
|
||||
* AVCodecContext.hwaccel_context. All user members can be set once
|
||||
* during initialization or through each AVCodecContext.get_buffer()
|
||||
* function call. In any case, they must be valid prior to calling
|
||||
* decoding functions.
|
||||
*
|
||||
* Deprecated: use AVCodecContext.hw_frames_ctx instead.
|
||||
*/
|
||||
struct attribute_deprecated vaapi_context {
|
||||
/**
|
||||
* Window system dependent data
|
||||
*
|
||||
* - encoding: unused
|
||||
* - decoding: Set by user
|
||||
*/
|
||||
void *display;
|
||||
|
||||
/**
|
||||
* Configuration ID
|
||||
*
|
||||
* - encoding: unused
|
||||
* - decoding: Set by user
|
||||
*/
|
||||
uint32_t config_id;
|
||||
|
||||
/**
|
||||
* Context ID (video decode pipeline)
|
||||
*
|
||||
* - encoding: unused
|
||||
* - decoding: Set by user
|
||||
*/
|
||||
uint32_t context_id;
|
||||
};
|
||||
|
||||
/* @} */
|
||||
|
||||
#endif /* FF_API_STRUCT_VAAPI_CONTEXT */
|
||||
|
||||
#endif /* AVCODEC_VAAPI_H */
|
|
@ -55,7 +55,6 @@
|
|||
#include "libavutil/attributes.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "version.h"
|
||||
|
||||
struct AVCodecContext;
|
||||
struct AVFrame;
|
||||
|
@ -153,24 +152,6 @@ int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type,
|
|||
*/
|
||||
AVVDPAUContext *av_vdpau_alloc_context(void);
|
||||
|
||||
#if FF_API_VDPAU_PROFILE
|
||||
/**
|
||||
* Get a decoder profile that should be used for initializing a VDPAU decoder.
|
||||
* Should be called from the AVCodecContext.get_format() callback.
|
||||
*
|
||||
* @deprecated Use av_vdpau_bind_context() instead.
|
||||
*
|
||||
* @param avctx the codec context being used for decoding the stream
|
||||
* @param profile a pointer into which the result will be written on success.
|
||||
* The contents of profile are undefined if this function returns
|
||||
* an error.
|
||||
*
|
||||
* @return 0 on success (non-negative), a negative AVERROR on failure.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile);
|
||||
#endif
|
||||
|
||||
/* @}*/
|
||||
/** @} */
|
||||
|
||||
#endif /* AVCODEC_VDPAU_H */
|
||||
|
|
|
@ -27,8 +27,9 @@
|
|||
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
||||
#define LIBAVCODEC_VERSION_MINOR 134
|
||||
#include "version_major.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MINOR 3
|
||||
#define LIBAVCODEC_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
|
@ -41,132 +42,4 @@
|
|||
|
||||
#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
|
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be
|
||||
* dropped at a future version bump. The defines themselves are not part of
|
||||
* the public API and may change, break or disappear at any time.
|
||||
*
|
||||
* @note, when bumping the major version it is recommended to manually
|
||||
* disable each FF_API_* in its own commit instead of disabling them all
|
||||
* at once through the bump. This improves the git bisect-ability of the change.
|
||||
*/
|
||||
|
||||
#ifndef FF_API_AVCTX_TIMEBASE
|
||||
#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_CODED_FRAME
|
||||
#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_SIDEDATA_ONLY_PKT
|
||||
#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_VDPAU_PROFILE
|
||||
#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_CONVERGENCE_DURATION
|
||||
#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_AVPICTURE
|
||||
#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_AVPACKET_OLD_API
|
||||
#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_RTP_CALLBACK
|
||||
#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_VBV_DELAY
|
||||
#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_CODER_TYPE
|
||||
#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_STAT_BITS
|
||||
#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_PRIVATE_OPT
|
||||
#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_ASS_TIMING
|
||||
#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OLD_BSF
|
||||
#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_COPY_CONTEXT
|
||||
#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_GET_CONTEXT_DEFAULTS
|
||||
#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_NVENC_OLD_NAME
|
||||
#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_STRUCT_VAAPI_CONTEXT
|
||||
#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_MERGE_SD_API
|
||||
#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_TAG_STRING
|
||||
#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_GETCHROMA
|
||||
#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_CODEC_GET_SET
|
||||
#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_USER_VISIBLE_AVHWACCEL
|
||||
#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_LOCKMGR
|
||||
#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_NEXT
|
||||
#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_UNSANITIZED_BITRATES
|
||||
#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OPENH264_SLICE_MODE
|
||||
#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OPENH264_CABAC
|
||||
#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#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 */
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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 AVCODEC_VERSION_MAJOR_H
|
||||
#define AVCODEC_VERSION_MAJOR_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup libavc
|
||||
* Libavcodec version macros.
|
||||
*/
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 60
|
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be
|
||||
* dropped at a future version bump. The defines themselves are not part of
|
||||
* the public API and may change, break or disappear at any time.
|
||||
*
|
||||
* @note, when bumping the major version it is recommended to manually
|
||||
* disable each FF_API_* in its own commit instead of disabling them all
|
||||
* at once through the bump. This improves the git bisect-ability of the change.
|
||||
*/
|
||||
|
||||
#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_IDCT_NONE (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_SVTAV1_OPTS (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_AYUV_CODECID (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_VT_OUTPUT_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
|
||||
// reminder to remove CrystalHD decoders on next major bump
|
||||
#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
|
||||
#endif /* AVCODEC_VERSION_MAJOR_H */
|
|
@ -29,6 +29,15 @@
|
|||
* Public libavcodec Videotoolbox header.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup lavc_codec_hwaccel_videotoolbox VideoToolbox Decoder
|
||||
* @ingroup lavc_codec_hwaccel
|
||||
*
|
||||
* Hardware accelerated decoding using VideoToolbox on Apple Platforms
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define Picture QuickdrawPicture
|
||||
|
@ -37,6 +46,8 @@
|
|||
|
||||
#include "libavcodec/avcodec.h"
|
||||
|
||||
#include "libavutil/attributes.h"
|
||||
|
||||
/**
|
||||
* This struct holds all the information that needs to be passed
|
||||
* between the caller and libavcodec for initializing Videotoolbox decoding.
|
||||
|
@ -46,15 +57,17 @@
|
|||
typedef struct AVVideotoolboxContext {
|
||||
/**
|
||||
* Videotoolbox decompression session object.
|
||||
* Created and freed the caller.
|
||||
*/
|
||||
VTDecompressionSessionRef session;
|
||||
|
||||
#if FF_API_VT_OUTPUT_CALLBACK
|
||||
/**
|
||||
* The output callback that must be passed to the session.
|
||||
* Set by av_videottoolbox_default_init()
|
||||
*/
|
||||
attribute_deprecated
|
||||
VTDecompressionOutputCallback output_callback;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* CVPixelBuffer Format Type that Videotoolbox will use for decoded frames.
|
||||
|
@ -65,17 +78,17 @@ typedef struct AVVideotoolboxContext {
|
|||
|
||||
/**
|
||||
* CoreMedia Format Description that Videotoolbox will use to create the decompression session.
|
||||
* Set by the caller.
|
||||
*/
|
||||
CMVideoFormatDescriptionRef cm_fmt_desc;
|
||||
|
||||
/**
|
||||
* CoreMedia codec type that Videotoolbox will use to create the decompression session.
|
||||
* Set by the caller.
|
||||
*/
|
||||
int cm_codec_type;
|
||||
} AVVideotoolboxContext;
|
||||
|
||||
#if FF_API_VT_HWACCEL_CONTEXT
|
||||
|
||||
/**
|
||||
* Allocate and initialize a Videotoolbox context.
|
||||
*
|
||||
|
@ -88,7 +101,9 @@ typedef struct AVVideotoolboxContext {
|
|||
* object and free the Videotoolbox context using av_free().
|
||||
*
|
||||
* @return the newly allocated context or NULL on failure
|
||||
* @deprecated Use AVCodecContext.hw_frames_ctx or hw_device_ctx instead.
|
||||
*/
|
||||
attribute_deprecated
|
||||
AVVideotoolboxContext *av_videotoolbox_alloc_context(void);
|
||||
|
||||
/**
|
||||
|
@ -98,7 +113,9 @@ AVVideotoolboxContext *av_videotoolbox_alloc_context(void);
|
|||
* @param avctx the corresponding codec context
|
||||
*
|
||||
* @return >= 0 on success, a negative AVERROR code on failure
|
||||
* @deprecated Use AVCodecContext.hw_frames_ctx or hw_device_ctx instead.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_videotoolbox_default_init(AVCodecContext *avctx);
|
||||
|
||||
/**
|
||||
|
@ -109,7 +126,9 @@ int av_videotoolbox_default_init(AVCodecContext *avctx);
|
|||
* @param vtctx the Videotoolbox context to use
|
||||
*
|
||||
* @return >= 0 on success, a negative AVERROR code on failure
|
||||
* @deprecated Use AVCodecContext.hw_frames_ctx or hw_device_ctx instead.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx);
|
||||
|
||||
/**
|
||||
|
@ -117,9 +136,13 @@ int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *
|
|||
* av_videotoolbox_default_init().
|
||||
*
|
||||
* @param avctx the corresponding codec context
|
||||
* @deprecated Use AVCodecContext.hw_frames_ctx or hw_device_ctx instead.
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_videotoolbox_default_free(AVCodecContext *avctx);
|
||||
|
||||
#endif /* FF_API_VT_HWACCEL_CONTEXT */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -27,10 +27,11 @@
|
|||
* Public libavcodec XvMC header.
|
||||
*/
|
||||
|
||||
#pragma message("XvMC is no longer supported; this header is deprecated and will be removed")
|
||||
|
||||
#include <X11/extensions/XvMC.h>
|
||||
|
||||
#include "libavutil/attributes.h"
|
||||
#include "version.h"
|
||||
#include "avcodec.h"
|
||||
|
||||
/**
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -27,12 +27,13 @@
|
|||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/dict.h"
|
||||
#include "libavutil/log.h"
|
||||
|
||||
#include "libavformat/version.h"
|
||||
#include "libavformat/version_major.h"
|
||||
|
||||
/**
|
||||
* Seeking works like for a local file.
|
||||
|
@ -100,9 +101,13 @@ typedef struct AVIODirEntry {
|
|||
int64_t filemode; /**< Unix file mode, -1 if unknown. */
|
||||
} AVIODirEntry;
|
||||
|
||||
#if FF_API_AVIODIRCONTEXT
|
||||
typedef struct AVIODirContext {
|
||||
struct URLContext *url_context;
|
||||
} AVIODirContext;
|
||||
#else
|
||||
typedef struct AVIODirContext AVIODirContext;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Different data types that can be returned via the AVIO
|
||||
|
@ -148,9 +153,9 @@ enum AVIODataMarkerType {
|
|||
|
||||
/**
|
||||
* Bytestream IO Context.
|
||||
* New fields can be added to the end with minor version bumps.
|
||||
* Removal, reordering and changes to existing fields require a major
|
||||
* version bump.
|
||||
* New public fields can be added with minor version bumps.
|
||||
* Removal, reordering and changes to existing public fields require
|
||||
* a major version bump.
|
||||
* sizeof(AVIOContext) must not be used outside libav*.
|
||||
*
|
||||
* @note None of the function pointers in AVIOContext should be called
|
||||
|
@ -237,12 +242,14 @@ typedef struct AVIOContext {
|
|||
int64_t (*seek)(void *opaque, int64_t offset, int whence);
|
||||
int64_t pos; /**< position in the file of the current buffer */
|
||||
int eof_reached; /**< true if was unable to read due to error or eof */
|
||||
int error; /**< contains the error code or 0 if no error happened */
|
||||
int write_flag; /**< true if open for writing */
|
||||
int max_packet_size;
|
||||
int min_packet_size; /**< Try to buffer at least this amount of data
|
||||
before flushing it. */
|
||||
unsigned long checksum;
|
||||
unsigned char *checksum_ptr;
|
||||
unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size);
|
||||
int error; /**< contains the error code or 0 if no error happened */
|
||||
/**
|
||||
* Pause or resume playback for network streaming protocols - e.g. MMS.
|
||||
*/
|
||||
|
@ -259,12 +266,6 @@ typedef struct AVIOContext {
|
|||
*/
|
||||
int seekable;
|
||||
|
||||
/**
|
||||
* max filesize, used to limit allocations
|
||||
* This field is internal to libavformat and access from outside is not allowed.
|
||||
*/
|
||||
int64_t maxsize;
|
||||
|
||||
/**
|
||||
* avio_read and avio_write should if possible be satisfied directly
|
||||
* instead of going through a buffer, and avio_seek will always
|
||||
|
@ -272,37 +273,6 @@ typedef struct AVIOContext {
|
|||
*/
|
||||
int direct;
|
||||
|
||||
/**
|
||||
* Bytes read statistic
|
||||
* This field is internal to libavformat and access from outside is not allowed.
|
||||
*/
|
||||
int64_t bytes_read;
|
||||
|
||||
/**
|
||||
* seek statistic
|
||||
* This field is internal to libavformat and access from outside is not allowed.
|
||||
*/
|
||||
int seek_count;
|
||||
|
||||
/**
|
||||
* writeout statistic
|
||||
* This field is internal to libavformat and access from outside is not allowed.
|
||||
*/
|
||||
int writeout_count;
|
||||
|
||||
/**
|
||||
* Original buffer size
|
||||
* used internally after probing and ensure seekback to reset the buffer size
|
||||
* This field is internal to libavformat and access from outside is not allowed.
|
||||
*/
|
||||
int orig_buffer_size;
|
||||
|
||||
/**
|
||||
* Threshold to favor readahead over seek.
|
||||
* This is current internal only, do not use from outside.
|
||||
*/
|
||||
int short_seek_threshold;
|
||||
|
||||
/**
|
||||
* ',' separated list of allowed protocols.
|
||||
*/
|
||||
|
@ -325,20 +295,6 @@ typedef struct AVIOContext {
|
|||
*/
|
||||
int ignore_boundary_point;
|
||||
|
||||
/**
|
||||
* Internal, not meant to be used from outside of AVIOContext.
|
||||
*/
|
||||
enum AVIODataMarkerType current_type;
|
||||
int64_t last_time;
|
||||
|
||||
/**
|
||||
* A callback that is used instead of short_seek_threshold.
|
||||
* This is current internal only, do not use from outside.
|
||||
*/
|
||||
int (*short_seek_get)(void *opaque);
|
||||
|
||||
int64_t written;
|
||||
|
||||
/**
|
||||
* Maximum reached position before a backward seek in the write buffer,
|
||||
* used keeping track of already written data for a later flush.
|
||||
|
@ -346,9 +302,14 @@ typedef struct AVIOContext {
|
|||
unsigned char *buf_ptr_max;
|
||||
|
||||
/**
|
||||
* Try to buffer at least this amount of data before flushing it
|
||||
* Read-only statistic of bytes read for this AVIOContext.
|
||||
*/
|
||||
int min_packet_size;
|
||||
int64_t bytes_read;
|
||||
|
||||
/**
|
||||
* Read-only statistic of bytes written for this AVIOContext.
|
||||
*/
|
||||
int64_t bytes_written;
|
||||
} AVIOContext;
|
||||
|
||||
/**
|
||||
|
@ -374,25 +335,6 @@ const char *avio_find_protocol_name(const char *url);
|
|||
*/
|
||||
int avio_check(const char *url, int flags);
|
||||
|
||||
/**
|
||||
* Move or rename a resource.
|
||||
*
|
||||
* @note url_src and url_dst should share the same protocol and authority.
|
||||
*
|
||||
* @param url_src url to resource to be moved
|
||||
* @param url_dst new url to resource if the operation succeeded
|
||||
* @return >=0 on success or negative on error.
|
||||
*/
|
||||
int avpriv_io_move(const char *url_src, const char *url_dst);
|
||||
|
||||
/**
|
||||
* Delete a resource.
|
||||
*
|
||||
* @param url resource to be deleted.
|
||||
* @return >=0 on success or negative on error.
|
||||
*/
|
||||
int avpriv_io_delete(const char *url);
|
||||
|
||||
/**
|
||||
* Open directory for reading.
|
||||
*
|
||||
|
@ -516,6 +458,7 @@ int avio_put_str16be(AVIOContext *s, const char *str);
|
|||
*
|
||||
* Zero-length ranges are omitted from the output.
|
||||
*
|
||||
* @param s the AVIOContext
|
||||
* @param time the stream time the current bytestream pos corresponds to
|
||||
* (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not
|
||||
* applicable
|
||||
|
@ -571,6 +514,12 @@ int64_t avio_size(AVIOContext *s);
|
|||
*/
|
||||
int avio_feof(AVIOContext *s);
|
||||
|
||||
/**
|
||||
* Writes a formatted string to the context taking a va_list.
|
||||
* @return number of bytes written, < 0 on error.
|
||||
*/
|
||||
int avio_vprintf(AVIOContext *s, const char *fmt, va_list ap);
|
||||
|
||||
/**
|
||||
* Writes a formatted string to the context.
|
||||
* @return number of bytes written, < 0 on error.
|
||||
|
|
|
@ -29,10 +29,9 @@
|
|||
|
||||
#include "libavutil/version.h"
|
||||
|
||||
// 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 76
|
||||
#include "version_major.h"
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MINOR 3
|
||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
|
@ -45,79 +44,4 @@
|
|||
|
||||
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
|
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be
|
||||
* dropped at a future version bump. The defines themselves are not part of
|
||||
* the public API and may change, break or disappear at any time.
|
||||
*
|
||||
* @note, when bumping the major version it is recommended to manually
|
||||
* disable each FF_API_* in its own commit instead of disabling them all
|
||||
* at once through the bump. This improves the git bisect-ability of the change.
|
||||
*
|
||||
*/
|
||||
#ifndef FF_API_COMPUTE_PKT_FIELDS2
|
||||
#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OLD_OPEN_CALLBACKS
|
||||
#define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_LAVF_AVCTX
|
||||
#define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_HTTP_USER_AGENT
|
||||
#define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_HLS_WRAP
|
||||
#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_HLS_USE_LOCALTIME
|
||||
#define FF_API_HLS_USE_LOCALTIME (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_LAVF_KEEPSIDE_FLAG
|
||||
#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OLD_ROTATE_API
|
||||
#define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_FORMAT_GET_SET
|
||||
#define FF_API_FORMAT_GET_SET (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OLD_AVIO_EOF_0
|
||||
#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_LAVF_FFSERVER
|
||||
#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_FORMAT_FILENAME
|
||||
#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OLD_RTSP_OPTIONS
|
||||
#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_NEXT
|
||||
#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_DASH_MIN_SEG_DURATION
|
||||
#define FF_API_DASH_MIN_SEG_DURATION (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_LAVF_MP4A_LATM
|
||||
#define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#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
|
||||
#define FF_API_R_FRAME_RATE 1
|
||||
#endif
|
||||
#endif /* AVFORMAT_VERSION_H */
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Version macros.
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef AVFORMAT_VERSION_MAJOR_H
|
||||
#define AVFORMAT_VERSION_MAJOR_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup libavf
|
||||
* Libavformat version macros
|
||||
*/
|
||||
|
||||
// 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 60
|
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be
|
||||
* dropped at a future version bump. The defines themselves are not part of
|
||||
* the public API and may change, break or disappear at any time.
|
||||
*
|
||||
* @note, when bumping the major version it is recommended to manually
|
||||
* disable each FF_API_* in its own commit instead of disabling them all
|
||||
* at once through the bump. This improves the git bisect-ability of the change.
|
||||
*
|
||||
*/
|
||||
#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 61)
|
||||
#define FF_API_GET_END_PTS (LIBAVFORMAT_VERSION_MAJOR < 61)
|
||||
#define FF_API_AVIODIRCONTEXT (LIBAVFORMAT_VERSION_MAJOR < 61)
|
||||
#define FF_API_AVFORMAT_IO_CLOSE (LIBAVFORMAT_VERSION_MAJOR < 61)
|
||||
|
||||
|
||||
#define FF_API_R_FRAME_RATE 1
|
||||
|
||||
#endif /* AVFORMAT_VERSION_MAJOR_H */
|
|
@ -30,7 +30,6 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_adler32 Adler-32
|
||||
|
@ -40,11 +39,7 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
typedef unsigned long AVAdler;
|
||||
#else
|
||||
typedef uint32_t AVAdler;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Calculate the Adler32 checksum of a buffer.
|
||||
|
@ -59,11 +54,7 @@ typedef uint32_t AVAdler;
|
|||
* @return updated checksum
|
||||
*/
|
||||
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,7 +24,6 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_aes AES
|
||||
|
@ -43,6 +42,9 @@ struct AVAES *av_aes_alloc(void);
|
|||
|
||||
/**
|
||||
* Initialize an AVAES context.
|
||||
*
|
||||
* @param a The AVAES context
|
||||
* @param key Pointer to the key
|
||||
* @param key_bits 128, 192 or 256
|
||||
* @param decrypt 0 for encryption, 1 for decryption
|
||||
*/
|
||||
|
@ -50,9 +52,11 @@ int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt);
|
|||
|
||||
/**
|
||||
* Encrypt or decrypt a buffer using a previously initialized context.
|
||||
* @param count number of 16 byte blocks
|
||||
*
|
||||
* @param a The AVAES context
|
||||
* @param dst destination array, can be equal to src
|
||||
* @param src source array, can be equal to dst
|
||||
* @param count number of 16 byte blocks
|
||||
* @param iv initialization vector for CBC mode, if NULL then ECB will be used
|
||||
* @param decrypt 0 for encryption, 1 for decryption
|
||||
*/
|
||||
|
|
|
@ -22,10 +22,15 @@
|
|||
#ifndef AVUTIL_AES_CTR_H
|
||||
#define AVUTIL_AES_CTR_H
|
||||
|
||||
/**
|
||||
* @defgroup lavu_aes_ctr AES-CTR
|
||||
* @ingroup lavu_crypto
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
#define AES_CTR_KEY_SIZE (16)
|
||||
#define AES_CTR_IV_SIZE (8)
|
||||
|
@ -39,17 +44,23 @@ struct AVAESCTR *av_aes_ctr_alloc(void);
|
|||
|
||||
/**
|
||||
* Initialize an AVAESCTR context.
|
||||
*
|
||||
* @param a The AVAESCTR context to initialize
|
||||
* @param key encryption key, must have a length of AES_CTR_KEY_SIZE
|
||||
*/
|
||||
int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key);
|
||||
|
||||
/**
|
||||
* Release an AVAESCTR context.
|
||||
*
|
||||
* @param a The AVAESCTR context
|
||||
*/
|
||||
void av_aes_ctr_free(struct AVAESCTR *a);
|
||||
|
||||
/**
|
||||
* Process a buffer using a previously initialized context.
|
||||
*
|
||||
* @param a The AVAESCTR context
|
||||
* @param dst destination array, can be equal to src
|
||||
* @param src source array, can be equal to dst
|
||||
* @param size the size of src and dst
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Copyright (c) 2023 Jan Ekström <jeebjp@gmail.com>
|
||||
*
|
||||
* 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_AMBIENT_VIEWING_ENVIRONMENT_H
|
||||
#define AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include "frame.h"
|
||||
#include "rational.h"
|
||||
|
||||
/**
|
||||
* Ambient viewing environment metadata as defined by H.274. The values are
|
||||
* saved in AVRationals so that they keep their exactness, while allowing for
|
||||
* easy access to a double value with f.ex. av_q2d.
|
||||
*
|
||||
* @note sizeof(AVAmbientViewingEnvironment) is not part of the public ABI, and
|
||||
* it must be allocated using av_ambient_viewing_environment_alloc.
|
||||
*/
|
||||
typedef struct AVAmbientViewingEnvironment {
|
||||
/**
|
||||
* Environmental illuminance of the ambient viewing environment in lux.
|
||||
*/
|
||||
AVRational ambient_illuminance;
|
||||
|
||||
/**
|
||||
* Normalized x chromaticity coordinate of the environmental ambient light
|
||||
* in the nominal viewing environment according to the CIE 1931 definition
|
||||
* of x and y as specified in ISO/CIE 11664-1.
|
||||
*/
|
||||
AVRational ambient_light_x;
|
||||
|
||||
/**
|
||||
* Normalized y chromaticity coordinate of the environmental ambient light
|
||||
* in the nominal viewing environment according to the CIE 1931 definition
|
||||
* of x and y as specified in ISO/CIE 11664-1.
|
||||
*/
|
||||
AVRational ambient_light_y;
|
||||
} AVAmbientViewingEnvironment;
|
||||
|
||||
/**
|
||||
* Allocate an AVAmbientViewingEnvironment structure.
|
||||
*
|
||||
* @return the newly allocated struct or NULL on failure
|
||||
*/
|
||||
AVAmbientViewingEnvironment *av_ambient_viewing_environment_alloc(size_t *size);
|
||||
|
||||
/**
|
||||
* Allocate and add an AVAmbientViewingEnvironment structure to an existing
|
||||
* AVFrame as side data.
|
||||
*
|
||||
* @return the newly allocated struct, or NULL on failure
|
||||
*/
|
||||
AVAmbientViewingEnvironment *av_ambient_viewing_environment_create_side_data(AVFrame *frame);
|
||||
|
||||
#endif /* AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H */
|
|
@ -110,7 +110,7 @@
|
|||
* scheduled for removal.
|
||||
*/
|
||||
#ifndef AV_NOWARN_DEPRECATED
|
||||
#if AV_GCC_VERSION_AT_LEAST(4,6)
|
||||
#if AV_GCC_VERSION_AT_LEAST(4,6) || defined(__clang__)
|
||||
# define AV_NOWARN_DEPRECATED(code) \
|
||||
_Pragma("GCC diagnostic push") \
|
||||
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
|
||||
|
|
|
@ -27,8 +27,7 @@
|
|||
#ifndef AVUTIL_AUDIO_FIFO_H
|
||||
#define AVUTIL_AUDIO_FIFO_H
|
||||
|
||||
#include "avutil.h"
|
||||
#include "fifo.h"
|
||||
#include "attributes.h"
|
||||
#include "samplefmt.h"
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
#define AVUTIL_AVASSERT_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "avutil.h"
|
||||
#include "log.h"
|
||||
#include "macros.h"
|
||||
|
||||
/**
|
||||
* assert() equivalent, that is always enabled.
|
||||
|
|
|
@ -135,6 +135,7 @@ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_forma
|
|||
/**
|
||||
* Get the count of continuous non zero chars starting from the beginning.
|
||||
*
|
||||
* @param s the string whose length to count
|
||||
* @param len maximum number of characters to check in the string, that
|
||||
* is the maximum value which is returned by the function
|
||||
*/
|
||||
|
@ -156,15 +157,6 @@ 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,
|
||||
* and return the token corresponding to the unescaped string.
|
||||
|
|
|
@ -331,12 +331,18 @@ unsigned av_int_list_length_for_size(unsigned elsize,
|
|||
#define av_int_list_length(list, term) \
|
||||
av_int_list_length_for_size(sizeof(*(list)), list, term)
|
||||
|
||||
#if FF_API_AV_FOPEN_UTF8
|
||||
/**
|
||||
* Open a file using a UTF-8 filename.
|
||||
* The API of this function matches POSIX fopen(), errors are returned through
|
||||
* errno.
|
||||
* @deprecated Avoid using it, as on Windows, the FILE* allocated by this
|
||||
* function may be allocated with a different CRT than the caller
|
||||
* who uses the FILE*. No replacement provided in public API.
|
||||
*/
|
||||
attribute_deprecated
|
||||
FILE *av_fopen_utf8(const char *path, const char *mode);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Return the fractional representation of the internal time base.
|
||||
|
|
|
@ -18,6 +18,12 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup lavu_avbprint
|
||||
* AVBPrint public header
|
||||
*/
|
||||
|
||||
#ifndef AVUTIL_BPRINT_H
|
||||
#define AVUTIL_BPRINT_H
|
||||
|
||||
|
@ -26,6 +32,14 @@
|
|||
#include "attributes.h"
|
||||
#include "avstring.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_avbprint AVBPrint
|
||||
* @ingroup lavu_data
|
||||
*
|
||||
* A buffer to print data progressively
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Define a structure with extra padding to a fixed size
|
||||
* This helps ensuring binary compatibility with future versions.
|
||||
|
@ -48,14 +62,14 @@ typedef struct name { \
|
|||
* Small buffers are kept in the structure itself, and thus require no
|
||||
* memory allocation at all (unless the contents of the buffer is needed
|
||||
* after the structure goes out of scope). This is almost as lightweight as
|
||||
* declaring a local "char buf[512]".
|
||||
* declaring a local `char buf[512]`.
|
||||
*
|
||||
* The length of the string can go beyond the allocated size: the buffer is
|
||||
* then truncated, but the functions still keep account of the actual total
|
||||
* length.
|
||||
*
|
||||
* In other words, buf->len can be greater than buf->size and records the
|
||||
* total length of what would have been to the buffer if there had been
|
||||
* In other words, AVBPrint.len can be greater than AVBPrint.size and records
|
||||
* the total length of what would have been to the buffer if there had been
|
||||
* enough memory.
|
||||
*
|
||||
* Append operations do not need to be tested for failure: if a memory
|
||||
|
@ -63,20 +77,17 @@ typedef struct name { \
|
|||
* is still updated. This situation can be tested with
|
||||
* av_bprint_is_complete().
|
||||
*
|
||||
* The size_max field determines several possible behaviours:
|
||||
*
|
||||
* size_max = -1 (= UINT_MAX) or any large value will let the buffer be
|
||||
* reallocated as necessary, with an amortized linear cost.
|
||||
*
|
||||
* size_max = 0 prevents writing anything to the buffer: only the total
|
||||
* length is computed. The write operations can then possibly be repeated in
|
||||
* a buffer with exactly the necessary size
|
||||
* (using size_init = size_max = len + 1).
|
||||
*
|
||||
* size_max = 1 is automatically replaced by the exact size available in the
|
||||
* structure itself, thus ensuring no dynamic memory allocation. The
|
||||
* internal buffer is large enough to hold a reasonable paragraph of text,
|
||||
* such as the current paragraph.
|
||||
* The AVBPrint.size_max field determines several possible behaviours:
|
||||
* - `size_max = -1` (= `UINT_MAX`) or any large value will let the buffer be
|
||||
* reallocated as necessary, with an amortized linear cost.
|
||||
* - `size_max = 0` prevents writing anything to the buffer: only the total
|
||||
* length is computed. The write operations can then possibly be repeated in
|
||||
* a buffer with exactly the necessary size
|
||||
* (using `size_init = size_max = len + 1`).
|
||||
* - `size_max = 1` is automatically replaced by the exact size available in the
|
||||
* structure itself, thus ensuring no dynamic memory allocation. The
|
||||
* internal buffer is large enough to hold a reasonable paragraph of text,
|
||||
* such as the current paragraph.
|
||||
*/
|
||||
|
||||
FF_PAD_STRUCTURE(AVBPrint, 1024,
|
||||
|
@ -88,12 +99,31 @@ FF_PAD_STRUCTURE(AVBPrint, 1024,
|
|||
)
|
||||
|
||||
/**
|
||||
* @name Max size special values
|
||||
* Convenience macros for special values for av_bprint_init() size_max
|
||||
* parameter.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Buffer will be reallocated as necessary, with an amortized linear cost.
|
||||
*/
|
||||
#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1)
|
||||
/**
|
||||
* Use the exact size available in the AVBPrint structure itself.
|
||||
*
|
||||
* Thus ensuring no dynamic memory allocation. The internal buffer is large
|
||||
* enough to hold a reasonable paragraph of text, such as the current paragraph.
|
||||
*/
|
||||
#define AV_BPRINT_SIZE_AUTOMATIC 1
|
||||
/**
|
||||
* Do not write anything to the buffer, only calculate the total length.
|
||||
*
|
||||
* The write operations can then possibly be repeated in a buffer with
|
||||
* exactly the necessary size (using `size_init = size_max = AVBPrint.len + 1`).
|
||||
*/
|
||||
#define AV_BPRINT_SIZE_COUNT_ONLY 0
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* Init a print buffer.
|
||||
|
@ -101,12 +131,12 @@ FF_PAD_STRUCTURE(AVBPrint, 1024,
|
|||
* @param buf buffer to init
|
||||
* @param size_init initial size (including the final 0)
|
||||
* @param size_max maximum size;
|
||||
* 0 means do not write anything, just count the length;
|
||||
* 1 is replaced by the maximum value for automatic storage;
|
||||
* any large value means that the internal buffer will be
|
||||
* reallocated as needed up to that limit; -1 is converted to
|
||||
* UINT_MAX, the largest limit possible.
|
||||
* Check also AV_BPRINT_SIZE_* macros.
|
||||
* - `0` means do not write anything, just count the length
|
||||
* - `1` is replaced by the maximum value for automatic storage
|
||||
* any large value means that the internal buffer will be
|
||||
* reallocated as needed up to that limit
|
||||
* - `-1` is converted to `UINT_MAX`, the largest limit possible.
|
||||
* Check also `AV_BPRINT_SIZE_*` macros.
|
||||
*/
|
||||
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max);
|
||||
|
||||
|
@ -216,4 +246,6 @@ int av_bprint_finalize(AVBPrint *buf, char **ret_str);
|
|||
void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars,
|
||||
enum AVEscapeMode mode, int flags);
|
||||
|
||||
/** @} */
|
||||
|
||||
#endif /* AVUTIL_BPRINT_H */
|
||||
|
|
|
@ -40,6 +40,8 @@
|
|||
# include "arm/bswap.h"
|
||||
#elif ARCH_AVR32
|
||||
# include "avr32/bswap.h"
|
||||
#elif ARCH_RISCV
|
||||
# include "riscv/bswap.h"
|
||||
#elif ARCH_SH4
|
||||
# include "sh4/bswap.h"
|
||||
#elif ARCH_X86
|
||||
|
|
|
@ -28,8 +28,6 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_buffer AVBuffer
|
||||
* @ingroup lavu_data
|
||||
|
@ -93,11 +91,7 @@ typedef struct AVBufferRef {
|
|||
/**
|
||||
* Size of data in bytes.
|
||||
*/
|
||||
#if FF_API_BUFFER_SIZE_T
|
||||
int size;
|
||||
#else
|
||||
size_t size;
|
||||
#endif
|
||||
} AVBufferRef;
|
||||
|
||||
/**
|
||||
|
@ -105,21 +99,13 @@ 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
|
||||
|
@ -142,11 +128,7 @@ AVBufferRef *av_buffer_allocz(size_t 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);
|
||||
|
||||
|
@ -163,7 +145,7 @@ void av_buffer_default_free(void *opaque, uint8_t *data);
|
|||
* @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on
|
||||
* failure.
|
||||
*/
|
||||
AVBufferRef *av_buffer_ref(AVBufferRef *buf);
|
||||
AVBufferRef *av_buffer_ref(const AVBufferRef *buf);
|
||||
|
||||
/**
|
||||
* Free a given reference and automatically free the buffer if there are no more
|
||||
|
@ -214,11 +196,7 @@ 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.
|
||||
|
@ -234,7 +212,7 @@ int av_buffer_realloc(AVBufferRef **buf, size_t size);
|
|||
* @return 0 on success
|
||||
* AVERROR(ENOMEM) on memory allocation failure.
|
||||
*/
|
||||
int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src);
|
||||
int av_buffer_replace(AVBufferRef **dst, const AVBufferRef *src);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
@ -285,11 +263,7 @@ 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.
|
||||
|
@ -306,13 +280,8 @@ AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t 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));
|
||||
|
||||
/**
|
||||
|
@ -344,7 +313,7 @@ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool);
|
|||
* therefore you have to use this function to access the original opaque
|
||||
* parameter of an allocated buffer.
|
||||
*/
|
||||
void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref);
|
||||
void *av_buffer_pool_buffer_get_opaque(const AVBufferRef *ref);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -59,7 +59,7 @@ int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits);
|
|||
* @param dst destination array, can be equal to src
|
||||
* @param src source array, can be equal to dst
|
||||
* @param count number of 16 byte blocks
|
||||
* @paran iv initialization vector for CBC mode, NULL for ECB mode
|
||||
* @param iv initialization vector for CBC mode, NULL for ECB mode
|
||||
* @param decrypt 0 for encryption, 1 for decryption
|
||||
*/
|
||||
void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt);
|
||||
|
|
|
@ -23,17 +23,132 @@
|
|||
#define AVUTIL_CHANNEL_LAYOUT_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "version.h"
|
||||
#include "attributes.h"
|
||||
|
||||
/**
|
||||
* @file
|
||||
* audio channel layout utility functions
|
||||
* @ingroup lavu_audio_channels
|
||||
* Public libavutil channel layout APIs header.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_audio
|
||||
* @defgroup lavu_audio_channels Audio channels
|
||||
* @ingroup lavu_audio
|
||||
*
|
||||
* Audio channel layout utility functions
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
enum AVChannel {
|
||||
///< Invalid channel index
|
||||
AV_CHAN_NONE = -1,
|
||||
AV_CHAN_FRONT_LEFT,
|
||||
AV_CHAN_FRONT_RIGHT,
|
||||
AV_CHAN_FRONT_CENTER,
|
||||
AV_CHAN_LOW_FREQUENCY,
|
||||
AV_CHAN_BACK_LEFT,
|
||||
AV_CHAN_BACK_RIGHT,
|
||||
AV_CHAN_FRONT_LEFT_OF_CENTER,
|
||||
AV_CHAN_FRONT_RIGHT_OF_CENTER,
|
||||
AV_CHAN_BACK_CENTER,
|
||||
AV_CHAN_SIDE_LEFT,
|
||||
AV_CHAN_SIDE_RIGHT,
|
||||
AV_CHAN_TOP_CENTER,
|
||||
AV_CHAN_TOP_FRONT_LEFT,
|
||||
AV_CHAN_TOP_FRONT_CENTER,
|
||||
AV_CHAN_TOP_FRONT_RIGHT,
|
||||
AV_CHAN_TOP_BACK_LEFT,
|
||||
AV_CHAN_TOP_BACK_CENTER,
|
||||
AV_CHAN_TOP_BACK_RIGHT,
|
||||
/** Stereo downmix. */
|
||||
AV_CHAN_STEREO_LEFT = 29,
|
||||
/** See above. */
|
||||
AV_CHAN_STEREO_RIGHT,
|
||||
AV_CHAN_WIDE_LEFT,
|
||||
AV_CHAN_WIDE_RIGHT,
|
||||
AV_CHAN_SURROUND_DIRECT_LEFT,
|
||||
AV_CHAN_SURROUND_DIRECT_RIGHT,
|
||||
AV_CHAN_LOW_FREQUENCY_2,
|
||||
AV_CHAN_TOP_SIDE_LEFT,
|
||||
AV_CHAN_TOP_SIDE_RIGHT,
|
||||
AV_CHAN_BOTTOM_FRONT_CENTER,
|
||||
AV_CHAN_BOTTOM_FRONT_LEFT,
|
||||
AV_CHAN_BOTTOM_FRONT_RIGHT,
|
||||
|
||||
/** Channel is empty can be safely skipped. */
|
||||
AV_CHAN_UNUSED = 0x200,
|
||||
|
||||
/** Channel contains data, but its position is unknown. */
|
||||
AV_CHAN_UNKNOWN = 0x300,
|
||||
|
||||
/**
|
||||
* Range of channels between AV_CHAN_AMBISONIC_BASE and
|
||||
* AV_CHAN_AMBISONIC_END represent Ambisonic components using the ACN system.
|
||||
*
|
||||
* Given a channel id `<i>` between AV_CHAN_AMBISONIC_BASE and
|
||||
* AV_CHAN_AMBISONIC_END (inclusive), the ACN index of the channel `<n>` is
|
||||
* `<n> = <i> - AV_CHAN_AMBISONIC_BASE`.
|
||||
*
|
||||
* @note these values are only used for AV_CHANNEL_ORDER_CUSTOM channel
|
||||
* orderings, the AV_CHANNEL_ORDER_AMBISONIC ordering orders the channels
|
||||
* implicitly by their position in the stream.
|
||||
*/
|
||||
AV_CHAN_AMBISONIC_BASE = 0x400,
|
||||
// leave space for 1024 ids, which correspond to maximum order-32 harmonics,
|
||||
// which should be enough for the foreseeable use cases
|
||||
AV_CHAN_AMBISONIC_END = 0x7ff,
|
||||
};
|
||||
|
||||
enum AVChannelOrder {
|
||||
/**
|
||||
* Only the channel count is specified, without any further information
|
||||
* about the channel order.
|
||||
*/
|
||||
AV_CHANNEL_ORDER_UNSPEC,
|
||||
/**
|
||||
* The native channel order, i.e. the channels are in the same order in
|
||||
* which they are defined in the AVChannel enum. This supports up to 63
|
||||
* different channels.
|
||||
*/
|
||||
AV_CHANNEL_ORDER_NATIVE,
|
||||
/**
|
||||
* The channel order does not correspond to any other predefined order and
|
||||
* is stored as an explicit map. For example, this could be used to support
|
||||
* layouts with 64 or more channels, or with empty/skipped (AV_CHAN_SILENCE)
|
||||
* channels at arbitrary positions.
|
||||
*/
|
||||
AV_CHANNEL_ORDER_CUSTOM,
|
||||
/**
|
||||
* The audio is represented as the decomposition of the sound field into
|
||||
* spherical harmonics. Each channel corresponds to a single expansion
|
||||
* component. Channels are ordered according to ACN (Ambisonic Channel
|
||||
* Number).
|
||||
*
|
||||
* The channel with the index n in the stream contains the spherical
|
||||
* harmonic of degree l and order m given by
|
||||
* @code{.unparsed}
|
||||
* l = floor(sqrt(n)),
|
||||
* m = n - l * (l + 1).
|
||||
* @endcode
|
||||
*
|
||||
* Conversely given a spherical harmonic of degree l and order m, the
|
||||
* corresponding channel index n is given by
|
||||
* @code{.unparsed}
|
||||
* n = l * (l + 1) + m.
|
||||
* @endcode
|
||||
*
|
||||
* Normalization is assumed to be SN3D (Schmidt Semi-Normalization)
|
||||
* as defined in AmbiX format $ 2.1.
|
||||
*/
|
||||
AV_CHANNEL_ORDER_AMBISONIC,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @defgroup channel_masks Audio channel masks
|
||||
*
|
||||
|
@ -46,41 +161,46 @@
|
|||
*
|
||||
* @{
|
||||
*/
|
||||
#define AV_CH_FRONT_LEFT 0x00000001
|
||||
#define AV_CH_FRONT_RIGHT 0x00000002
|
||||
#define AV_CH_FRONT_CENTER 0x00000004
|
||||
#define AV_CH_LOW_FREQUENCY 0x00000008
|
||||
#define AV_CH_BACK_LEFT 0x00000010
|
||||
#define AV_CH_BACK_RIGHT 0x00000020
|
||||
#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
|
||||
#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
|
||||
#define AV_CH_BACK_CENTER 0x00000100
|
||||
#define AV_CH_SIDE_LEFT 0x00000200
|
||||
#define AV_CH_SIDE_RIGHT 0x00000400
|
||||
#define AV_CH_TOP_CENTER 0x00000800
|
||||
#define AV_CH_TOP_FRONT_LEFT 0x00001000
|
||||
#define AV_CH_TOP_FRONT_CENTER 0x00002000
|
||||
#define AV_CH_TOP_FRONT_RIGHT 0x00004000
|
||||
#define AV_CH_TOP_BACK_LEFT 0x00008000
|
||||
#define AV_CH_TOP_BACK_CENTER 0x00010000
|
||||
#define AV_CH_TOP_BACK_RIGHT 0x00020000
|
||||
#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
|
||||
#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT.
|
||||
#define AV_CH_WIDE_LEFT 0x0000000080000000ULL
|
||||
#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL
|
||||
#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
|
||||
#define AV_CH_FRONT_LEFT (1ULL << AV_CHAN_FRONT_LEFT )
|
||||
#define AV_CH_FRONT_RIGHT (1ULL << AV_CHAN_FRONT_RIGHT )
|
||||
#define AV_CH_FRONT_CENTER (1ULL << AV_CHAN_FRONT_CENTER )
|
||||
#define AV_CH_LOW_FREQUENCY (1ULL << AV_CHAN_LOW_FREQUENCY )
|
||||
#define AV_CH_BACK_LEFT (1ULL << AV_CHAN_BACK_LEFT )
|
||||
#define AV_CH_BACK_RIGHT (1ULL << AV_CHAN_BACK_RIGHT )
|
||||
#define AV_CH_FRONT_LEFT_OF_CENTER (1ULL << AV_CHAN_FRONT_LEFT_OF_CENTER )
|
||||
#define AV_CH_FRONT_RIGHT_OF_CENTER (1ULL << AV_CHAN_FRONT_RIGHT_OF_CENTER)
|
||||
#define AV_CH_BACK_CENTER (1ULL << AV_CHAN_BACK_CENTER )
|
||||
#define AV_CH_SIDE_LEFT (1ULL << AV_CHAN_SIDE_LEFT )
|
||||
#define AV_CH_SIDE_RIGHT (1ULL << AV_CHAN_SIDE_RIGHT )
|
||||
#define AV_CH_TOP_CENTER (1ULL << AV_CHAN_TOP_CENTER )
|
||||
#define AV_CH_TOP_FRONT_LEFT (1ULL << AV_CHAN_TOP_FRONT_LEFT )
|
||||
#define AV_CH_TOP_FRONT_CENTER (1ULL << AV_CHAN_TOP_FRONT_CENTER )
|
||||
#define AV_CH_TOP_FRONT_RIGHT (1ULL << AV_CHAN_TOP_FRONT_RIGHT )
|
||||
#define AV_CH_TOP_BACK_LEFT (1ULL << AV_CHAN_TOP_BACK_LEFT )
|
||||
#define AV_CH_TOP_BACK_CENTER (1ULL << AV_CHAN_TOP_BACK_CENTER )
|
||||
#define AV_CH_TOP_BACK_RIGHT (1ULL << AV_CHAN_TOP_BACK_RIGHT )
|
||||
#define AV_CH_STEREO_LEFT (1ULL << AV_CHAN_STEREO_LEFT )
|
||||
#define AV_CH_STEREO_RIGHT (1ULL << AV_CHAN_STEREO_RIGHT )
|
||||
#define AV_CH_WIDE_LEFT (1ULL << AV_CHAN_WIDE_LEFT )
|
||||
#define AV_CH_WIDE_RIGHT (1ULL << AV_CHAN_WIDE_RIGHT )
|
||||
#define AV_CH_SURROUND_DIRECT_LEFT (1ULL << AV_CHAN_SURROUND_DIRECT_LEFT )
|
||||
#define AV_CH_SURROUND_DIRECT_RIGHT (1ULL << AV_CHAN_SURROUND_DIRECT_RIGHT)
|
||||
#define AV_CH_LOW_FREQUENCY_2 (1ULL << AV_CHAN_LOW_FREQUENCY_2 )
|
||||
#define AV_CH_TOP_SIDE_LEFT (1ULL << AV_CHAN_TOP_SIDE_LEFT )
|
||||
#define AV_CH_TOP_SIDE_RIGHT (1ULL << AV_CHAN_TOP_SIDE_RIGHT )
|
||||
#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER )
|
||||
#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT )
|
||||
#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT )
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/** Channel mask value used for AVCodecContext.request_channel_layout
|
||||
to indicate that the user requests the channel order of the decoder output
|
||||
to be the native codec channel order. */
|
||||
to be the native codec channel order.
|
||||
@deprecated channel order is now indicated in a special field in
|
||||
AVChannelLayout
|
||||
*/
|
||||
#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
@ -112,7 +232,9 @@
|
|||
#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
|
||||
#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
|
||||
#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
|
||||
#define AV_CH_LAYOUT_7POINT1_TOP_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
|
||||
#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_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_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)
|
||||
|
@ -128,6 +250,164 @@ enum AVMatrixEncoding {
|
|||
AV_MATRIX_ENCODING_NB
|
||||
};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* An AVChannelCustom defines a single channel within a custom order layout
|
||||
*
|
||||
* Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part of the
|
||||
* public ABI.
|
||||
*
|
||||
* No new fields may be added to it without a major version bump.
|
||||
*/
|
||||
typedef struct AVChannelCustom {
|
||||
enum AVChannel id;
|
||||
char name[16];
|
||||
void *opaque;
|
||||
} AVChannelCustom;
|
||||
|
||||
/**
|
||||
* An AVChannelLayout holds information about the channel layout of audio data.
|
||||
*
|
||||
* A channel layout here is defined as a set of channels ordered in a specific
|
||||
* way (unless the channel order is AV_CHANNEL_ORDER_UNSPEC, in which case an
|
||||
* AVChannelLayout carries only the channel count).
|
||||
* All orders may be treated as if they were AV_CHANNEL_ORDER_UNSPEC by
|
||||
* ignoring everything but the channel count, as long as av_channel_layout_check()
|
||||
* considers they are valid.
|
||||
*
|
||||
* Unlike most structures in FFmpeg, sizeof(AVChannelLayout) is a part of the
|
||||
* public ABI and may be used by the caller. E.g. it may be allocated on stack
|
||||
* or embedded in caller-defined structs.
|
||||
*
|
||||
* AVChannelLayout can be initialized as follows:
|
||||
* - default initialization with {0}, followed by setting all used fields
|
||||
* correctly;
|
||||
* - by assigning one of the predefined AV_CHANNEL_LAYOUT_* initializers;
|
||||
* - with a constructor function, such as av_channel_layout_default(),
|
||||
* av_channel_layout_from_mask() or av_channel_layout_from_string().
|
||||
*
|
||||
* The channel layout must be unitialized with av_channel_layout_uninit()
|
||||
*
|
||||
* Copying an AVChannelLayout via assigning is forbidden,
|
||||
* av_channel_layout_copy() must be used instead (and its return value should
|
||||
* be checked)
|
||||
*
|
||||
* No new fields may be added to it without a major version bump, except for
|
||||
* new elements of the union fitting in sizeof(uint64_t).
|
||||
*/
|
||||
typedef struct AVChannelLayout {
|
||||
/**
|
||||
* Channel order used in this layout.
|
||||
* This is a mandatory field.
|
||||
*/
|
||||
enum AVChannelOrder order;
|
||||
|
||||
/**
|
||||
* Number of channels in this layout. Mandatory field.
|
||||
*/
|
||||
int nb_channels;
|
||||
|
||||
/**
|
||||
* Details about which channels are present in this layout.
|
||||
* For AV_CHANNEL_ORDER_UNSPEC, this field is undefined and must not be
|
||||
* used.
|
||||
*/
|
||||
union {
|
||||
/**
|
||||
* This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used
|
||||
* for AV_CHANNEL_ORDER_AMBISONIC to signal non-diegetic channels.
|
||||
* It is a bitmask, where the position of each set bit means that the
|
||||
* AVChannel with the corresponding value is present.
|
||||
*
|
||||
* I.e. when (mask & (1 << AV_CHAN_FOO)) is non-zero, then AV_CHAN_FOO
|
||||
* is present in the layout. Otherwise it is not present.
|
||||
*
|
||||
* @note when a channel layout using a bitmask is constructed or
|
||||
* modified manually (i.e. not using any of the av_channel_layout_*
|
||||
* functions), the code doing it must ensure that the number of set bits
|
||||
* is equal to nb_channels.
|
||||
*/
|
||||
uint64_t mask;
|
||||
/**
|
||||
* This member must be used when the channel order is
|
||||
* AV_CHANNEL_ORDER_CUSTOM. It is a nb_channels-sized array, with each
|
||||
* element signalling the presence of the AVChannel with the
|
||||
* corresponding value in map[i].id.
|
||||
*
|
||||
* I.e. when map[i].id is equal to AV_CHAN_FOO, then AV_CH_FOO is the
|
||||
* i-th channel in the audio data.
|
||||
*
|
||||
* When map[i].id is in the range between AV_CHAN_AMBISONIC_BASE and
|
||||
* AV_CHAN_AMBISONIC_END (inclusive), the channel contains an ambisonic
|
||||
* component with ACN index (as defined above)
|
||||
* n = map[i].id - AV_CHAN_AMBISONIC_BASE.
|
||||
*
|
||||
* map[i].name may be filled with a 0-terminated string, in which case
|
||||
* it will be used for the purpose of identifying the channel with the
|
||||
* convenience functions below. Otherise it must be zeroed.
|
||||
*/
|
||||
AVChannelCustom *map;
|
||||
} u;
|
||||
|
||||
/**
|
||||
* For some private data of the user.
|
||||
*/
|
||||
void *opaque;
|
||||
} AVChannelLayout;
|
||||
|
||||
#define AV_CHANNEL_LAYOUT_MASK(nb, m) \
|
||||
{ .order = AV_CHANNEL_ORDER_NATIVE, .nb_channels = (nb), .u = { .mask = (m) }}
|
||||
|
||||
/**
|
||||
* @name Common pre-defined channel layouts
|
||||
* @{
|
||||
*/
|
||||
#define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO)
|
||||
#define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO)
|
||||
#define AV_CHANNEL_LAYOUT_2POINT1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1)
|
||||
#define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1)
|
||||
#define AV_CHANNEL_LAYOUT_SURROUND AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_SURROUND)
|
||||
#define AV_CHANNEL_LAYOUT_3POINT1 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_3POINT1)
|
||||
#define AV_CHANNEL_LAYOUT_4POINT0 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_4POINT0)
|
||||
#define AV_CHANNEL_LAYOUT_4POINT1 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_4POINT1)
|
||||
#define AV_CHANNEL_LAYOUT_2_2 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2)
|
||||
#define AV_CHANNEL_LAYOUT_QUAD AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD)
|
||||
#define AV_CHANNEL_LAYOUT_5POINT0 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0)
|
||||
#define AV_CHANNEL_LAYOUT_5POINT1 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1)
|
||||
#define AV_CHANNEL_LAYOUT_5POINT0_BACK AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0_BACK)
|
||||
#define AV_CHANNEL_LAYOUT_5POINT1_BACK AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1_BACK)
|
||||
#define AV_CHANNEL_LAYOUT_6POINT0 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0)
|
||||
#define AV_CHANNEL_LAYOUT_6POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0_FRONT)
|
||||
#define AV_CHANNEL_LAYOUT_HEXAGONAL AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_HEXAGONAL)
|
||||
#define AV_CHANNEL_LAYOUT_6POINT1 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1)
|
||||
#define AV_CHANNEL_LAYOUT_6POINT1_BACK AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_BACK)
|
||||
#define AV_CHANNEL_LAYOUT_6POINT1_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_FRONT)
|
||||
#define AV_CHANNEL_LAYOUT_7POINT0 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0)
|
||||
#define AV_CHANNEL_LAYOUT_7POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0_FRONT)
|
||||
#define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1)
|
||||
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE)
|
||||
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK)
|
||||
#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_TOP_BACK)
|
||||
#define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL)
|
||||
#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE)
|
||||
#define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL)
|
||||
#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX)
|
||||
#define AV_CHANNEL_LAYOUT_22POINT2 AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2)
|
||||
#define AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER \
|
||||
{ .order = AV_CHANNEL_ORDER_AMBISONIC, .nb_channels = 4, .u = { .mask = 0 }}
|
||||
/** @} */
|
||||
|
||||
struct AVBPrint;
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* @name Deprecated Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return a channel layout id that matches name, or 0 if no match is found.
|
||||
*
|
||||
|
@ -144,7 +424,10 @@ enum AVMatrixEncoding {
|
|||
* AV_CH_* macros).
|
||||
*
|
||||
* Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7"
|
||||
*
|
||||
* @deprecated use av_channel_layout_from_string()
|
||||
*/
|
||||
attribute_deprecated
|
||||
uint64_t av_get_channel_layout(const char *name);
|
||||
|
||||
/**
|
||||
|
@ -158,7 +441,9 @@ uint64_t av_get_channel_layout(const char *name);
|
|||
* @param[out] nb_channels number of channels
|
||||
*
|
||||
* @return 0 on success, AVERROR(EINVAL) if the parsing fails.
|
||||
* @deprecated use av_channel_layout_from_string()
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels);
|
||||
|
||||
/**
|
||||
|
@ -167,47 +452,66 @@ int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, i
|
|||
*
|
||||
* @param buf put here the string containing the channel layout
|
||||
* @param buf_size size in bytes of the buffer
|
||||
* @param nb_channels number of channels
|
||||
* @param channel_layout channel layout bitset
|
||||
* @deprecated use av_channel_layout_describe()
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
|
||||
|
||||
struct AVBPrint;
|
||||
/**
|
||||
* Append a description of a channel layout to a bprint buffer.
|
||||
* @deprecated use av_channel_layout_describe()
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout);
|
||||
|
||||
/**
|
||||
* Return the number of channels in the channel layout.
|
||||
* @deprecated use AVChannelLayout.nb_channels
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_get_channel_layout_nb_channels(uint64_t channel_layout);
|
||||
|
||||
/**
|
||||
* Return default channel layout for a given number of channels.
|
||||
*
|
||||
* @deprecated use av_channel_layout_default()
|
||||
*/
|
||||
attribute_deprecated
|
||||
int64_t av_get_default_channel_layout(int nb_channels);
|
||||
|
||||
/**
|
||||
* Get the index of a channel in channel_layout.
|
||||
*
|
||||
* @param channel_layout channel layout bitset
|
||||
* @param channel a channel layout describing exactly one channel which must be
|
||||
* present in channel_layout.
|
||||
*
|
||||
* @return index of channel in channel_layout on success, a negative AVERROR
|
||||
* on error.
|
||||
*
|
||||
* @deprecated use av_channel_layout_index_from_channel()
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_get_channel_layout_channel_index(uint64_t channel_layout,
|
||||
uint64_t channel);
|
||||
|
||||
/**
|
||||
* Get the channel with the given index in channel_layout.
|
||||
* @deprecated use av_channel_layout_channel_from_index()
|
||||
*/
|
||||
attribute_deprecated
|
||||
uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
|
||||
|
||||
/**
|
||||
* Get the name of a given channel.
|
||||
*
|
||||
* @return channel name on success, NULL on error.
|
||||
*
|
||||
* @deprecated use av_channel_name()
|
||||
*/
|
||||
attribute_deprecated
|
||||
const char *av_get_channel_name(uint64_t channel);
|
||||
|
||||
/**
|
||||
|
@ -215,7 +519,9 @@ const char *av_get_channel_name(uint64_t channel);
|
|||
*
|
||||
* @param channel a channel layout with a single channel
|
||||
* @return channel description on success, NULL on error
|
||||
* @deprecated use av_channel_description()
|
||||
*/
|
||||
attribute_deprecated
|
||||
const char *av_get_channel_description(uint64_t channel);
|
||||
|
||||
/**
|
||||
|
@ -226,12 +532,251 @@ const char *av_get_channel_description(uint64_t channel);
|
|||
* @param[out] name name of the layout
|
||||
* @return 0 if the layout exists,
|
||||
* <0 if index is beyond the limits
|
||||
* @deprecated use av_channel_layout_standard()
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
|
||||
const char **name);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Get a human readable string in an abbreviated form describing a given channel.
|
||||
* This is the inverse function of @ref av_channel_from_string().
|
||||
*
|
||||
* @param buf pre-allocated buffer where to put the generated string
|
||||
* @param buf_size size in bytes of the buffer.
|
||||
* @param channel the AVChannel whose name to get
|
||||
* @return amount of bytes needed to hold the output string, or a negative AVERROR
|
||||
* on failure. If the returned value is bigger than buf_size, then the
|
||||
* string was truncated.
|
||||
*/
|
||||
int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel);
|
||||
|
||||
/**
|
||||
* bprint variant of av_channel_name().
|
||||
*
|
||||
* @note the string will be appended to the bprint buffer.
|
||||
*/
|
||||
void av_channel_name_bprint(struct AVBPrint *bp, enum AVChannel channel_id);
|
||||
|
||||
/**
|
||||
* Get a human readable string describing a given channel.
|
||||
*
|
||||
* @param buf pre-allocated buffer where to put the generated string
|
||||
* @param buf_size size in bytes of the buffer.
|
||||
* @param channel the AVChannel whose description to get
|
||||
* @return amount of bytes needed to hold the output string, or a negative AVERROR
|
||||
* on failure. If the returned value is bigger than buf_size, then the
|
||||
* string was truncated.
|
||||
*/
|
||||
int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel);
|
||||
|
||||
/**
|
||||
* bprint variant of av_channel_description().
|
||||
*
|
||||
* @note the string will be appended to the bprint buffer.
|
||||
*/
|
||||
void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_id);
|
||||
|
||||
/**
|
||||
* This is the inverse function of @ref av_channel_name().
|
||||
*
|
||||
* @return the channel with the given name
|
||||
* AV_CHAN_NONE when name does not identify a known channel
|
||||
*/
|
||||
enum AVChannel av_channel_from_string(const char *name);
|
||||
|
||||
/**
|
||||
* Initialize a native channel layout from a bitmask indicating which channels
|
||||
* are present.
|
||||
*
|
||||
* @param channel_layout the layout structure to be initialized
|
||||
* @param mask bitmask describing the channel layout
|
||||
*
|
||||
* @return 0 on success
|
||||
* AVERROR(EINVAL) for invalid mask values
|
||||
*/
|
||||
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask);
|
||||
|
||||
/**
|
||||
* Initialize a channel layout from a given string description.
|
||||
* The input string can be represented by:
|
||||
* - the formal channel layout name (returned by av_channel_layout_describe())
|
||||
* - single or multiple channel names (returned by av_channel_name(), eg. "FL",
|
||||
* or concatenated with "+", each optionally containing a custom name after
|
||||
* a "@", eg. "FL@Left+FR@Right+LFE")
|
||||
* - a decimal or hexadecimal value of a native channel layout (eg. "4" or "0x4")
|
||||
* - the number of channels with default layout (eg. "4c")
|
||||
* - the number of unordered channels (eg. "4C" or "4 channels")
|
||||
* - the ambisonic order followed by optional non-diegetic channels (eg.
|
||||
* "ambisonic 2+stereo")
|
||||
*
|
||||
* @param channel_layout input channel layout
|
||||
* @param str string describing the channel layout
|
||||
* @return 0 channel layout was detected, AVERROR_INVALIDATATA otherwise
|
||||
*/
|
||||
int av_channel_layout_from_string(AVChannelLayout *channel_layout,
|
||||
const char *str);
|
||||
|
||||
/**
|
||||
* Get the default channel layout for a given number of channels.
|
||||
*
|
||||
* @param ch_layout the layout structure to be initialized
|
||||
* @param nb_channels number of channels
|
||||
*/
|
||||
void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels);
|
||||
|
||||
/**
|
||||
* Iterate over all standard channel layouts.
|
||||
*
|
||||
* @param opaque a pointer where libavutil will store the iteration state. Must
|
||||
* point to NULL to start the iteration.
|
||||
*
|
||||
* @return the standard channel layout or NULL when the iteration is
|
||||
* finished
|
||||
*/
|
||||
const AVChannelLayout *av_channel_layout_standard(void **opaque);
|
||||
|
||||
/**
|
||||
* Free any allocated data in the channel layout and reset the channel
|
||||
* count to 0.
|
||||
*
|
||||
* @param channel_layout the layout structure to be uninitialized
|
||||
*/
|
||||
void av_channel_layout_uninit(AVChannelLayout *channel_layout);
|
||||
|
||||
/**
|
||||
* Make a copy of a channel layout. This differs from just assigning src to dst
|
||||
* in that it allocates and copies the map for AV_CHANNEL_ORDER_CUSTOM.
|
||||
*
|
||||
* @note the destination channel_layout will be always uninitialized before copy.
|
||||
*
|
||||
* @param dst destination channel layout
|
||||
* @param src source channel layout
|
||||
* @return 0 on success, a negative AVERROR on error.
|
||||
*/
|
||||
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src);
|
||||
|
||||
/**
|
||||
* Get a human-readable string describing the channel layout properties.
|
||||
* The string will be in the same format that is accepted by
|
||||
* @ref av_channel_layout_from_string(), allowing to rebuild the same
|
||||
* channel layout, except for opaque pointers.
|
||||
*
|
||||
* @param channel_layout channel layout to be described
|
||||
* @param buf pre-allocated buffer where to put the generated string
|
||||
* @param buf_size size in bytes of the buffer.
|
||||
* @return amount of bytes needed to hold the output string, or a negative AVERROR
|
||||
* on failure. If the returned value is bigger than buf_size, then the
|
||||
* string was truncated.
|
||||
*/
|
||||
int av_channel_layout_describe(const AVChannelLayout *channel_layout,
|
||||
char *buf, size_t buf_size);
|
||||
|
||||
/**
|
||||
* bprint variant of av_channel_layout_describe().
|
||||
*
|
||||
* @note the string will be appended to the bprint buffer.
|
||||
* @return 0 on success, or a negative AVERROR value on failure.
|
||||
*/
|
||||
int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout,
|
||||
struct AVBPrint *bp);
|
||||
|
||||
/**
|
||||
* Get the channel with the given index in a channel layout.
|
||||
*
|
||||
* @param channel_layout input channel layout
|
||||
* @param idx index of the channel
|
||||
* @return channel with the index idx in channel_layout on success or
|
||||
* AV_CHAN_NONE on failure (if idx is not valid or the channel order is
|
||||
* unspecified)
|
||||
*/
|
||||
enum AVChannel
|
||||
av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx);
|
||||
|
||||
/**
|
||||
* Get the index of a given channel in a channel layout. In case multiple
|
||||
* channels are found, only the first match will be returned.
|
||||
*
|
||||
* @param channel_layout input channel layout
|
||||
* @param channel the channel whose index to obtain
|
||||
* @return index of channel in channel_layout on success or a negative number if
|
||||
* channel is not present in channel_layout.
|
||||
*/
|
||||
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout,
|
||||
enum AVChannel channel);
|
||||
|
||||
/**
|
||||
* Get the index in a channel layout of a channel described by the given string.
|
||||
* In case multiple channels are found, only the first match will be returned.
|
||||
*
|
||||
* This function accepts channel names in the same format as
|
||||
* @ref av_channel_from_string().
|
||||
*
|
||||
* @param channel_layout input channel layout
|
||||
* @param name string describing the channel whose index to obtain
|
||||
* @return a channel index described by the given string, or a negative AVERROR
|
||||
* value.
|
||||
*/
|
||||
int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout,
|
||||
const char *name);
|
||||
|
||||
/**
|
||||
* Get a channel described by the given string.
|
||||
*
|
||||
* This function accepts channel names in the same format as
|
||||
* @ref av_channel_from_string().
|
||||
*
|
||||
* @param channel_layout input channel layout
|
||||
* @param name string describing the channel to obtain
|
||||
* @return a channel described by the given string in channel_layout on success
|
||||
* or AV_CHAN_NONE on failure (if the string is not valid or the channel
|
||||
* order is unspecified)
|
||||
*/
|
||||
enum AVChannel
|
||||
av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout,
|
||||
const char *name);
|
||||
|
||||
/**
|
||||
* Find out what channels from a given set are present in a channel layout,
|
||||
* without regard for their positions.
|
||||
*
|
||||
* @param channel_layout input channel layout
|
||||
* @param mask a combination of AV_CH_* representing a set of channels
|
||||
* @return a bitfield representing all the channels from mask that are present
|
||||
* in channel_layout
|
||||
*/
|
||||
uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout,
|
||||
uint64_t mask);
|
||||
|
||||
/**
|
||||
* Check whether a channel layout is valid, i.e. can possibly describe audio
|
||||
* data.
|
||||
*
|
||||
* @param channel_layout input channel layout
|
||||
* @return 1 if channel_layout is valid, 0 otherwise.
|
||||
*/
|
||||
int av_channel_layout_check(const AVChannelLayout *channel_layout);
|
||||
|
||||
/**
|
||||
* Check whether two channel layouts are semantically the same, i.e. the same
|
||||
* channels are present on the same positions in both.
|
||||
*
|
||||
* If one of the channel layouts is AV_CHANNEL_ORDER_UNSPEC, while the other is
|
||||
* not, they are considered to be unequal. If both are AV_CHANNEL_ORDER_UNSPEC,
|
||||
* they are considered equal iff the channel counts are the same in both.
|
||||
*
|
||||
* @param chl input channel layout
|
||||
* @param chl1 input channel layout
|
||||
* @return 0 if chl and chl1 are equal, 1 if they are not equal. A negative
|
||||
* AVERROR code if one or both are invalid.
|
||||
*/
|
||||
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
|
|
@ -41,14 +41,6 @@
|
|||
|
||||
#include "attributes.h"
|
||||
#include "macros.h"
|
||||
#include "version.h"
|
||||
#include "libavutil/avconfig.h"
|
||||
|
||||
#if AV_HAVE_BIGENDIAN
|
||||
# define AV_NE(be, le) (be)
|
||||
#else
|
||||
# define AV_NE(be, le) (le)
|
||||
#endif
|
||||
|
||||
//rounded division & shift
|
||||
#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
|
||||
|
@ -89,25 +81,6 @@
|
|||
#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
|
||||
* if x == y. This is useful for instance in a qsort comparator callback.
|
||||
* Furthermore, compilers are able to optimize this to branchless code, and
|
||||
* there is no risk of overflow with signed types.
|
||||
* As with many macros, this evaluates its argument multiple times, it thus
|
||||
* must not have a side-effect.
|
||||
*/
|
||||
#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y)))
|
||||
|
||||
#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
|
||||
#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
|
||||
#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
|
||||
|
||||
#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
|
||||
#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
|
||||
|
||||
/* misc math functions */
|
||||
|
||||
#ifdef HAVE_AV_CONFIG_H
|
||||
|
@ -405,6 +378,8 @@ static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) {
|
|||
|
||||
/**
|
||||
* Clip a float value into the amin-amax range.
|
||||
* If a is nan or -inf amin will be returned.
|
||||
* If a is +inf amax will be returned.
|
||||
* @param a value to clip
|
||||
* @param amin minimum value of the clip range
|
||||
* @param amax maximum value of the clip range
|
||||
|
@ -415,13 +390,13 @@ static av_always_inline av_const float av_clipf_c(float a, float amin, float ama
|
|||
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
|
||||
if (amin > amax) abort();
|
||||
#endif
|
||||
if (a < amin) return amin;
|
||||
else if (a > amax) return amax;
|
||||
else return a;
|
||||
return FFMIN(FFMAX(a, amin), amax);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clip a double value into the amin-amax range.
|
||||
* If a is nan or -inf amin will be returned.
|
||||
* If a is +inf amax will be returned.
|
||||
* @param a value to clip
|
||||
* @param amin minimum value of the clip range
|
||||
* @param amax maximum value of the clip range
|
||||
|
@ -432,9 +407,7 @@ static av_always_inline av_const double av_clipd_c(double a, double amin, double
|
|||
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
|
||||
if (amin > amax) abort();
|
||||
#endif
|
||||
if (a < amin) return amin;
|
||||
else if (a > amax) return amax;
|
||||
else return a;
|
||||
return FFMIN(FFMAX(a, amin), amax);
|
||||
}
|
||||
|
||||
/** Compute ceil(log2(x)).
|
||||
|
@ -475,9 +448,6 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
|
|||
return av_popcount(v) & 1;
|
||||
}
|
||||
|
||||
#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
|
||||
#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
|
||||
|
||||
/**
|
||||
* Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
|
||||
*
|
||||
|
|
|
@ -23,8 +23,6 @@
|
|||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "attributes.h"
|
||||
|
||||
#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
|
||||
|
||||
/* lower 16 bits - CPU features */
|
||||
|
@ -56,6 +54,8 @@
|
|||
#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1
|
||||
#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2
|
||||
#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used
|
||||
#define AV_CPU_FLAG_AVX512ICL 0x200000 ///< F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ
|
||||
#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers.
|
||||
|
||||
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
|
||||
#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06
|
||||
|
@ -74,6 +74,20 @@
|
|||
#define AV_CPU_FLAG_MMI (1 << 0)
|
||||
#define AV_CPU_FLAG_MSA (1 << 1)
|
||||
|
||||
//Loongarch SIMD extension.
|
||||
#define AV_CPU_FLAG_LSX (1 << 0)
|
||||
#define AV_CPU_FLAG_LASX (1 << 1)
|
||||
|
||||
// RISC-V extensions
|
||||
#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank)
|
||||
#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP)
|
||||
#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP)
|
||||
#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */
|
||||
#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */
|
||||
#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */
|
||||
#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's
|
||||
#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations
|
||||
|
||||
/**
|
||||
* Return the flags which specify extensions supported by the CPU.
|
||||
* The returned value is affected by av_force_cpu_flags() if that was used
|
||||
|
@ -88,25 +102,6 @@ int av_get_cpu_flags(void);
|
|||
*/
|
||||
void av_force_cpu_flags(int flags);
|
||||
|
||||
/**
|
||||
* Set a mask on flags returned by av_get_cpu_flags().
|
||||
* This function is mainly useful for testing.
|
||||
* Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible
|
||||
*/
|
||||
attribute_deprecated void av_set_cpu_flags_mask(int mask);
|
||||
|
||||
/**
|
||||
* Parse CPU flags from a string.
|
||||
*
|
||||
* The returned flags contain the specified flags as well as related unspecified flags.
|
||||
*
|
||||
* This function exists only for compatibility with libav.
|
||||
* Please use av_parse_cpu_caps() when possible.
|
||||
* @return a combination of AV_CPU_* flags, negative on error.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_parse_cpu_flags(const char *s);
|
||||
|
||||
/**
|
||||
* Parse CPU caps from a string and update the given AV_CPU_* flags based on that.
|
||||
*
|
||||
|
@ -119,6 +114,12 @@ int av_parse_cpu_caps(unsigned *flags, const char *s);
|
|||
*/
|
||||
int av_cpu_count(void);
|
||||
|
||||
/**
|
||||
* Overrides cpu count detection and forces the specified count.
|
||||
* Count < 1 disables forcing of specific count.
|
||||
*/
|
||||
void av_cpu_force_count(int count);
|
||||
|
||||
/**
|
||||
* Get the maximum data alignment that may be required by FFmpeg.
|
||||
*
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_crc32 CRC
|
||||
|
@ -85,7 +84,10 @@ const AVCRC *av_crc_get_table(AVCRCId crc_id);
|
|||
|
||||
/**
|
||||
* Calculate the CRC of a block.
|
||||
* @param ctx initialized AVCRC array (see av_crc_init())
|
||||
* @param crc CRC of previous blocks if any or initial value for CRC
|
||||
* @param buffer buffer whose CRC to calculate
|
||||
* @param length length of the buffer
|
||||
* @return CRC updated with the data from the given block
|
||||
*
|
||||
* @see av_crc_init() "le" parameter
|
||||
|
|
|
@ -0,0 +1,150 @@
|
|||
/*
|
||||
* Copyright (c) 2015 Kevin Wheatley <kevin.j.wheatley@gmail.com>
|
||||
* Copyright (c) 2016 Ronald S. Bultje <rsbultje@gmail.com>
|
||||
* Copyright (c) 2023 Leo Izen <leo.izen@gmail.com>
|
||||
*
|
||||
* 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_CSP_H
|
||||
#define AVUTIL_CSP_H
|
||||
|
||||
#include "pixfmt.h"
|
||||
#include "rational.h"
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Colorspace value utility functions for libavutil.
|
||||
* @ingroup lavu_math_csp
|
||||
* @author Ronald S. Bultje <rsbultje@gmail.com>
|
||||
* @author Leo Izen <leo.izen@gmail.com>
|
||||
* @author Kevin Wheatley <kevin.j.wheatley@gmail.com>
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup lavu_math_csp Colorspace Utility
|
||||
* @ingroup lavu_math
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Struct containing luma coefficients to be used for RGB to YUV/YCoCg, or similar
|
||||
* calculations.
|
||||
*/
|
||||
typedef struct AVLumaCoefficients {
|
||||
AVRational cr, cg, cb;
|
||||
} AVLumaCoefficients;
|
||||
|
||||
/**
|
||||
* Struct containing chromaticity x and y values for the standard CIE 1931
|
||||
* chromaticity definition.
|
||||
*/
|
||||
typedef struct AVCIExy {
|
||||
AVRational x, y;
|
||||
} AVCIExy;
|
||||
|
||||
/**
|
||||
* Struct defining the red, green, and blue primary locations in terms of CIE
|
||||
* 1931 chromaticity x and y.
|
||||
*/
|
||||
typedef struct AVPrimaryCoefficients {
|
||||
AVCIExy r, g, b;
|
||||
} AVPrimaryCoefficients;
|
||||
|
||||
/**
|
||||
* Struct defining white point location in terms of CIE 1931 chromaticity x
|
||||
* and y.
|
||||
*/
|
||||
typedef AVCIExy AVWhitepointCoefficients;
|
||||
|
||||
/**
|
||||
* Struct that contains both white point location and primaries location, providing
|
||||
* the complete description of a color gamut.
|
||||
*/
|
||||
typedef struct AVColorPrimariesDesc {
|
||||
AVWhitepointCoefficients wp;
|
||||
AVPrimaryCoefficients prim;
|
||||
} AVColorPrimariesDesc;
|
||||
|
||||
/**
|
||||
* Function pointer representing a double -> double transfer function that performs
|
||||
* an EOTF transfer inversion. This function outputs linear light.
|
||||
*/
|
||||
typedef double (*av_csp_trc_function)(double);
|
||||
|
||||
/**
|
||||
* Retrieves the Luma coefficients necessary to construct a conversion matrix
|
||||
* from an enum constant describing the colorspace.
|
||||
* @param csp An enum constant indicating YUV or similar colorspace.
|
||||
* @return The Luma coefficients associated with that colorspace, or NULL
|
||||
* if the constant is unknown to libavutil.
|
||||
*/
|
||||
const AVLumaCoefficients *av_csp_luma_coeffs_from_avcsp(enum AVColorSpace csp);
|
||||
|
||||
/**
|
||||
* Retrieves a complete gamut description from an enum constant describing the
|
||||
* color primaries.
|
||||
* @param prm An enum constant indicating primaries
|
||||
* @return A description of the colorspace gamut associated with that enum
|
||||
* constant, or NULL if the constant is unknown to libavutil.
|
||||
*/
|
||||
const AVColorPrimariesDesc *av_csp_primaries_desc_from_id(enum AVColorPrimaries prm);
|
||||
|
||||
/**
|
||||
* Detects which enum AVColorPrimaries constant corresponds to the given complete
|
||||
* gamut description.
|
||||
* @see enum AVColorPrimaries
|
||||
* @param prm A description of the colorspace gamut
|
||||
* @return The enum constant associated with this gamut, or
|
||||
* AVCOL_PRI_UNSPECIFIED if no clear match can be idenitified.
|
||||
*/
|
||||
enum AVColorPrimaries av_csp_primaries_id_from_desc(const AVColorPrimariesDesc *prm);
|
||||
|
||||
/**
|
||||
* Determine a suitable 'gamma' value to match the supplied
|
||||
* AVColorTransferCharacteristic.
|
||||
*
|
||||
* See Apple Technical Note TN2257 (https://developer.apple.com/library/mac/technotes/tn2257/_index.html)
|
||||
*
|
||||
* This function returns the gamma exponent for the OETF. For example, sRGB is approximated
|
||||
* by gamma 2.2, not by gamma 0.45455.
|
||||
*
|
||||
* @return Will return an approximation to the simple gamma function matching
|
||||
* the supplied Transfer Characteristic, Will return 0.0 for any
|
||||
* we cannot reasonably match against.
|
||||
*/
|
||||
double av_csp_approximate_trc_gamma(enum AVColorTransferCharacteristic trc);
|
||||
|
||||
/**
|
||||
* Determine the function needed to apply the given
|
||||
* AVColorTransferCharacteristic to linear input.
|
||||
*
|
||||
* The function returned should expect a nominal domain and range of [0.0-1.0]
|
||||
* values outside of this range maybe valid depending on the chosen
|
||||
* characteristic function.
|
||||
*
|
||||
* @return Will return pointer to the function matching the
|
||||
* supplied Transfer Characteristic. If unspecified will
|
||||
* return NULL:
|
||||
*/
|
||||
av_csp_trc_function av_csp_trc_func_from_id(enum AVColorTransferCharacteristic trc);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_CSP_H */
|
|
@ -43,6 +43,8 @@ AVDES *av_des_alloc(void);
|
|||
/**
|
||||
* @brief Initializes an AVDES context.
|
||||
*
|
||||
* @param d pointer to a AVDES structure to initialize
|
||||
* @param key pointer to the key to use
|
||||
* @param key_bits must be 64 or 192
|
||||
* @param decrypt 0 for encryption/CBC-MAC, 1 for decryption
|
||||
* @return zero on success, negative value otherwise
|
||||
|
@ -52,9 +54,10 @@ int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt);
|
|||
/**
|
||||
* @brief Encrypts / decrypts using the DES algorithm.
|
||||
*
|
||||
* @param count number of 8 byte blocks
|
||||
* @param d pointer to the AVDES structure
|
||||
* @param dst destination array, can be equal to src, must be 8-byte aligned
|
||||
* @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL
|
||||
* @param count number of 8 byte blocks
|
||||
* @param iv initialization vector for CBC mode, if NULL then ECB will be used,
|
||||
* must be 8-byte aligned
|
||||
* @param decrypt 0 for encryption, 1 for decryption
|
||||
|
@ -64,9 +67,10 @@ void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count,
|
|||
/**
|
||||
* @brief Calculates CBC-MAC using the DES algorithm.
|
||||
*
|
||||
* @param count number of 8 byte blocks
|
||||
* @param d pointer to the AVDES structure
|
||||
* @param dst destination array, can be equal to src, must be 8-byte aligned
|
||||
* @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL
|
||||
* @param count number of 8 byte blocks
|
||||
*/
|
||||
void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count);
|
||||
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* 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_DETECTION_BBOX_H
|
||||
#define AVUTIL_DETECTION_BBOX_H
|
||||
|
||||
#include "rational.h"
|
||||
#include "avassert.h"
|
||||
#include "frame.h"
|
||||
|
||||
typedef struct AVDetectionBBox {
|
||||
/**
|
||||
* Distance in pixels from the left/top edge of the frame,
|
||||
* together with width and height, defining the bounding box.
|
||||
*/
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
int h;
|
||||
|
||||
#define AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE 64
|
||||
|
||||
/**
|
||||
* Detect result with confidence
|
||||
*/
|
||||
char detect_label[AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE];
|
||||
AVRational detect_confidence;
|
||||
|
||||
/**
|
||||
* At most 4 classifications based on the detected bounding box.
|
||||
* For example, we can get max 4 different attributes with 4 different
|
||||
* DNN models on one bounding box.
|
||||
* classify_count is zero if no classification.
|
||||
*/
|
||||
#define AV_NUM_DETECTION_BBOX_CLASSIFY 4
|
||||
uint32_t classify_count;
|
||||
char classify_labels[AV_NUM_DETECTION_BBOX_CLASSIFY][AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE];
|
||||
AVRational classify_confidences[AV_NUM_DETECTION_BBOX_CLASSIFY];
|
||||
} AVDetectionBBox;
|
||||
|
||||
typedef struct AVDetectionBBoxHeader {
|
||||
/**
|
||||
* Information about how the bounding box is generated.
|
||||
* for example, the DNN model name.
|
||||
*/
|
||||
char source[256];
|
||||
|
||||
/**
|
||||
* Number of bounding boxes in the array.
|
||||
*/
|
||||
uint32_t nb_bboxes;
|
||||
|
||||
/**
|
||||
* Offset in bytes from the beginning of this structure at which
|
||||
* the array of bounding boxes starts.
|
||||
*/
|
||||
size_t bboxes_offset;
|
||||
|
||||
/**
|
||||
* Size of each bounding box in bytes.
|
||||
*/
|
||||
size_t bbox_size;
|
||||
} AVDetectionBBoxHeader;
|
||||
|
||||
/*
|
||||
* Get the bounding box at the specified {@code idx}. Must be between 0 and nb_bboxes.
|
||||
*/
|
||||
static av_always_inline AVDetectionBBox *
|
||||
av_get_detection_bbox(const AVDetectionBBoxHeader *header, unsigned int idx)
|
||||
{
|
||||
av_assert0(idx < header->nb_bboxes);
|
||||
return (AVDetectionBBox *)((uint8_t *)header + header->bboxes_offset +
|
||||
idx * header->bbox_size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocates memory for AVDetectionBBoxHeader, plus an array of {@code nb_bboxes}
|
||||
* AVDetectionBBox, and initializes the variables.
|
||||
* Can be freed with a normal av_free() call.
|
||||
*
|
||||
* @param nb_bboxes number of AVDetectionBBox structures to allocate
|
||||
* @param out_size if non-NULL, the size in bytes of the resulting data array is
|
||||
* written here.
|
||||
*/
|
||||
AVDetectionBBoxHeader *av_detection_bbox_alloc(uint32_t nb_bboxes, size_t *out_size);
|
||||
|
||||
/**
|
||||
* Allocates memory for AVDetectionBBoxHeader, plus an array of {@code nb_bboxes}
|
||||
* AVDetectionBBox, in the given AVFrame {@code frame} as AVFrameSideData of type
|
||||
* AV_FRAME_DATA_DETECTION_BBOXES and initializes the variables.
|
||||
*/
|
||||
AVDetectionBBoxHeader *av_detection_bbox_create_side_data(AVFrame *frame, uint32_t nb_bboxes);
|
||||
#endif
|
|
@ -32,8 +32,6 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_dict AVDictionary
|
||||
* @ingroup lavu_data
|
||||
|
@ -41,13 +39,15 @@
|
|||
* @brief Simple key:value store
|
||||
*
|
||||
* @{
|
||||
* Dictionaries are used for storing key:value pairs. To create
|
||||
* an AVDictionary, simply pass an address of a NULL pointer to
|
||||
* av_dict_set(). NULL can be used as an empty dictionary wherever
|
||||
* a pointer to an AVDictionary is required.
|
||||
* Use av_dict_get() to retrieve an entry or iterate over all
|
||||
* entries and finally av_dict_free() to free the dictionary
|
||||
* and all its contents.
|
||||
* Dictionaries are used for storing key-value pairs.
|
||||
*
|
||||
* - To **create an AVDictionary**, simply pass an address of a NULL
|
||||
* pointer to av_dict_set(). NULL can be used as an empty dictionary
|
||||
* wherever a pointer to an AVDictionary is required.
|
||||
* - To **insert an entry**, use av_dict_set().
|
||||
* - Use av_dict_get() to **retrieve an entry**.
|
||||
* - To **iterate over all entries**, use av_dict_iterate().
|
||||
* - In order to **free the dictionary and all its contents**, use av_dict_free().
|
||||
*
|
||||
@code
|
||||
AVDictionary *d = NULL; // "create" an empty dictionary
|
||||
|
@ -59,13 +59,18 @@
|
|||
char *v = av_strdup("value"); // you can avoid copying them like this
|
||||
av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
|
||||
|
||||
while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
|
||||
<....> // iterate over all entries in d
|
||||
while ((t = av_dict_iterate(d, t))) {
|
||||
<....> // iterate over all entries in d
|
||||
}
|
||||
av_dict_free(&d);
|
||||
@endcode
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name AVDictionary Flags
|
||||
* Flags that influence behavior of the matching of keys or insertion to the dictionary.
|
||||
* @{
|
||||
*/
|
||||
#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */
|
||||
#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key,
|
||||
ignoring the suffix of the found key string. Only relevant in av_dict_get(). */
|
||||
|
@ -73,10 +78,13 @@
|
|||
allocated with av_malloc() or another memory allocation function. */
|
||||
#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been
|
||||
allocated with av_malloc() or another memory allocation function. */
|
||||
#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries.
|
||||
#define AV_DICT_DONT_OVERWRITE 16 /**< Don't overwrite existing entries. */
|
||||
#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no
|
||||
delimiter is added, the strings are simply concatenated. */
|
||||
delimiter is added, the strings are simply concatenated. */
|
||||
#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
typedef struct AVDictionaryEntry {
|
||||
char *key;
|
||||
|
@ -91,18 +99,44 @@ typedef struct AVDictionary AVDictionary;
|
|||
* The returned entry key or value must not be changed, or it will
|
||||
* cause undefined behavior.
|
||||
*
|
||||
* To iterate through all the dictionary entries, you can set the matching key
|
||||
* to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag.
|
||||
* @param prev Set to the previous matching element to find the next.
|
||||
* If set to NULL the first matching element is returned.
|
||||
* @param key Matching key
|
||||
* @param flags A collection of AV_DICT_* flags controlling how the
|
||||
* entry is retrieved
|
||||
*
|
||||
* @param prev Set to the previous matching element to find the next.
|
||||
* If set to NULL the first matching element is returned.
|
||||
* @param key matching key
|
||||
* @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved
|
||||
* @return found entry or NULL in case no matching entry was found in the dictionary
|
||||
* @return Found entry or NULL in case no matching entry was found in the dictionary
|
||||
*/
|
||||
AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key,
|
||||
const AVDictionaryEntry *prev, int flags);
|
||||
|
||||
/**
|
||||
* Iterate over a dictionary
|
||||
*
|
||||
* Iterates through all entries in the dictionary.
|
||||
*
|
||||
* @warning The returned AVDictionaryEntry key/value must not be changed.
|
||||
*
|
||||
* @warning As av_dict_set() invalidates all previous entries returned
|
||||
* by this function, it must not be called while iterating over the dict.
|
||||
*
|
||||
* Typical usage:
|
||||
* @code
|
||||
* const AVDictionaryEntry *e = NULL;
|
||||
* while ((e = av_dict_iterate(m, e))) {
|
||||
* // ...
|
||||
* }
|
||||
* @endcode
|
||||
*
|
||||
* @param m The dictionary to iterate over
|
||||
* @param prev Pointer to the previous AVDictionaryEntry, NULL initially
|
||||
*
|
||||
* @retval AVDictionaryEntry* The next element in the dictionary
|
||||
* @retval NULL No more elements in the dictionary
|
||||
*/
|
||||
const AVDictionaryEntry *av_dict_iterate(const AVDictionary *m,
|
||||
const AVDictionaryEntry *prev);
|
||||
|
||||
/**
|
||||
* Get number of entries in dictionary.
|
||||
*
|
||||
|
@ -117,23 +151,24 @@ int av_dict_count(const AVDictionary *m);
|
|||
* Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set,
|
||||
* these arguments will be freed on error.
|
||||
*
|
||||
* Warning: Adding a new entry to a dictionary invalidates all existing entries
|
||||
* previously returned with av_dict_get.
|
||||
* @warning Adding a new entry to a dictionary invalidates all existing entries
|
||||
* previously returned with av_dict_get() or av_dict_iterate().
|
||||
*
|
||||
* @param pm pointer to a pointer to a dictionary struct. If *pm is NULL
|
||||
* a dictionary struct is allocated and put in *pm.
|
||||
* @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags)
|
||||
* @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags).
|
||||
* Passing a NULL value will cause an existing entry to be deleted.
|
||||
* @return >= 0 on success otherwise an error code <0
|
||||
* @param pm Pointer to a pointer to a dictionary struct. If *pm is NULL
|
||||
* a dictionary struct is allocated and put in *pm.
|
||||
* @param key Entry key to add to *pm (will either be av_strduped or added as a new key depending on flags)
|
||||
* @param value Entry value to add to *pm (will be av_strduped or added as a new key depending on flags).
|
||||
* Passing a NULL value will cause an existing entry to be deleted.
|
||||
*
|
||||
* @return >= 0 on success otherwise an error code <0
|
||||
*/
|
||||
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
|
||||
|
||||
/**
|
||||
* Convenience wrapper for av_dict_set that converts the value to a string
|
||||
* Convenience wrapper for av_dict_set() that converts the value to a string
|
||||
* and stores it.
|
||||
*
|
||||
* Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error.
|
||||
* Note: If ::AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error.
|
||||
*/
|
||||
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags);
|
||||
|
||||
|
@ -143,14 +178,15 @@ int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags
|
|||
* In case of failure, all the successfully set entries are stored in
|
||||
* *pm. You may need to manually free the created dictionary.
|
||||
*
|
||||
* @param key_val_sep a 0-terminated list of characters used to separate
|
||||
* @param key_val_sep A 0-terminated list of characters used to separate
|
||||
* key from value
|
||||
* @param pairs_sep a 0-terminated list of characters used to separate
|
||||
* @param pairs_sep A 0-terminated list of characters used to separate
|
||||
* two pairs from each other
|
||||
* @param flags flags to use when adding to dictionary.
|
||||
* AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL
|
||||
* @param flags Flags to use when adding to the dictionary.
|
||||
* ::AV_DICT_DONT_STRDUP_KEY and ::AV_DICT_DONT_STRDUP_VAL
|
||||
* are ignored since the key/value tokens will always
|
||||
* be duplicated.
|
||||
*
|
||||
* @return 0 on success, negative AVERROR code on failure
|
||||
*/
|
||||
int av_dict_parse_string(AVDictionary **pm, const char *str,
|
||||
|
@ -159,11 +195,14 @@ int av_dict_parse_string(AVDictionary **pm, const char *str,
|
|||
|
||||
/**
|
||||
* Copy entries from one AVDictionary struct into another.
|
||||
* @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL,
|
||||
* this function will allocate a struct for you and put it in *dst
|
||||
* @param src pointer to source AVDictionary struct
|
||||
* @param flags flags to use when setting entries in *dst
|
||||
* @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag
|
||||
*
|
||||
* @note Metadata is read using the ::AV_DICT_IGNORE_SUFFIX flag
|
||||
*
|
||||
* @param dst Pointer to a pointer to a AVDictionary struct to copy into. If *dst is NULL,
|
||||
* this function will allocate a struct for you and put it in *dst
|
||||
* @param src Pointer to the source AVDictionary struct to copy items from.
|
||||
* @param flags Flags to use when setting entries in *dst
|
||||
*
|
||||
* @return 0 on success, negative AVERROR code on failure. If dst was allocated
|
||||
* by this function, callers should free the associated memory.
|
||||
*/
|
||||
|
@ -182,13 +221,15 @@ void av_dict_free(AVDictionary **m);
|
|||
* Such string may be passed back to av_dict_parse_string().
|
||||
* @note String is escaped with backslashes ('\').
|
||||
*
|
||||
* @param[in] m dictionary
|
||||
* @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same.
|
||||
*
|
||||
* @param[in] m The dictionary
|
||||
* @param[out] buffer Pointer to buffer that will be allocated with string containg entries.
|
||||
* Buffer must be freed by the caller when is no longer needed.
|
||||
* @param[in] key_val_sep character used to separate key from value
|
||||
* @param[in] pairs_sep character used to separate two pairs from each other
|
||||
* @param[in] key_val_sep Character used to separate key from value
|
||||
* @param[in] pairs_sep Character used to separate two pairs from each other
|
||||
*
|
||||
* @return >= 0 on success, negative on error
|
||||
* @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same.
|
||||
*/
|
||||
int av_dict_get_string(const AVDictionary *m, char **buffer,
|
||||
const char key_val_sep, const char pairs_sep);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup lavu_video_display
|
||||
* Display matrix
|
||||
*/
|
||||
|
||||
|
@ -27,18 +28,11 @@
|
|||
#define AVUTIL_DISPLAY_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "common.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_video
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavu_video_display Display transformation matrix functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_video_display
|
||||
* @ingroup lavu_video
|
||||
*
|
||||
* The display transformation matrix specifies an affine transformation that
|
||||
* should be applied to video frames for correct presentation. It is compatible
|
||||
* with the matrices stored in the ISO/IEC 14496-12 container format.
|
||||
|
@ -72,6 +66,8 @@
|
|||
* q' = (b * p + d * q + y) / z;
|
||||
* z = u * p + v * q + w
|
||||
* @endcode
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -88,11 +84,11 @@
|
|||
double av_display_rotation_get(const int32_t matrix[9]);
|
||||
|
||||
/**
|
||||
* Initialize a transformation matrix describing a pure counterclockwise
|
||||
* Initialize a transformation matrix describing a pure clockwise
|
||||
* rotation by the specified angle (in degrees).
|
||||
*
|
||||
* @param matrix an allocated transformation matrix (will be fully overwritten
|
||||
* by this function)
|
||||
* @param[out] matrix a transformation matrix (will be fully overwritten
|
||||
* by this function)
|
||||
* @param angle rotation angle in degrees.
|
||||
*/
|
||||
void av_display_rotation_set(int32_t matrix[9], double angle);
|
||||
|
@ -100,14 +96,13 @@ void av_display_rotation_set(int32_t matrix[9], double angle);
|
|||
/**
|
||||
* Flip the input matrix horizontally and/or vertically.
|
||||
*
|
||||
* @param matrix an allocated transformation matrix
|
||||
* @param[in,out] matrix a transformation matrix
|
||||
* @param hflip whether the matrix should be flipped horizontally
|
||||
* @param vflip whether the matrix should be flipped vertically
|
||||
*/
|
||||
void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip);
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "rational.h"
|
||||
|
||||
/*
|
||||
* DOVI configuration
|
||||
|
@ -67,4 +68,169 @@ typedef struct AVDOVIDecoderConfigurationRecord {
|
|||
*/
|
||||
AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size);
|
||||
|
||||
/**
|
||||
* Dolby Vision RPU data header.
|
||||
*
|
||||
* @note sizeof(AVDOVIRpuDataHeader) is not part of the public ABI.
|
||||
*/
|
||||
typedef struct AVDOVIRpuDataHeader {
|
||||
uint8_t rpu_type;
|
||||
uint16_t rpu_format;
|
||||
uint8_t vdr_rpu_profile;
|
||||
uint8_t vdr_rpu_level;
|
||||
uint8_t chroma_resampling_explicit_filter_flag;
|
||||
uint8_t coef_data_type; /* informative, lavc always converts to fixed */
|
||||
uint8_t coef_log2_denom;
|
||||
uint8_t vdr_rpu_normalized_idc;
|
||||
uint8_t bl_video_full_range_flag;
|
||||
uint8_t bl_bit_depth; /* [8, 16] */
|
||||
uint8_t el_bit_depth; /* [8, 16] */
|
||||
uint8_t vdr_bit_depth; /* [8, 16] */
|
||||
uint8_t spatial_resampling_filter_flag;
|
||||
uint8_t el_spatial_resampling_filter_flag;
|
||||
uint8_t disable_residual_flag;
|
||||
} AVDOVIRpuDataHeader;
|
||||
|
||||
enum AVDOVIMappingMethod {
|
||||
AV_DOVI_MAPPING_POLYNOMIAL = 0,
|
||||
AV_DOVI_MAPPING_MMR = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* Coefficients of a piece-wise function. The pieces of the function span the
|
||||
* value ranges between two adjacent pivot values.
|
||||
*/
|
||||
#define AV_DOVI_MAX_PIECES 8
|
||||
typedef struct AVDOVIReshapingCurve {
|
||||
uint8_t num_pivots; /* [2, 9] */
|
||||
uint16_t pivots[AV_DOVI_MAX_PIECES + 1]; /* sorted ascending */
|
||||
enum AVDOVIMappingMethod mapping_idc[AV_DOVI_MAX_PIECES];
|
||||
/* AV_DOVI_MAPPING_POLYNOMIAL */
|
||||
uint8_t poly_order[AV_DOVI_MAX_PIECES]; /* [1, 2] */
|
||||
int64_t poly_coef[AV_DOVI_MAX_PIECES][3]; /* x^0, x^1, x^2 */
|
||||
/* AV_DOVI_MAPPING_MMR */
|
||||
uint8_t mmr_order[AV_DOVI_MAX_PIECES]; /* [1, 3] */
|
||||
int64_t mmr_constant[AV_DOVI_MAX_PIECES];
|
||||
int64_t mmr_coef[AV_DOVI_MAX_PIECES][3/* order - 1 */][7];
|
||||
} AVDOVIReshapingCurve;
|
||||
|
||||
enum AVDOVINLQMethod {
|
||||
AV_DOVI_NLQ_NONE = -1,
|
||||
AV_DOVI_NLQ_LINEAR_DZ = 0,
|
||||
};
|
||||
|
||||
/**
|
||||
* Coefficients of the non-linear inverse quantization. For the interpretation
|
||||
* of these, see ETSI GS CCM 001.
|
||||
*/
|
||||
typedef struct AVDOVINLQParams {
|
||||
uint16_t nlq_offset;
|
||||
uint64_t vdr_in_max;
|
||||
/* AV_DOVI_NLQ_LINEAR_DZ */
|
||||
uint64_t linear_deadzone_slope;
|
||||
uint64_t linear_deadzone_threshold;
|
||||
} AVDOVINLQParams;
|
||||
|
||||
/**
|
||||
* Dolby Vision RPU data mapping parameters.
|
||||
*
|
||||
* @note sizeof(AVDOVIDataMapping) is not part of the public ABI.
|
||||
*/
|
||||
typedef struct AVDOVIDataMapping {
|
||||
uint8_t vdr_rpu_id;
|
||||
uint8_t mapping_color_space;
|
||||
uint8_t mapping_chroma_format_idc;
|
||||
AVDOVIReshapingCurve curves[3]; /* per component */
|
||||
|
||||
/* Non-linear inverse quantization */
|
||||
enum AVDOVINLQMethod nlq_method_idc;
|
||||
uint32_t num_x_partitions;
|
||||
uint32_t num_y_partitions;
|
||||
AVDOVINLQParams nlq[3]; /* per component */
|
||||
} AVDOVIDataMapping;
|
||||
|
||||
/**
|
||||
* Dolby Vision RPU colorspace metadata parameters.
|
||||
*
|
||||
* @note sizeof(AVDOVIColorMetadata) is not part of the public ABI.
|
||||
*/
|
||||
typedef struct AVDOVIColorMetadata {
|
||||
uint8_t dm_metadata_id;
|
||||
uint8_t scene_refresh_flag;
|
||||
|
||||
/**
|
||||
* Coefficients of the custom Dolby Vision IPT-PQ matrices. These are to be
|
||||
* used instead of the matrices indicated by the frame's colorspace tags.
|
||||
* The output of rgb_to_lms_matrix is to be fed into a BT.2020 LMS->RGB
|
||||
* matrix based on a Hunt-Pointer-Estevez transform, but without any
|
||||
* crosstalk. (See the definition of the ICtCp colorspace for more
|
||||
* information.)
|
||||
*/
|
||||
AVRational ycc_to_rgb_matrix[9]; /* before PQ linearization */
|
||||
AVRational ycc_to_rgb_offset[3]; /* input offset of neutral value */
|
||||
AVRational rgb_to_lms_matrix[9]; /* after PQ linearization */
|
||||
|
||||
/**
|
||||
* Extra signal metadata (see Dolby patents for more info).
|
||||
*/
|
||||
uint16_t signal_eotf;
|
||||
uint16_t signal_eotf_param0;
|
||||
uint16_t signal_eotf_param1;
|
||||
uint32_t signal_eotf_param2;
|
||||
uint8_t signal_bit_depth;
|
||||
uint8_t signal_color_space;
|
||||
uint8_t signal_chroma_format;
|
||||
uint8_t signal_full_range_flag; /* [0, 3] */
|
||||
uint16_t source_min_pq;
|
||||
uint16_t source_max_pq;
|
||||
uint16_t source_diagonal;
|
||||
} AVDOVIColorMetadata;
|
||||
|
||||
/**
|
||||
* Combined struct representing a combination of header, mapping and color
|
||||
* metadata, for attaching to frames as side data.
|
||||
*
|
||||
* @note The struct must be allocated with av_dovi_metadata_alloc() and
|
||||
* its size is not a part of the public ABI.
|
||||
*/
|
||||
|
||||
typedef struct AVDOVIMetadata {
|
||||
/**
|
||||
* Offset in bytes from the beginning of this structure at which the
|
||||
* respective structs start.
|
||||
*/
|
||||
size_t header_offset; /* AVDOVIRpuDataHeader */
|
||||
size_t mapping_offset; /* AVDOVIDataMapping */
|
||||
size_t color_offset; /* AVDOVIColorMetadata */
|
||||
} AVDOVIMetadata;
|
||||
|
||||
static av_always_inline AVDOVIRpuDataHeader *
|
||||
av_dovi_get_header(const AVDOVIMetadata *data)
|
||||
{
|
||||
return (AVDOVIRpuDataHeader *)((uint8_t *) data + data->header_offset);
|
||||
}
|
||||
|
||||
static av_always_inline AVDOVIDataMapping *
|
||||
av_dovi_get_mapping(const AVDOVIMetadata *data)
|
||||
{
|
||||
return (AVDOVIDataMapping *)((uint8_t *) data + data->mapping_offset);
|
||||
}
|
||||
|
||||
static av_always_inline AVDOVIColorMetadata *
|
||||
av_dovi_get_color(const AVDOVIMetadata *data)
|
||||
{
|
||||
return (AVDOVIColorMetadata *)((uint8_t *) data + data->color_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate an AVDOVIMetadata structure and initialize its
|
||||
* fields to default values.
|
||||
*
|
||||
* @param size If this parameter is non-NULL, the size in bytes of the
|
||||
* allocated struct will be written here on success
|
||||
*
|
||||
* @return the newly allocated struct or NULL on failure
|
||||
*/
|
||||
AVDOVIMetadata *av_dovi_metadata_alloc(size_t *size);
|
||||
|
||||
#endif /* AVUTIL_DOVI_META_H */
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "macros.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_error
|
||||
*
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#ifndef AVUTIL_EVAL_H
|
||||
#define AVUTIL_EVAL_H
|
||||
|
||||
#include "avutil.h"
|
||||
|
||||
typedef struct AVExpr AVExpr;
|
||||
|
||||
/**
|
||||
|
@ -44,6 +42,7 @@ typedef struct AVExpr AVExpr;
|
|||
* @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
|
||||
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
|
||||
* @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
|
||||
* @param log_offset log level offset, can be used to silence error messages
|
||||
* @param log_ctx parent logging context
|
||||
* @return >= 0 in case of success, a negative value corresponding to an
|
||||
* AVERROR code otherwise
|
||||
|
@ -67,6 +66,7 @@ int av_expr_parse_and_eval(double *res, const char *s,
|
|||
* @param funcs1 NULL terminated array of function pointers for functions which take 1 argument
|
||||
* @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
|
||||
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
|
||||
* @param log_offset log level offset, can be used to silence error messages
|
||||
* @param log_ctx parent logging context
|
||||
* @return >= 0 in case of success, a negative value corresponding to an
|
||||
* AVERROR code otherwise
|
||||
|
@ -80,6 +80,7 @@ int av_expr_parse(AVExpr **expr, const char *s,
|
|||
/**
|
||||
* Evaluate a previously parsed expression.
|
||||
*
|
||||
* @param e the AVExpr to evaluate
|
||||
* @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names
|
||||
* @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
|
||||
* @return the value of the expression
|
||||
|
@ -89,6 +90,7 @@ double av_expr_eval(AVExpr *e, const double *const_values, void *opaque);
|
|||
/**
|
||||
* Track the presence of variables and their number of occurrences in a parsed expression
|
||||
*
|
||||
* @param e the AVExpr to track variables in
|
||||
* @param counter a zero-initialized array where the count of each variable will be stored
|
||||
* @param size size of array
|
||||
* @return 0 on success, a negative value indicates that no expression or array was passed
|
||||
|
@ -100,6 +102,7 @@ int av_expr_count_vars(AVExpr *e, unsigned *counter, int size);
|
|||
* Track the presence of user provided functions and their number of occurrences
|
||||
* in a parsed expression.
|
||||
*
|
||||
* @param e the AVExpr to track user provided functions in
|
||||
* @param counter a zero-initialized array where the count of each function will be stored
|
||||
* if you passed 5 functions with 2 arguments to av_expr_parse()
|
||||
* then for arg=2 this will use upto 5 entries.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Automatically generated by version.sh, do not manually edit! */
|
||||
#ifndef AVUTIL_FFVERSION_H
|
||||
#define AVUTIL_FFVERSION_H
|
||||
#define FFMPEG_VERSION "4.4.3"
|
||||
#define FFMPEG_VERSION "6.0"
|
||||
#endif /* AVUTIL_FFVERSION_H */
|
||||
|
|
|
@ -18,16 +18,229 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* a very simple circular buffer FIFO implementation
|
||||
* @ingroup lavu_fifo
|
||||
* A generic FIFO API
|
||||
*/
|
||||
|
||||
#ifndef AVUTIL_FIFO_H
|
||||
#define AVUTIL_FIFO_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "avutil.h"
|
||||
#include "attributes.h"
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_fifo AVFifo
|
||||
* @ingroup lavu_data
|
||||
*
|
||||
* @{
|
||||
* A generic FIFO API
|
||||
*/
|
||||
|
||||
typedef struct AVFifo AVFifo;
|
||||
|
||||
/**
|
||||
* Callback for writing or reading from a FIFO, passed to (and invoked from) the
|
||||
* av_fifo_*_cb() functions. It may be invoked multiple times from a single
|
||||
* av_fifo_*_cb() call and may process less data than the maximum size indicated
|
||||
* by nb_elems.
|
||||
*
|
||||
* @param opaque the opaque pointer provided to the av_fifo_*_cb() function
|
||||
* @param buf the buffer for reading or writing the data, depending on which
|
||||
* av_fifo_*_cb function is called
|
||||
* @param nb_elems On entry contains the maximum number of elements that can be
|
||||
* read from / written into buf. On success, the callback should
|
||||
* update it to contain the number of elements actually written.
|
||||
*
|
||||
* @return 0 on success, a negative error code on failure (will be returned from
|
||||
* the invoking av_fifo_*_cb() function)
|
||||
*/
|
||||
typedef int AVFifoCB(void *opaque, void *buf, size_t *nb_elems);
|
||||
|
||||
/**
|
||||
* Automatically resize the FIFO on writes, so that the data fits. This
|
||||
* automatic resizing happens up to a limit that can be modified with
|
||||
* av_fifo_auto_grow_limit().
|
||||
*/
|
||||
#define AV_FIFO_FLAG_AUTO_GROW (1 << 0)
|
||||
|
||||
/**
|
||||
* Allocate and initialize an AVFifo with a given element size.
|
||||
*
|
||||
* @param elems initial number of elements that can be stored in the FIFO
|
||||
* @param elem_size Size in bytes of a single element. Further operations on
|
||||
* the returned FIFO will implicitly use this element size.
|
||||
* @param flags a combination of AV_FIFO_FLAG_*
|
||||
*
|
||||
* @return newly-allocated AVFifo on success, a negative error code on failure
|
||||
*/
|
||||
AVFifo *av_fifo_alloc2(size_t elems, size_t elem_size,
|
||||
unsigned int flags);
|
||||
|
||||
/**
|
||||
* @return Element size for FIFO operations. This element size is set at
|
||||
* FIFO allocation and remains constant during its lifetime
|
||||
*/
|
||||
size_t av_fifo_elem_size(const AVFifo *f);
|
||||
|
||||
/**
|
||||
* Set the maximum size (in elements) to which the FIFO can be resized
|
||||
* automatically. Has no effect unless AV_FIFO_FLAG_AUTO_GROW is used.
|
||||
*/
|
||||
void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems);
|
||||
|
||||
/**
|
||||
* @return number of elements available for reading from the given FIFO.
|
||||
*/
|
||||
size_t av_fifo_can_read(const AVFifo *f);
|
||||
|
||||
/**
|
||||
* @return Number of elements that can be written into the given FIFO without
|
||||
* growing it.
|
||||
*
|
||||
* In other words, this number of elements or less is guaranteed to fit
|
||||
* into the FIFO. More data may be written when the
|
||||
* AV_FIFO_FLAG_AUTO_GROW flag was specified at FIFO creation, but this
|
||||
* may involve memory allocation, which can fail.
|
||||
*/
|
||||
size_t av_fifo_can_write(const AVFifo *f);
|
||||
|
||||
/**
|
||||
* Enlarge an AVFifo.
|
||||
*
|
||||
* On success, the FIFO will be large enough to hold exactly
|
||||
* inc + av_fifo_can_read() + av_fifo_can_write()
|
||||
* elements. In case of failure, the old FIFO is kept unchanged.
|
||||
*
|
||||
* @param f AVFifo to resize
|
||||
* @param inc number of elements to allocate for, in addition to the current
|
||||
* allocated size
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*/
|
||||
int av_fifo_grow2(AVFifo *f, size_t inc);
|
||||
|
||||
/**
|
||||
* Write data into a FIFO.
|
||||
*
|
||||
* In case nb_elems > av_fifo_can_write(f) and the AV_FIFO_FLAG_AUTO_GROW flag
|
||||
* was not specified at FIFO creation, nothing is written and an error
|
||||
* is returned.
|
||||
*
|
||||
* Calling function is guaranteed to succeed if nb_elems <= av_fifo_can_write(f).
|
||||
*
|
||||
* @param f the FIFO buffer
|
||||
* @param buf Data to be written. nb_elems * av_fifo_elem_size(f) bytes will be
|
||||
* read from buf on success.
|
||||
* @param nb_elems number of elements to write into FIFO
|
||||
*
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*/
|
||||
int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems);
|
||||
|
||||
/**
|
||||
* Write data from a user-provided callback into a FIFO.
|
||||
*
|
||||
* @param f the FIFO buffer
|
||||
* @param read_cb Callback supplying the data to the FIFO. May be called
|
||||
* multiple times.
|
||||
* @param opaque opaque user data to be provided to read_cb
|
||||
* @param nb_elems Should point to the maximum number of elements that can be
|
||||
* written. Will be updated to contain the number of elements
|
||||
* actually written.
|
||||
*
|
||||
* @return non-negative number on success, a negative error code on failure
|
||||
*/
|
||||
int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb,
|
||||
void *opaque, size_t *nb_elems);
|
||||
|
||||
/**
|
||||
* Read data from a FIFO.
|
||||
*
|
||||
* In case nb_elems > av_fifo_can_read(f), nothing is read and an error
|
||||
* is returned.
|
||||
*
|
||||
* @param f the FIFO buffer
|
||||
* @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes
|
||||
* will be written into buf on success.
|
||||
* @param nb_elems number of elements to read from FIFO
|
||||
*
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*/
|
||||
int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems);
|
||||
|
||||
/**
|
||||
* Feed data from a FIFO into a user-provided callback.
|
||||
*
|
||||
* @param f the FIFO buffer
|
||||
* @param write_cb Callback the data will be supplied to. May be called
|
||||
* multiple times.
|
||||
* @param opaque opaque user data to be provided to write_cb
|
||||
* @param nb_elems Should point to the maximum number of elements that can be
|
||||
* read. Will be updated to contain the total number of elements
|
||||
* actually sent to the callback.
|
||||
*
|
||||
* @return non-negative number on success, a negative error code on failure
|
||||
*/
|
||||
int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb,
|
||||
void *opaque, size_t *nb_elems);
|
||||
|
||||
/**
|
||||
* Read data from a FIFO without modifying FIFO state.
|
||||
*
|
||||
* Returns an error if an attempt is made to peek to nonexistent elements
|
||||
* (i.e. if offset + nb_elems is larger than av_fifo_can_read(f)).
|
||||
*
|
||||
* @param f the FIFO buffer
|
||||
* @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes
|
||||
* will be written into buf.
|
||||
* @param nb_elems number of elements to read from FIFO
|
||||
* @param offset number of initial elements to skip.
|
||||
*
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*/
|
||||
int av_fifo_peek(AVFifo *f, void *buf, size_t nb_elems, size_t offset);
|
||||
|
||||
/**
|
||||
* Feed data from a FIFO into a user-provided callback.
|
||||
*
|
||||
* @param f the FIFO buffer
|
||||
* @param write_cb Callback the data will be supplied to. May be called
|
||||
* multiple times.
|
||||
* @param opaque opaque user data to be provided to write_cb
|
||||
* @param nb_elems Should point to the maximum number of elements that can be
|
||||
* read. Will be updated to contain the total number of elements
|
||||
* actually sent to the callback.
|
||||
* @param offset number of initial elements to skip; offset + *nb_elems must not
|
||||
* be larger than av_fifo_can_read(f).
|
||||
*
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*/
|
||||
int av_fifo_peek_to_cb(AVFifo *f, AVFifoCB write_cb, void *opaque,
|
||||
size_t *nb_elems, size_t offset);
|
||||
|
||||
/**
|
||||
* Discard the specified amount of data from an AVFifo.
|
||||
* @param size number of elements to discard, MUST NOT be larger than
|
||||
* av_fifo_can_read(f)
|
||||
*/
|
||||
void av_fifo_drain2(AVFifo *f, size_t size);
|
||||
|
||||
/*
|
||||
* Empty the AVFifo.
|
||||
* @param f AVFifo to reset
|
||||
*/
|
||||
void av_fifo_reset2(AVFifo *f);
|
||||
|
||||
/**
|
||||
* Free an AVFifo and reset pointer to NULL.
|
||||
* @param f Pointer to an AVFifo to free. *f == NULL is allowed.
|
||||
*/
|
||||
void av_fifo_freep2(AVFifo **f);
|
||||
|
||||
|
||||
#if FF_API_FIFO_OLD_API
|
||||
typedef struct AVFifoBuffer {
|
||||
uint8_t *buffer;
|
||||
uint8_t *rptr, *wptr, *end;
|
||||
|
@ -38,7 +251,9 @@ typedef struct AVFifoBuffer {
|
|||
* Initialize an AVFifoBuffer.
|
||||
* @param size of FIFO
|
||||
* @return AVFifoBuffer or NULL in case of memory allocation failure
|
||||
* @deprecated use av_fifo_alloc2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
AVFifoBuffer *av_fifo_alloc(unsigned int size);
|
||||
|
||||
/**
|
||||
|
@ -46,25 +261,33 @@ AVFifoBuffer *av_fifo_alloc(unsigned int size);
|
|||
* @param nmemb number of elements
|
||||
* @param size size of the single element
|
||||
* @return AVFifoBuffer or NULL in case of memory allocation failure
|
||||
* @deprecated use av_fifo_alloc2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size);
|
||||
|
||||
/**
|
||||
* Free an AVFifoBuffer.
|
||||
* @param f AVFifoBuffer to free
|
||||
* @deprecated use the AVFifo API with av_fifo_freep2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_fifo_free(AVFifoBuffer *f);
|
||||
|
||||
/**
|
||||
* Free an AVFifoBuffer and reset pointer to NULL.
|
||||
* @param f AVFifoBuffer to free
|
||||
* @deprecated use the AVFifo API with av_fifo_freep2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_fifo_freep(AVFifoBuffer **f);
|
||||
|
||||
/**
|
||||
* Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied.
|
||||
* @param f AVFifoBuffer to reset
|
||||
* @deprecated use av_fifo_reset2() with the new AVFifo-API
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_fifo_reset(AVFifoBuffer *f);
|
||||
|
||||
/**
|
||||
|
@ -72,7 +295,9 @@ void av_fifo_reset(AVFifoBuffer *f);
|
|||
* amount of data you can read from it.
|
||||
* @param f AVFifoBuffer to read from
|
||||
* @return size
|
||||
* @deprecated use av_fifo_can_read() with the new AVFifo-API
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_size(const AVFifoBuffer *f);
|
||||
|
||||
/**
|
||||
|
@ -80,7 +305,9 @@ int av_fifo_size(const AVFifoBuffer *f);
|
|||
* amount of data you can write into it.
|
||||
* @param f AVFifoBuffer to write into
|
||||
* @return size
|
||||
* @deprecated use av_fifo_can_write() with the new AVFifo-API
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_space(const AVFifoBuffer *f);
|
||||
|
||||
/**
|
||||
|
@ -91,7 +318,13 @@ int av_fifo_space(const AVFifoBuffer *f);
|
|||
* @param buf_size number of bytes to read
|
||||
* @param func generic read function
|
||||
* @param dest data destination
|
||||
*
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*
|
||||
* @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL,
|
||||
* av_fifo_peek_to_cb() otherwise
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int));
|
||||
|
||||
/**
|
||||
|
@ -101,7 +334,13 @@ int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_siz
|
|||
* @param buf_size number of bytes to read
|
||||
* @param func generic read function
|
||||
* @param dest data destination
|
||||
*
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*
|
||||
* @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL,
|
||||
* av_fifo_peek_to_cb() otherwise
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int));
|
||||
|
||||
/**
|
||||
|
@ -110,7 +349,13 @@ int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)
|
|||
* @param buf_size number of bytes to read
|
||||
* @param func generic read function
|
||||
* @param dest data destination
|
||||
*
|
||||
* @return a non-negative number on success, a negative error code on failure
|
||||
*
|
||||
* @deprecated use the new AVFifo-API with av_fifo_read() when func == NULL,
|
||||
* av_fifo_read_to_cb() otherwise
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int));
|
||||
|
||||
/**
|
||||
|
@ -124,8 +369,12 @@ int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)
|
|||
* func must return the number of bytes written to dest_buf, or <= 0 to
|
||||
* indicate no more data available to write.
|
||||
* If func is NULL, src is interpreted as a simple byte array for source data.
|
||||
* @return the number of bytes written to the FIFO
|
||||
* @return the number of bytes written to the FIFO or a negative error code on failure
|
||||
*
|
||||
* @deprecated use the new AVFifo-API with av_fifo_write() when func == NULL,
|
||||
* av_fifo_write_from_cb() otherwise
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int));
|
||||
|
||||
/**
|
||||
|
@ -135,7 +384,11 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void
|
|||
* @param f AVFifoBuffer to resize
|
||||
* @param size new AVFifoBuffer size in bytes
|
||||
* @return <0 for failure, >=0 otherwise
|
||||
*
|
||||
* @deprecated use the new AVFifo-API with av_fifo_grow2() to increase FIFO size,
|
||||
* decreasing FIFO size is not supported
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size);
|
||||
|
||||
/**
|
||||
|
@ -146,16 +399,24 @@ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size);
|
|||
* @param f AVFifoBuffer to resize
|
||||
* @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size()
|
||||
* @return <0 for failure, >=0 otherwise
|
||||
*
|
||||
* @deprecated use the new AVFifo-API with av_fifo_grow2(); note that unlike
|
||||
* this function it adds to the allocated size, rather than to the used size
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space);
|
||||
|
||||
/**
|
||||
* Read and discard the specified amount of data from an AVFifoBuffer.
|
||||
* @param f AVFifoBuffer to read from
|
||||
* @param size amount of data to read in bytes
|
||||
*
|
||||
* @deprecated use the new AVFifo-API with av_fifo_drain2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
void av_fifo_drain(AVFifoBuffer *f, int size);
|
||||
|
||||
#if FF_API_FIFO_PEEK2
|
||||
/**
|
||||
* Return a pointer to the data stored in a FIFO buffer at a certain offset.
|
||||
* The FIFO buffer is not modified.
|
||||
|
@ -165,7 +426,9 @@ void av_fifo_drain(AVFifoBuffer *f, int size);
|
|||
* than the used buffer size or the returned pointer will
|
||||
* point outside to the buffer data.
|
||||
* The used buffer size can be checked with av_fifo_size().
|
||||
* @deprecated use the new AVFifo-API with av_fifo_peek() or av_fifo_peek_to_cb()
|
||||
*/
|
||||
attribute_deprecated
|
||||
static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs)
|
||||
{
|
||||
uint8_t *ptr = f->rptr + offs;
|
||||
|
@ -175,5 +438,11 @@ static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs)
|
|||
ptr = f->end - (f->buffer - ptr);
|
||||
return ptr;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_FIFO_H */
|
||||
|
|
|
@ -19,9 +19,11 @@
|
|||
#ifndef AVUTIL_FILE_H
|
||||
#define AVUTIL_FILE_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "avutil.h"
|
||||
#include "version.h"
|
||||
#include "attributes.h"
|
||||
|
||||
/**
|
||||
* @file
|
||||
|
@ -37,6 +39,9 @@
|
|||
* case *bufptr will be set to NULL and *size will be set to 0.
|
||||
* The returned buffer must be released with av_file_unmap().
|
||||
*
|
||||
* @param filename path to the file
|
||||
* @param[out] bufptr pointee is set to the mapped or allocated buffer
|
||||
* @param[out] size pointee is set to the size in bytes of the buffer
|
||||
* @param log_offset loglevel offset used for logging
|
||||
* @param log_ctx context used for logging
|
||||
* @return a non negative number in case of success, a negative value
|
||||
|
@ -49,11 +54,13 @@ int av_file_map(const char *filename, uint8_t **bufptr, size_t *size,
|
|||
/**
|
||||
* Unmap or free the buffer bufptr created by av_file_map().
|
||||
*
|
||||
* @param bufptr the buffer previously created with av_file_map()
|
||||
* @param size size in bytes of bufptr, must be the same as returned
|
||||
* by av_file_map()
|
||||
*/
|
||||
void av_file_unmap(uint8_t *bufptr, size_t size);
|
||||
|
||||
#if FF_API_AV_FOPEN_UTF8
|
||||
/**
|
||||
* Wrapper to work around the lack of mkstemp() on mingw.
|
||||
* Also, tries to create file in /tmp first, if possible.
|
||||
|
@ -66,6 +73,8 @@ void av_file_unmap(uint8_t *bufptr, size_t size);
|
|||
* libraries and could interfere with the calling application.
|
||||
* @deprecated as fd numbers cannot be passed saftely between libs on some platforms
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx);
|
||||
#endif
|
||||
|
||||
#endif /* AVUTIL_FILE_H */
|
||||
|
|
|
@ -28,6 +28,11 @@ enum AVFilmGrainParamsType {
|
|||
* The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom)
|
||||
*/
|
||||
AV_FILM_GRAIN_PARAMS_AV1,
|
||||
|
||||
/**
|
||||
* The union is valid when interpreted as AVFilmGrainH274Params (codec.h274)
|
||||
*/
|
||||
AV_FILM_GRAIN_PARAMS_H274,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -117,6 +122,89 @@ typedef struct AVFilmGrainAOMParams {
|
|||
int limit_output_range;
|
||||
} AVFilmGrainAOMParams;
|
||||
|
||||
/**
|
||||
* This structure describes how to handle film grain synthesis for codecs using
|
||||
* the ITU-T H.274 Versatile suplemental enhancement information message.
|
||||
*
|
||||
* @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 AVFilmGrainH274Params {
|
||||
/**
|
||||
* Specifies the film grain simulation mode.
|
||||
* 0 = Frequency filtering, 1 = Auto-regression
|
||||
*/
|
||||
int model_id;
|
||||
|
||||
/**
|
||||
* Specifies the bit depth used for the luma component.
|
||||
*/
|
||||
int bit_depth_luma;
|
||||
|
||||
/**
|
||||
* Specifies the bit depth used for the chroma components.
|
||||
*/
|
||||
int bit_depth_chroma;
|
||||
|
||||
enum AVColorRange color_range;
|
||||
enum AVColorPrimaries color_primaries;
|
||||
enum AVColorTransferCharacteristic color_trc;
|
||||
enum AVColorSpace color_space;
|
||||
|
||||
/**
|
||||
* Specifies the blending mode used to blend the simulated film grain
|
||||
* with the decoded images.
|
||||
*
|
||||
* 0 = Additive, 1 = Multiplicative
|
||||
*/
|
||||
int blending_mode_id;
|
||||
|
||||
/**
|
||||
* Specifies a scale factor used in the film grain characterization equations.
|
||||
*/
|
||||
int log2_scale_factor;
|
||||
|
||||
/**
|
||||
* Indicates if the modelling of film grain for a given component is present.
|
||||
*/
|
||||
int component_model_present[3 /* y, cb, cr */];
|
||||
|
||||
/**
|
||||
* Specifies the number of intensity intervals for which a specific set of
|
||||
* model values has been estimated, with a range of [1, 256].
|
||||
*/
|
||||
uint16_t num_intensity_intervals[3 /* y, cb, cr */];
|
||||
|
||||
/**
|
||||
* Specifies the number of model values present for each intensity interval
|
||||
* in which the film grain has been modelled, with a range of [1, 6].
|
||||
*/
|
||||
uint8_t num_model_values[3 /* y, cb, cr */];
|
||||
|
||||
/**
|
||||
* Specifies the lower ounds of each intensity interval for whichthe set of
|
||||
* model values applies for the component.
|
||||
*/
|
||||
uint8_t intensity_interval_lower_bound[3 /* y, cb, cr */][256 /* intensity interval */];
|
||||
|
||||
/**
|
||||
* Specifies the upper bound of each intensity interval for which the set of
|
||||
* model values applies for the component.
|
||||
*/
|
||||
uint8_t intensity_interval_upper_bound[3 /* y, cb, cr */][256 /* intensity interval */];
|
||||
|
||||
/**
|
||||
* Specifies the model values for the component for each intensity interval.
|
||||
* - When model_id == 0, the following applies:
|
||||
* For comp_model_value[y], the range of values is [0, 2^bit_depth_luma - 1]
|
||||
* For comp_model_value[cb..cr], the range of values is [0, 2^bit_depth_chroma - 1]
|
||||
* - Otherwise, the following applies:
|
||||
* For comp_model_value[y], the range of values is [-2^(bit_depth_luma - 1), 2^(bit_depth_luma - 1) - 1]
|
||||
* For comp_model_value[cb..cr], the range of values is [-2^(bit_depth_chroma - 1), 2^(bit_depth_chroma - 1) - 1]
|
||||
*/
|
||||
int16_t comp_model_value[3 /* y, cb, cr */][256 /* intensity interval */][6 /* model value */];
|
||||
} AVFilmGrainH274Params;
|
||||
|
||||
/**
|
||||
* This structure describes how to handle film grain synthesis in video
|
||||
* for specific codecs. Must be present on every frame where film grain is
|
||||
|
@ -133,6 +221,9 @@ typedef struct AVFilmGrainParams {
|
|||
|
||||
/**
|
||||
* Seed to use for the synthesis process, if the codec allows for it.
|
||||
*
|
||||
* @note For H.264, this refers to `pic_offset` as defined in
|
||||
* SMPTE RDD 5-2006.
|
||||
*/
|
||||
uint64_t seed;
|
||||
|
||||
|
@ -143,6 +234,7 @@ typedef struct AVFilmGrainParams {
|
|||
*/
|
||||
union {
|
||||
AVFilmGrainAOMParams aom;
|
||||
AVFilmGrainH274Params h274;
|
||||
} codec;
|
||||
} AVFilmGrainParams;
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "avutil.h"
|
||||
#include "buffer.h"
|
||||
#include "channel_layout.h"
|
||||
#include "dict.h"
|
||||
#include "rational.h"
|
||||
#include "samplefmt.h"
|
||||
|
@ -142,23 +143,6 @@ enum AVFrameSideDataType {
|
|||
*/
|
||||
AV_FRAME_DATA_ICC_PROFILE,
|
||||
|
||||
#if FF_API_FRAME_QP
|
||||
/**
|
||||
* Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA.
|
||||
* The contents of this side data are undocumented and internal; use
|
||||
* av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a
|
||||
* meaningful way instead.
|
||||
*/
|
||||
AV_FRAME_DATA_QP_TABLE_PROPERTIES,
|
||||
|
||||
/**
|
||||
* Raw QP table data. Its format is described by
|
||||
* AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and
|
||||
* av_frame_get_qp_table() to access this instead.
|
||||
*/
|
||||
AV_FRAME_DATA_QP_TABLE_DATA,
|
||||
#endif
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
@ -198,6 +182,38 @@ enum AVFrameSideDataType {
|
|||
* Must be present for every frame which should have film grain applied.
|
||||
*/
|
||||
AV_FRAME_DATA_FILM_GRAIN_PARAMS,
|
||||
|
||||
/**
|
||||
* Bounding boxes for object detection and classification,
|
||||
* as described by AVDetectionBBoxHeader.
|
||||
*/
|
||||
AV_FRAME_DATA_DETECTION_BBOXES,
|
||||
|
||||
/**
|
||||
* Dolby Vision RPU raw data, suitable for passing to x265
|
||||
* or other libraries. Array of uint8_t, with NAL emulation
|
||||
* bytes intact.
|
||||
*/
|
||||
AV_FRAME_DATA_DOVI_RPU_BUFFER,
|
||||
|
||||
/**
|
||||
* Parsed Dolby Vision metadata, suitable for passing to a software
|
||||
* implementation. The payload is the AVDOVIMetadata struct defined in
|
||||
* libavutil/dovi_meta.h.
|
||||
*/
|
||||
AV_FRAME_DATA_DOVI_METADATA,
|
||||
|
||||
/**
|
||||
* HDR Vivid dynamic metadata associated with a video frame. The payload is
|
||||
* an AVDynamicHDRVivid type and contains information for color
|
||||
* volume transform - CUVA 005.1-2021.
|
||||
*/
|
||||
AV_FRAME_DATA_DYNAMIC_HDR_VIVID,
|
||||
|
||||
/**
|
||||
* Ambient viewing environment metadata, as defined by H.274.
|
||||
*/
|
||||
AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT,
|
||||
};
|
||||
|
||||
enum AVActiveFormatDescription {
|
||||
|
@ -220,11 +236,7 @@ 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;
|
||||
|
@ -319,21 +331,32 @@ typedef struct AVFrame {
|
|||
#define AV_NUM_DATA_POINTERS 8
|
||||
/**
|
||||
* pointer to the picture/channel planes.
|
||||
* This might be different from the first allocated byte
|
||||
* This might be different from the first allocated byte. For video,
|
||||
* it could even point to the end of the image data.
|
||||
*
|
||||
* All pointers in data and extended_data must point into one of the
|
||||
* AVBufferRef in buf or extended_buf.
|
||||
*
|
||||
* Some decoders access areas outside 0,0 - width,height, please
|
||||
* see avcodec_align_dimensions2(). Some filters and swscale can read
|
||||
* up to 16 bytes beyond the planes, if these filters are to be used,
|
||||
* then 16 extra bytes must be allocated.
|
||||
*
|
||||
* NOTE: Except for hwaccel formats, pointers not needed by the format
|
||||
* MUST be set to NULL.
|
||||
* NOTE: Pointers not needed by the format MUST be set to NULL.
|
||||
*
|
||||
* @attention In case of video, the data[] pointers can point to the
|
||||
* end of image data in order to reverse line order, when used in
|
||||
* combination with negative values in the linesize[] array.
|
||||
*/
|
||||
uint8_t *data[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* For video, size in bytes of each picture line.
|
||||
* For audio, size in bytes of each plane.
|
||||
* For video, a positive or negative value, which is typically indicating
|
||||
* the size in bytes of each picture line, but it can also be:
|
||||
* - the negative byte size of lines for vertical flipping
|
||||
* (with data[n] pointing to the end of the data
|
||||
* - a positive or negative multiple of the byte size as for accessing
|
||||
* even and odd fields of a frame (possibly flipped)
|
||||
*
|
||||
* For audio, only linesize[0] may be set. For planar audio, each channel
|
||||
* plane must be the same size.
|
||||
|
@ -345,6 +368,9 @@ typedef struct AVFrame {
|
|||
*
|
||||
* @note The linesize may be larger than the size of usable data -- there
|
||||
* may be extra padding present for performance reasons.
|
||||
*
|
||||
* @attention In case of video, line size values can be negative to achieve
|
||||
* a vertically inverted iteration over image lines.
|
||||
*/
|
||||
int linesize[AV_NUM_DATA_POINTERS];
|
||||
|
||||
|
@ -410,15 +436,6 @@ typedef struct AVFrame {
|
|||
*/
|
||||
int64_t pts;
|
||||
|
||||
#if FF_API_PKT_PTS
|
||||
/**
|
||||
* PTS copied from the AVPacket that was decoded to produce this frame.
|
||||
* @deprecated use the pts field instead
|
||||
*/
|
||||
attribute_deprecated
|
||||
int64_t pkt_pts;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used)
|
||||
* This is also the Presentation time of this AVFrame calculated from
|
||||
|
@ -426,14 +443,26 @@ typedef struct AVFrame {
|
|||
*/
|
||||
int64_t pkt_dts;
|
||||
|
||||
/**
|
||||
* Time base for the timestamps in this frame.
|
||||
* In the future, this field may be set on frames output by decoders or
|
||||
* filters, but its value will be by default ignored on input to encoders
|
||||
* or filters.
|
||||
*/
|
||||
AVRational time_base;
|
||||
|
||||
#if FF_API_FRAME_PICTURE_NUMBER
|
||||
/**
|
||||
* picture number in bitstream order
|
||||
*/
|
||||
attribute_deprecated
|
||||
int coded_picture_number;
|
||||
/**
|
||||
* picture number in display order
|
||||
*/
|
||||
attribute_deprecated
|
||||
int display_picture_number;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* quality (between 1 (good) and FF_LAMBDA_MAX (bad))
|
||||
|
@ -445,14 +474,6 @@ typedef struct AVFrame {
|
|||
*/
|
||||
void *opaque;
|
||||
|
||||
#if FF_API_ERROR_FRAME
|
||||
/**
|
||||
* @deprecated unused
|
||||
*/
|
||||
attribute_deprecated
|
||||
uint64_t error[AV_NUM_DATA_POINTERS];
|
||||
#endif
|
||||
|
||||
/**
|
||||
* When decoding, this signals how much the picture must be delayed.
|
||||
* extra_delay = repeat_pict / (2*fps)
|
||||
|
@ -474,6 +495,7 @@ typedef struct AVFrame {
|
|||
*/
|
||||
int palette_has_changed;
|
||||
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
/**
|
||||
* reordered opaque 64 bits (generally an integer or a double precision float
|
||||
* PTS but can be anything).
|
||||
|
@ -481,24 +503,32 @@ typedef struct AVFrame {
|
|||
* that time,
|
||||
* the decoder reorders values as needed and sets AVFrame.reordered_opaque
|
||||
* to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
|
||||
*
|
||||
* @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead
|
||||
*/
|
||||
attribute_deprecated
|
||||
int64_t reordered_opaque;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Sample rate of the audio data.
|
||||
*/
|
||||
int sample_rate;
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* Channel layout of the audio data.
|
||||
* @deprecated use ch_layout instead
|
||||
*/
|
||||
attribute_deprecated
|
||||
uint64_t channel_layout;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* AVBuffer references backing the data for this frame. If all elements of
|
||||
* this array are NULL, then this frame is not reference counted. This array
|
||||
* must be filled contiguously -- if buf[i] is non-NULL then buf[j] must
|
||||
* also be non-NULL for all j < i.
|
||||
* AVBuffer references backing the data for this frame. All the pointers in
|
||||
* data and extended_data must point inside one of the buffers in buf or
|
||||
* extended_buf. This array must be filled contiguously -- if buf[i] is
|
||||
* non-NULL then buf[j] must also be non-NULL for all j < i.
|
||||
*
|
||||
* There may be at most one AVBuffer per data plane, so for video this array
|
||||
* always contains all the references. For planar audio with more than
|
||||
|
@ -588,13 +618,18 @@ typedef struct AVFrame {
|
|||
*/
|
||||
int64_t pkt_pos;
|
||||
|
||||
#if FF_API_PKT_DURATION
|
||||
/**
|
||||
* duration of the corresponding packet, expressed in
|
||||
* AVStream->time_base units, 0 if unknown.
|
||||
* - encoding: unused
|
||||
* - decoding: Read by user.
|
||||
*
|
||||
* @deprecated use duration instead
|
||||
*/
|
||||
attribute_deprecated
|
||||
int64_t pkt_duration;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* metadata.
|
||||
|
@ -616,12 +651,16 @@ typedef struct AVFrame {
|
|||
#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4
|
||||
#define FF_DECODE_ERROR_DECODE_SLICES 8
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* number of audio channels, only used for audio.
|
||||
* - encoding: unused
|
||||
* - decoding: Read by user.
|
||||
* @deprecated use ch_layout instead
|
||||
*/
|
||||
attribute_deprecated
|
||||
int channels;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* size of the corresponding packet containing the compressed
|
||||
|
@ -632,24 +671,6 @@ typedef struct AVFrame {
|
|||
*/
|
||||
int pkt_size;
|
||||
|
||||
#if FF_API_FRAME_QP
|
||||
/**
|
||||
* QP table
|
||||
*/
|
||||
attribute_deprecated
|
||||
int8_t *qscale_table;
|
||||
/**
|
||||
* QP store stride
|
||||
*/
|
||||
attribute_deprecated
|
||||
int qstride;
|
||||
|
||||
attribute_deprecated
|
||||
int qscale_type;
|
||||
|
||||
attribute_deprecated
|
||||
AVBufferRef *qp_table_buf;
|
||||
#endif
|
||||
/**
|
||||
* For hwaccel-format frames, this should be a reference to the
|
||||
* AVHWFramesContext describing the frame.
|
||||
|
@ -695,70 +716,18 @@ typedef struct AVFrame {
|
|||
* for the target frame's private_ref field.
|
||||
*/
|
||||
AVBufferRef *private_ref;
|
||||
|
||||
/**
|
||||
* Channel layout of the audio data.
|
||||
*/
|
||||
AVChannelLayout ch_layout;
|
||||
|
||||
/**
|
||||
* Duration of the frame, in the same units as pts. 0 if unknown.
|
||||
*/
|
||||
int64_t duration;
|
||||
} AVFrame;
|
||||
|
||||
#if FF_API_FRAME_GET_SET
|
||||
/**
|
||||
* Accessors for some AVFrame fields. These used to be provided for ABI
|
||||
* compatibility, and do not need to be used anymore.
|
||||
*/
|
||||
attribute_deprecated
|
||||
int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val);
|
||||
attribute_deprecated
|
||||
int64_t av_frame_get_pkt_duration (const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_pkt_duration (AVFrame *frame, int64_t val);
|
||||
attribute_deprecated
|
||||
int64_t av_frame_get_pkt_pos (const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_pkt_pos (AVFrame *frame, int64_t val);
|
||||
attribute_deprecated
|
||||
int64_t av_frame_get_channel_layout (const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_channel_layout (AVFrame *frame, int64_t val);
|
||||
attribute_deprecated
|
||||
int av_frame_get_channels (const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_channels (AVFrame *frame, int val);
|
||||
attribute_deprecated
|
||||
int av_frame_get_sample_rate (const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_sample_rate (AVFrame *frame, int val);
|
||||
attribute_deprecated
|
||||
AVDictionary *av_frame_get_metadata (const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_metadata (AVFrame *frame, AVDictionary *val);
|
||||
attribute_deprecated
|
||||
int av_frame_get_decode_error_flags (const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_decode_error_flags (AVFrame *frame, int val);
|
||||
attribute_deprecated
|
||||
int av_frame_get_pkt_size(const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_pkt_size(AVFrame *frame, int val);
|
||||
#if FF_API_FRAME_QP
|
||||
attribute_deprecated
|
||||
int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type);
|
||||
attribute_deprecated
|
||||
int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type);
|
||||
#endif
|
||||
attribute_deprecated
|
||||
enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val);
|
||||
attribute_deprecated
|
||||
enum AVColorRange av_frame_get_color_range(const AVFrame *frame);
|
||||
attribute_deprecated
|
||||
void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Get the name of a colorspace.
|
||||
* @return a static string identifying the colorspace; can be NULL.
|
||||
*/
|
||||
const char *av_get_colorspace_name(enum AVColorSpace val);
|
||||
|
||||
/**
|
||||
* Allocate an AVFrame and set its fields to default values. The resulting
|
||||
|
@ -827,7 +796,7 @@ void av_frame_move_ref(AVFrame *dst, AVFrame *src);
|
|||
* The following fields must be set on frame before calling this function:
|
||||
* - format (pixel format for video, sample format for audio)
|
||||
* - width and height for video
|
||||
* - nb_samples and channel_layout for audio
|
||||
* - nb_samples and ch_layout for audio
|
||||
*
|
||||
* This function will fill AVFrame.data and AVFrame.buf arrays and, if
|
||||
* necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
|
||||
|
@ -864,7 +833,8 @@ int av_frame_is_writable(AVFrame *frame);
|
|||
* Ensure that the frame data is writable, avoiding data copy if possible.
|
||||
*
|
||||
* Do nothing if the frame is writable, allocate new buffers and copy the data
|
||||
* if it is not.
|
||||
* if it is not. Non-refcounted frames behave as non-writable, i.e. a copy
|
||||
* is always made.
|
||||
*
|
||||
* @return 0 on success, a negative AVERROR on error.
|
||||
*
|
||||
|
@ -899,6 +869,7 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src);
|
|||
/**
|
||||
* Get the buffer reference a given data plane is stored in.
|
||||
*
|
||||
* @param frame the frame to get the plane's buffer from
|
||||
* @param plane index of the data plane of interest in frame->extended_data.
|
||||
*
|
||||
* @return the buffer reference that contains the plane or NULL if the input
|
||||
|
@ -917,11 +888,7 @@ 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
|
||||
|
|
|
@ -30,8 +30,6 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_hash Hash Functions
|
||||
* @ingroup lavu_crypto
|
||||
|
@ -182,11 +180,7 @@ void av_hash_init(struct AVHashContext *ctx);
|
|||
* @param[in] src Data to be added to the hash context
|
||||
* @param[in] len Size of the additional data
|
||||
*/
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len);
|
||||
#else
|
||||
void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Finalize a hash context and compute the actual hash value.
|
||||
|
|
|
@ -0,0 +1,285 @@
|
|||
/*
|
||||
* Copyright (c) 2021 Limin Wang <lance.lmwang at gmail.com>
|
||||
*
|
||||
* 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_HDR_DYNAMIC_VIVID_METADATA_H
|
||||
#define AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H
|
||||
|
||||
#include "frame.h"
|
||||
#include "rational.h"
|
||||
|
||||
/**
|
||||
* Color tone mapping parameters at a processing window in a dynamic metadata for
|
||||
* CUVA 005.1:2021.
|
||||
*/
|
||||
typedef struct AVHDRVividColorToneMappingParams {
|
||||
/**
|
||||
* The nominal maximum display luminance of the targeted system display,
|
||||
* in multiples of 1.0/4095 candelas per square metre. The value shall be in
|
||||
* the range of 0.0 to 1.0, inclusive.
|
||||
*/
|
||||
AVRational targeted_system_display_maximum_luminance;
|
||||
|
||||
/**
|
||||
* This flag indicates that transfer the base paramter(for value of 1)
|
||||
*/
|
||||
int base_enable_flag;
|
||||
|
||||
/**
|
||||
* base_param_m_p in the base parameter,
|
||||
* in multiples of 1.0/16383. The value shall be in
|
||||
* the range of 0.0 to 1.0, inclusive.
|
||||
*/
|
||||
AVRational base_param_m_p;
|
||||
|
||||
/**
|
||||
* base_param_m_m in the base parameter,
|
||||
* in multiples of 1.0/10. The value shall be in
|
||||
* the range of 0.0 to 6.3, inclusive.
|
||||
*/
|
||||
AVRational base_param_m_m;
|
||||
|
||||
/**
|
||||
* base_param_m_a in the base parameter,
|
||||
* in multiples of 1.0/1023. The value shall be in
|
||||
* the range of 0.0 to 1.0 inclusive.
|
||||
*/
|
||||
AVRational base_param_m_a;
|
||||
|
||||
/**
|
||||
* base_param_m_b in the base parameter,
|
||||
* in multiples of 1/1023. The value shall be in
|
||||
* the range of 0.0 to 1.0, inclusive.
|
||||
*/
|
||||
AVRational base_param_m_b;
|
||||
|
||||
/**
|
||||
* base_param_m_n in the base parameter,
|
||||
* in multiples of 1.0/10. The value shall be in
|
||||
* the range of 0.0 to 6.3, inclusive.
|
||||
*/
|
||||
AVRational base_param_m_n;
|
||||
|
||||
/**
|
||||
* indicates k1_0 in the base parameter,
|
||||
* base_param_k1 <= 1: k1_0 = base_param_k1
|
||||
* base_param_k1 > 1: reserved
|
||||
*/
|
||||
int base_param_k1;
|
||||
|
||||
/**
|
||||
* indicates k2_0 in the base parameter,
|
||||
* base_param_k2 <= 1: k2_0 = base_param_k2
|
||||
* base_param_k2 > 1: reserved
|
||||
*/
|
||||
int base_param_k2;
|
||||
|
||||
/**
|
||||
* indicates k3_0 in the base parameter,
|
||||
* base_param_k3 == 1: k3_0 = base_param_k3
|
||||
* base_param_k3 == 2: k3_0 = maximum_maxrgb
|
||||
* base_param_k3 > 2: reserved
|
||||
*/
|
||||
int base_param_k3;
|
||||
|
||||
/**
|
||||
* This flag indicates that delta mode of base paramter(for value of 1)
|
||||
*/
|
||||
int base_param_Delta_enable_mode;
|
||||
|
||||
/**
|
||||
* base_param_Delta in the base parameter,
|
||||
* in multiples of 1.0/127. The value shall be in
|
||||
* the range of 0.0 to 1.0, inclusive.
|
||||
*/
|
||||
AVRational base_param_Delta;
|
||||
|
||||
/**
|
||||
* indicates 3Spline_enable_flag in the base parameter,
|
||||
* This flag indicates that transfer three Spline of base paramter(for value of 1)
|
||||
*/
|
||||
int three_Spline_enable_flag;
|
||||
|
||||
/**
|
||||
* The number of three Spline. The value shall be in the range
|
||||
* of 1 to 2, inclusive.
|
||||
*/
|
||||
int three_Spline_num;
|
||||
|
||||
/**
|
||||
* The mode of three Spline. the value shall be in the range
|
||||
* of 0 to 3, inclusive.
|
||||
*/
|
||||
int three_Spline_TH_mode;
|
||||
|
||||
/**
|
||||
* three_Spline_TH_enable_MB is in the range of 0.0 to 1.0, inclusive
|
||||
* and in multiples of 1.0/255.
|
||||
*
|
||||
*/
|
||||
AVRational three_Spline_TH_enable_MB;
|
||||
|
||||
/**
|
||||
* 3Spline_TH_enable of three Spline.
|
||||
* The value shall be in the range of 0.0 to 1.0, inclusive.
|
||||
* and in multiples of 1.0/4095.
|
||||
*/
|
||||
AVRational three_Spline_TH_enable;
|
||||
|
||||
/**
|
||||
* 3Spline_TH_Delta1 of three Spline.
|
||||
* The value shall be in the range of 0.0 to 0.25, inclusive,
|
||||
* and in multiples of 0.25/1023.
|
||||
*/
|
||||
AVRational three_Spline_TH_Delta1;
|
||||
|
||||
/**
|
||||
* 3Spline_TH_Delta2 of three Spline.
|
||||
* The value shall be in the range of 0.0 to 0.25, inclusive,
|
||||
* and in multiples of 0.25/1023.
|
||||
*/
|
||||
AVRational three_Spline_TH_Delta2;
|
||||
|
||||
/**
|
||||
* 3Spline_enable_Strength of three Spline.
|
||||
* The value shall be in the range of 0.0 to 1.0, inclusive,
|
||||
* and in multiples of 1.0/255.
|
||||
*/
|
||||
AVRational three_Spline_enable_Strength;
|
||||
} AVHDRVividColorToneMappingParams;
|
||||
|
||||
|
||||
/**
|
||||
* Color transform parameters at a processing window in a dynamic metadata for
|
||||
* CUVA 005.1:2021.
|
||||
*/
|
||||
typedef struct AVHDRVividColorTransformParams {
|
||||
/**
|
||||
* Indicates the minimum brightness of the displayed content.
|
||||
* The values should be in the range of 0.0 to 1.0,
|
||||
* inclusive and in multiples of 1/4095.
|
||||
*/
|
||||
AVRational minimum_maxrgb;
|
||||
|
||||
/**
|
||||
* Indicates the average brightness of the displayed content.
|
||||
* The values should be in the range of 0.0 to 1.0,
|
||||
* inclusive and in multiples of 1/4095.
|
||||
*/
|
||||
AVRational average_maxrgb;
|
||||
|
||||
/**
|
||||
* Indicates the variance brightness of the displayed content.
|
||||
* The values should be in the range of 0.0 to 1.0,
|
||||
* inclusive and in multiples of 1/4095.
|
||||
*/
|
||||
AVRational variance_maxrgb;
|
||||
|
||||
/**
|
||||
* Indicates the maximum brightness of the displayed content.
|
||||
* The values should be in the range of 0.0 to 1.0, inclusive
|
||||
* and in multiples of 1/4095.
|
||||
*/
|
||||
AVRational maximum_maxrgb;
|
||||
|
||||
/**
|
||||
* This flag indicates that the metadata for the tone mapping function in
|
||||
* the processing window is present (for value of 1).
|
||||
*/
|
||||
int tone_mapping_mode_flag;
|
||||
|
||||
/**
|
||||
* The number of tone mapping param. The value shall be in the range
|
||||
* of 1 to 2, inclusive.
|
||||
*/
|
||||
int tone_mapping_param_num;
|
||||
|
||||
/**
|
||||
* The color tone mapping parameters.
|
||||
*/
|
||||
AVHDRVividColorToneMappingParams tm_params[2];
|
||||
|
||||
/**
|
||||
* This flag indicates that the metadata for the color saturation mapping in
|
||||
* the processing window is present (for value of 1).
|
||||
*/
|
||||
int color_saturation_mapping_flag;
|
||||
|
||||
/**
|
||||
* The number of color saturation param. The value shall be in the range
|
||||
* of 0 to 7, inclusive.
|
||||
*/
|
||||
int color_saturation_num;
|
||||
|
||||
/**
|
||||
* Indicates the color correction strength parameter.
|
||||
* The values should be in the range of 0.0 to 2.0, inclusive
|
||||
* and in multiples of 1/128.
|
||||
*/
|
||||
AVRational color_saturation_gain[8];
|
||||
} AVHDRVividColorTransformParams;
|
||||
|
||||
/**
|
||||
* This struct represents dynamic metadata for color volume transform -
|
||||
* CUVA 005.1:2021 standard
|
||||
*
|
||||
* To be used as payload of a AVFrameSideData or AVPacketSideData with the
|
||||
* appropriate type.
|
||||
*
|
||||
* @note The struct should be allocated with
|
||||
* av_dynamic_hdr_vivid_alloc() and its size is not a part of
|
||||
* the public ABI.
|
||||
*/
|
||||
typedef struct AVDynamicHDRVivid {
|
||||
/**
|
||||
* The system start code. The value shall be set to 0x01.
|
||||
*/
|
||||
uint8_t system_start_code;
|
||||
|
||||
/**
|
||||
* The number of processing windows. The value shall be set to 0x01
|
||||
* if the system_start_code is 0x01.
|
||||
*/
|
||||
uint8_t num_windows;
|
||||
|
||||
/**
|
||||
* The color transform parameters for every processing window.
|
||||
*/
|
||||
AVHDRVividColorTransformParams params[3];
|
||||
} AVDynamicHDRVivid;
|
||||
|
||||
/**
|
||||
* Allocate an AVDynamicHDRVivid structure and set its fields to
|
||||
* default values. The resulting struct can be freed using av_freep().
|
||||
*
|
||||
* @return An AVDynamicHDRVivid filled with default values or NULL
|
||||
* on failure.
|
||||
*/
|
||||
AVDynamicHDRVivid *av_dynamic_hdr_vivid_alloc(size_t *size);
|
||||
|
||||
/**
|
||||
* Allocate a complete AVDynamicHDRVivid and add it to the frame.
|
||||
* @param frame The frame which side data is added to.
|
||||
*
|
||||
* @return The AVDynamicHDRVivid structure to be filled by caller or NULL
|
||||
* on failure.
|
||||
*/
|
||||
AVDynamicHDRVivid *av_dynamic_hdr_vivid_create_side_data(AVFrame *frame);
|
||||
|
||||
#endif /* AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H */
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
/**
|
||||
* @defgroup lavu_hmac HMAC
|
||||
* @ingroup lavu_crypto
|
||||
|
|
|
@ -249,7 +249,7 @@ const char *av_hwdevice_get_type_name(enum AVHWDeviceType type);
|
|||
/**
|
||||
* Iterate over supported device types.
|
||||
*
|
||||
* @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type
|
||||
* @param prev AV_HWDEVICE_TYPE_NONE initially, then the previous type
|
||||
* returned by this function in subsequent iterations.
|
||||
* @return The next usable device type from enum AVHWDeviceType, or
|
||||
* AV_HWDEVICE_TYPE_NONE if there are no more.
|
||||
|
@ -571,6 +571,10 @@ enum {
|
|||
* possible with the given arguments and hwframe setup, while other return
|
||||
* values indicate that it failed somehow.
|
||||
*
|
||||
* On failure, the destination frame will be left blank, except for the
|
||||
* hw_frames_ctx/format fields thay may have been set by the caller - those will
|
||||
* be preserved as they were.
|
||||
*
|
||||
* @param dst Destination frame, to contain the mapping.
|
||||
* @param src Source frame, to be mapped.
|
||||
* @param flags Some combination of AV_HWFRAME_MAP_* flags.
|
||||
|
@ -587,6 +591,7 @@ int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags);
|
|||
*
|
||||
* @param derived_frame_ctx On success, a reference to the newly created
|
||||
* AVHWFramesContext.
|
||||
* @param format The AVPixelFormat for the derived context.
|
||||
* @param derived_device_ctx A reference to the device to create the new
|
||||
* AVHWFramesContext on.
|
||||
* @param source_frame_ctx A reference to an existing AVHWFramesContext
|
||||
|
|
|
@ -164,6 +164,15 @@ typedef struct AVD3D11VAFramesContext {
|
|||
* This field is ignored/invalid if a user-allocated texture is provided.
|
||||
*/
|
||||
UINT MiscFlags;
|
||||
|
||||
/**
|
||||
* In case if texture structure member above is not NULL contains the same texture
|
||||
* pointer for all elements and different indexes into the array texture.
|
||||
* In case if texture structure member above is NULL, all elements contains
|
||||
* pointers to separate non-array textures and 0 indexes.
|
||||
* This field is ignored/invalid if a user-allocated texture is provided.
|
||||
*/
|
||||
AVD3D11FrameDescriptor *texture_infos;
|
||||
} AVD3D11VAFramesContext;
|
||||
|
||||
#endif /* AVUTIL_HWCONTEXT_D3D11VA_H */
|
||||
|
|
|
@ -31,6 +31,31 @@ typedef struct AVMediaCodecDeviceContext {
|
|||
* This is the default surface used by decoders on this device.
|
||||
*/
|
||||
void *surface;
|
||||
|
||||
/**
|
||||
* Pointer to ANativeWindow.
|
||||
*
|
||||
* It both surface and native_window is NULL, try to create it
|
||||
* automatically if create_window is true and OS support
|
||||
* createPersistentInputSurface.
|
||||
*
|
||||
* It can be used as output surface for decoder and input surface for
|
||||
* encoder.
|
||||
*/
|
||||
void *native_window;
|
||||
|
||||
/**
|
||||
* Enable createPersistentInputSurface automatically.
|
||||
*
|
||||
* Disabled by default.
|
||||
*
|
||||
* It can be enabled by setting this flag directly, or by setting
|
||||
* AVDictionary of av_hwdevice_ctx_create(), with "create_window" as key.
|
||||
* The second method is useful for ffmpeg cmdline, e.g., we can enable it
|
||||
* via:
|
||||
* -init_hw_device mediacodec=mediacodec,create_window=1
|
||||
*/
|
||||
int create_window;
|
||||
} AVMediaCodecDeviceContext;
|
||||
|
||||
#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#ifndef AVUTIL_HWCONTEXT_QSV_H
|
||||
#define AVUTIL_HWCONTEXT_QSV_H
|
||||
|
||||
#include <mfx/mfxvideo.h>
|
||||
#include <mfxvideo.h>
|
||||
|
||||
/**
|
||||
* @file
|
||||
|
@ -34,6 +34,17 @@
|
|||
*/
|
||||
typedef struct AVQSVDeviceContext {
|
||||
mfxSession session;
|
||||
/**
|
||||
* The mfxLoader handle used for mfxSession creation
|
||||
*
|
||||
* This field is only available for oneVPL user. For non-oneVPL user, this
|
||||
* field must be set to NULL.
|
||||
*
|
||||
* Filled by the user before calling av_hwdevice_ctx_init() and should be
|
||||
* cast to mfxLoader handle. Deallocating the AVHWDeviceContext will always
|
||||
* release this interface.
|
||||
*/
|
||||
void *loader;
|
||||
} AVQSVDeviceContext;
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,17 +23,21 @@
|
|||
|
||||
#include <VideoToolbox/VideoToolbox.h>
|
||||
|
||||
#include "frame.h"
|
||||
#include "pixfmt.h"
|
||||
|
||||
/**
|
||||
* @file
|
||||
* An API-specific header for AV_HWDEVICE_TYPE_VIDEOTOOLBOX.
|
||||
*
|
||||
* This API currently does not support frame allocation, as the raw VideoToolbox
|
||||
* API does allocation, and FFmpeg itself never has the need to allocate frames.
|
||||
* This API supports frame allocation using a native CVPixelBufferPool
|
||||
* instead of an AVBufferPool.
|
||||
*
|
||||
* If the API user sets a custom pool, AVHWFramesContext.pool must return
|
||||
* AVBufferRefs whose data pointer is a CVImageBufferRef or CVPixelBufferRef.
|
||||
* Note that the underlying CVPixelBuffer could be retained by OS frameworks
|
||||
* depending on application usage, so it is preferable to let CoreVideo manage
|
||||
* the pool using the default implementation.
|
||||
*
|
||||
* Currently AVHWDeviceContext.hwctx and AVHWFramesContext.hwctx are always
|
||||
* NULL.
|
||||
|
@ -57,4 +61,36 @@ uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt);
|
|||
*/
|
||||
uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range);
|
||||
|
||||
/**
|
||||
* Convert an AVChromaLocation to a VideoToolbox/CoreVideo chroma location string.
|
||||
* Returns 0 if no known equivalent was found.
|
||||
*/
|
||||
CFStringRef av_map_videotoolbox_chroma_loc_from_av(enum AVChromaLocation loc);
|
||||
|
||||
/**
|
||||
* Convert an AVColorSpace to a VideoToolbox/CoreVideo color matrix string.
|
||||
* Returns 0 if no known equivalent was found.
|
||||
*/
|
||||
CFStringRef av_map_videotoolbox_color_matrix_from_av(enum AVColorSpace space);
|
||||
|
||||
/**
|
||||
* Convert an AVColorPrimaries to a VideoToolbox/CoreVideo color primaries string.
|
||||
* Returns 0 if no known equivalent was found.
|
||||
*/
|
||||
CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries pri);
|
||||
|
||||
/**
|
||||
* Convert an AVColorTransferCharacteristic to a VideoToolbox/CoreVideo color transfer
|
||||
* function string.
|
||||
* Returns 0 if no known equivalent was found.
|
||||
*/
|
||||
CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteristic trc);
|
||||
|
||||
/**
|
||||
* Update a CVPixelBufferRef's metadata to based on an AVFrame.
|
||||
* Returns 0 if no known equivalent was found.
|
||||
*/
|
||||
int av_vt_pixbuf_set_attachments(void *log_ctx,
|
||||
CVPixelBufferRef pixbuf, const struct AVFrame *src);
|
||||
|
||||
#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
#ifndef AVUTIL_HWCONTEXT_VULKAN_H
|
||||
#define AVUTIL_HWCONTEXT_VULKAN_H
|
||||
|
||||
#if defined(_WIN32) && !defined(VK_USE_PLATFORM_WIN32_KHR)
|
||||
#define VK_USE_PLATFORM_WIN32_KHR
|
||||
#endif
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include "pixfmt.h"
|
||||
|
@ -41,43 +44,37 @@ typedef struct AVVulkanDeviceContext {
|
|||
* Custom memory allocator, else NULL
|
||||
*/
|
||||
const VkAllocationCallbacks *alloc;
|
||||
|
||||
/**
|
||||
* Vulkan instance. Must be at least version 1.1.
|
||||
* Pointer to the instance-provided vkGetInstanceProcAddr loading function.
|
||||
* If NULL, will pick either libvulkan or libvolk, depending on libavutil's
|
||||
* compilation settings, and set this field.
|
||||
*/
|
||||
PFN_vkGetInstanceProcAddr get_proc_addr;
|
||||
|
||||
/**
|
||||
* Vulkan instance. Must be at least version 1.2.
|
||||
*/
|
||||
VkInstance inst;
|
||||
|
||||
/**
|
||||
* Physical device
|
||||
*/
|
||||
VkPhysicalDevice phys_dev;
|
||||
|
||||
/**
|
||||
* Active device
|
||||
*/
|
||||
VkDevice act_dev;
|
||||
|
||||
/**
|
||||
* Queue family index for graphics
|
||||
* @note av_hwdevice_create() will set all 3 queue indices if unset
|
||||
* If there is no dedicated queue for compute or transfer operations,
|
||||
* they will be set to the graphics queue index which can handle both.
|
||||
* nb_graphics_queues indicates how many queues were enabled for the
|
||||
* graphics queue (must be at least 1)
|
||||
* This structure should be set to the set of features that present and enabled
|
||||
* during device creation. When a device is created by FFmpeg, it will default to
|
||||
* enabling all that are present of the shaderImageGatherExtended,
|
||||
* fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features.
|
||||
*/
|
||||
int queue_family_index;
|
||||
int nb_graphics_queues;
|
||||
/**
|
||||
* Queue family index to use for transfer operations, and the amount of queues
|
||||
* enabled. In case there is no dedicated transfer queue, nb_tx_queues
|
||||
* must be 0 and queue_family_tx_index must be the same as either the graphics
|
||||
* queue or the compute queue, if available.
|
||||
*/
|
||||
int queue_family_tx_index;
|
||||
int nb_tx_queues;
|
||||
/**
|
||||
* Queue family index for compute ops, and the amount of queues enabled.
|
||||
* In case there are no dedicated compute queues, nb_comp_queues must be
|
||||
* 0 and its queue family index must be set to the graphics queue.
|
||||
*/
|
||||
int queue_family_comp_index;
|
||||
int nb_comp_queues;
|
||||
VkPhysicalDeviceFeatures2 device_features;
|
||||
|
||||
/**
|
||||
* Enabled instance extensions.
|
||||
* If supplying your own device context, set this to an array of strings, with
|
||||
|
@ -87,6 +84,7 @@ typedef struct AVVulkanDeviceContext {
|
|||
*/
|
||||
const char * const *enabled_inst_extensions;
|
||||
int nb_enabled_inst_extensions;
|
||||
|
||||
/**
|
||||
* Enabled device extensions. By default, VK_KHR_external_memory_fd,
|
||||
* VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier,
|
||||
|
@ -97,32 +95,91 @@ typedef struct AVVulkanDeviceContext {
|
|||
*/
|
||||
const char * const *enabled_dev_extensions;
|
||||
int nb_enabled_dev_extensions;
|
||||
|
||||
/**
|
||||
* This structure should be set to the set of features that present and enabled
|
||||
* during device creation. When a device is created by FFmpeg, it will default to
|
||||
* enabling all that are present of the shaderImageGatherExtended,
|
||||
* fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features.
|
||||
* Queue family index for graphics operations, and the number of queues
|
||||
* enabled for it. If unavaiable, will be set to -1. Not required.
|
||||
* av_hwdevice_create() will attempt to find a dedicated queue for each
|
||||
* queue family, or pick the one with the least unrelated flags set.
|
||||
* Queue indices here may overlap if a queue has to share capabilities.
|
||||
*/
|
||||
VkPhysicalDeviceFeatures2 device_features;
|
||||
int queue_family_index;
|
||||
int nb_graphics_queues;
|
||||
|
||||
/**
|
||||
* Queue family index for transfer operations and the number of queues
|
||||
* enabled. Required.
|
||||
*/
|
||||
int queue_family_tx_index;
|
||||
int nb_tx_queues;
|
||||
|
||||
/**
|
||||
* Queue family index for compute operations and the number of queues
|
||||
* enabled. Required.
|
||||
*/
|
||||
int queue_family_comp_index;
|
||||
int nb_comp_queues;
|
||||
|
||||
/**
|
||||
* Queue family index for video encode ops, and the amount of queues enabled.
|
||||
* If the device doesn't support such, queue_family_encode_index will be -1.
|
||||
* Not required.
|
||||
*/
|
||||
int queue_family_encode_index;
|
||||
int nb_encode_queues;
|
||||
|
||||
/**
|
||||
* Queue family index for video decode ops, and the amount of queues enabled.
|
||||
* If the device doesn't support such, queue_family_decode_index will be -1.
|
||||
* Not required.
|
||||
*/
|
||||
int queue_family_decode_index;
|
||||
int nb_decode_queues;
|
||||
} AVVulkanDeviceContext;
|
||||
|
||||
/**
|
||||
* Defines the behaviour of frame allocation.
|
||||
*/
|
||||
typedef enum AVVkFrameFlags {
|
||||
/* Unless this flag is set, autodetected flags will be OR'd based on the
|
||||
* device and tiling during av_hwframe_ctx_init(). */
|
||||
AV_VK_FRAME_FLAG_NONE = (1ULL << 0),
|
||||
|
||||
/* Image planes will be allocated in a single VkDeviceMemory, rather
|
||||
* than as per-plane VkDeviceMemory allocations. Required for exporting
|
||||
* to VAAPI on Intel devices. */
|
||||
AV_VK_FRAME_FLAG_CONTIGUOUS_MEMORY = (1ULL << 1),
|
||||
} AVVkFrameFlags;
|
||||
|
||||
/**
|
||||
* Allocated as AVHWFramesContext.hwctx, used to set pool-specific options
|
||||
*/
|
||||
typedef struct AVVulkanFramesContext {
|
||||
/**
|
||||
* Controls the tiling of allocated frames.
|
||||
* Controls the tiling of allocated frames. If left as optimal tiling,
|
||||
* then during av_hwframe_ctx_init() will decide based on whether the device
|
||||
* supports DRM modifiers, or if the linear_images flag is set, otherwise
|
||||
* will allocate optimally-tiled images.
|
||||
*/
|
||||
VkImageTiling tiling;
|
||||
|
||||
/**
|
||||
* Defines extra usage of output frames. If left as 0, the following bits
|
||||
* are set: TRANSFER_SRC, TRANSFER_DST. SAMPLED and STORAGE.
|
||||
*/
|
||||
VkImageUsageFlagBits usage;
|
||||
|
||||
/**
|
||||
* Extension data for image creation.
|
||||
* If VkImageDrmFormatModifierListCreateInfoEXT is present in the chain,
|
||||
* and the device supports DRM modifiers, then images will be allocated
|
||||
* with the specific requested DRM modifiers.
|
||||
* Additional structures may be added at av_hwframe_ctx_init() time,
|
||||
* which will be freed automatically on uninit(), so users need only free
|
||||
* any structures they've allocated themselves.
|
||||
*/
|
||||
void *create_pnext;
|
||||
|
||||
/**
|
||||
* Extension data for memory allocation. Must have as many entries as
|
||||
* the number of planes of the sw_format.
|
||||
|
@ -131,6 +188,13 @@ typedef struct AVVulkanFramesContext {
|
|||
* extensions are present in enabled_dev_extensions.
|
||||
*/
|
||||
void *alloc_pnext[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* A combination of AVVkFrameFlags. Unless AV_VK_FRAME_FLAG_NONE is set,
|
||||
* autodetected flags will be OR'd based on the device and tiling during
|
||||
* av_hwframe_ctx_init().
|
||||
*/
|
||||
AVVkFrameFlags flags;
|
||||
} AVVulkanFramesContext;
|
||||
|
||||
/*
|
||||
|
@ -139,7 +203,7 @@ typedef struct AVVulkanFramesContext {
|
|||
* All frames, imported or allocated, will be created with the
|
||||
* VK_IMAGE_CREATE_ALIAS_BIT flag set, so the memory may be aliased if needed.
|
||||
*
|
||||
* If all three queue family indices in the device context are the same,
|
||||
* If all queue family indices in the device context are the same,
|
||||
* images will be created with the EXCLUSIVE sharing mode. Otherwise, all images
|
||||
* will be created using the CONCURRENT sharing mode.
|
||||
*
|
||||
|
@ -158,8 +222,9 @@ typedef struct AVVkFrame {
|
|||
VkImageTiling tiling;
|
||||
|
||||
/**
|
||||
* Memory backing the images. Could be less than the amount of images
|
||||
* if importing from a DRM or VAAPI frame.
|
||||
* Memory backing the images. Could be less than the amount of planes,
|
||||
* in which case the offset value will indicate the binding offset of
|
||||
* each plane in the memory.
|
||||
*/
|
||||
VkDeviceMemory mem[AV_NUM_DATA_POINTERS];
|
||||
size_t size[AV_NUM_DATA_POINTERS];
|
||||
|
@ -176,17 +241,29 @@ typedef struct AVVkFrame {
|
|||
VkImageLayout layout[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* Synchronization semaphores. Must not be freed manually. Must be waited on
|
||||
* and signalled at every queue submission.
|
||||
* Could be less than the amount of images: either one per VkDeviceMemory
|
||||
* or one for the entire frame. All others will be set to VK_NULL_HANDLE.
|
||||
* Synchronization timeline semaphores, one for each sw_format plane.
|
||||
* Must not be freed manually. Must be waited on at every submission using
|
||||
* the value in sem_value, and must be signalled at every submission,
|
||||
* using an incremented value.
|
||||
*/
|
||||
VkSemaphore sem[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* Up to date semaphore value at which each image becomes accessible.
|
||||
* Clients must wait on this value when submitting a command queue,
|
||||
* and increment it when signalling.
|
||||
*/
|
||||
uint64_t sem_value[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* Internal data.
|
||||
*/
|
||||
struct AVVkFrameInternal *internal;
|
||||
|
||||
/**
|
||||
* Describes the binding offset of each plane to the VkDeviceMemory.
|
||||
*/
|
||||
ptrdiff_t offset[AV_NUM_DATA_POINTERS];
|
||||
} AVVkFrame;
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,8 +27,10 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#include "avutil.h"
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "pixdesc.h"
|
||||
#include "pixfmt.h"
|
||||
#include "rational.h"
|
||||
|
||||
/**
|
||||
|
@ -46,6 +48,7 @@
|
|||
* component in the plane with the max pixel step.
|
||||
* @param max_pixstep_comps an array which is filled with the component
|
||||
* for each plane which has the max pixel step. May be NULL.
|
||||
* @param pixdesc the AVPixFmtDescriptor for the image, describing its format
|
||||
*/
|
||||
void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4],
|
||||
const AVPixFmtDescriptor *pixdesc);
|
||||
|
@ -63,6 +66,8 @@ int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane);
|
|||
* width width.
|
||||
*
|
||||
* @param linesizes array to be filled with the linesize for each plane
|
||||
* @param pix_fmt the AVPixelFormat of the image
|
||||
* @param width width of the image in pixels
|
||||
* @return >= 0 in case of success, a negative error code otherwise
|
||||
*/
|
||||
int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width);
|
||||
|
@ -71,6 +76,8 @@ int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int wi
|
|||
* 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 pix_fmt the AVPixelFormat of the image
|
||||
* @param height height of the image in pixels
|
||||
* @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
|
||||
|
@ -86,6 +93,8 @@ int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt,
|
|||
* height height.
|
||||
*
|
||||
* @param data pointers array to be filled with the pointer for each image plane
|
||||
* @param pix_fmt the AVPixelFormat of the image
|
||||
* @param height height of the image in pixels
|
||||
* @param ptr the pointer to a buffer which will contain the image
|
||||
* @param linesizes the array containing the linesize for each
|
||||
* plane, should be filled by av_image_fill_linesizes()
|
||||
|
@ -101,6 +110,11 @@ int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int hei
|
|||
* The allocated image buffer has to be freed by using
|
||||
* av_freep(&pointers[0]).
|
||||
*
|
||||
* @param pointers array to be filled with the pointer for each image plane
|
||||
* @param linesizes the array filled with the linesize for each plane
|
||||
* @param w width of the image in pixels
|
||||
* @param h height of the image in pixels
|
||||
* @param pix_fmt the AVPixelFormat of the image
|
||||
* @param align the value to use for buffer size alignment
|
||||
* @return the size in bytes required for the image buffer, a negative
|
||||
* error code in case of failure
|
||||
|
@ -117,18 +131,44 @@ int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
|
|||
* bytewidth must be contained by both absolute values of dst_linesize
|
||||
* and src_linesize, otherwise the function behavior is undefined.
|
||||
*
|
||||
* @param dst destination plane to copy to
|
||||
* @param dst_linesize linesize for the image plane in dst
|
||||
* @param src source plane to copy from
|
||||
* @param src_linesize linesize for the image plane in src
|
||||
* @param height height (number of lines) of the plane
|
||||
*/
|
||||
void av_image_copy_plane(uint8_t *dst, int dst_linesize,
|
||||
const uint8_t *src, int src_linesize,
|
||||
int bytewidth, int height);
|
||||
|
||||
/**
|
||||
* Copy image data located in uncacheable (e.g. GPU mapped) memory. Where
|
||||
* available, this function will use special functionality for reading from such
|
||||
* memory, which may result in greatly improved performance compared to plain
|
||||
* av_image_copy_plane().
|
||||
*
|
||||
* bytewidth must be contained by both absolute values of dst_linesize
|
||||
* and src_linesize, otherwise the function behavior is undefined.
|
||||
*
|
||||
* @note The linesize parameters have the type ptrdiff_t here, while they are
|
||||
* int for av_image_copy_plane().
|
||||
* @note On x86, the linesizes currently need to be aligned to the cacheline
|
||||
* size (i.e. 64) to get improved performance.
|
||||
*/
|
||||
void av_image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize,
|
||||
const uint8_t *src, ptrdiff_t src_linesize,
|
||||
ptrdiff_t bytewidth, int height);
|
||||
|
||||
/**
|
||||
* Copy image in src_data to dst_data.
|
||||
*
|
||||
* @param dst_data destination image data buffer to copy to
|
||||
* @param dst_linesizes linesizes for the image in dst_data
|
||||
* @param src_data source image data buffer to copy from
|
||||
* @param src_linesizes linesizes for the image in src_data
|
||||
* @param pix_fmt the AVPixelFormat of the image
|
||||
* @param width width of the image in pixels
|
||||
* @param height height of the image in pixels
|
||||
*/
|
||||
void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4],
|
||||
const uint8_t *src_data[4], const int src_linesizes[4],
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
/**
|
||||
* Context structure for the Lagged Fibonacci PRNG.
|
||||
* The exact layout, types and content of this struct may change and should
|
||||
* not be accessed directly. Only its sizeof() is guranteed to stay the same
|
||||
* not be accessed directly. Only its `sizeof()` is guaranteed to stay the same
|
||||
* to allow easy instanciation.
|
||||
*/
|
||||
typedef struct AVLFG {
|
||||
|
@ -40,7 +40,7 @@ void av_lfg_init(AVLFG *c, unsigned int seed);
|
|||
/**
|
||||
* Seed the state of the ALFG using binary data.
|
||||
*
|
||||
* Return value: 0 on success, negative value (AVERROR) on failure.
|
||||
* @return 0 on success, negative value (AVERROR) on failure.
|
||||
*/
|
||||
int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length);
|
||||
|
||||
|
@ -73,6 +73,7 @@ static inline unsigned int av_mlfg_get(AVLFG *c){
|
|||
* Get the next two numbers generated by a Box-Muller Gaussian
|
||||
* generator using the random numbers issued by lfg.
|
||||
*
|
||||
* @param lfg pointer to the contex structure
|
||||
* @param out array where the two generated numbers are placed
|
||||
*/
|
||||
void av_bmg_get(AVLFG *lfg, double out[2]);
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#define AVUTIL_LOG_H
|
||||
|
||||
#include <stdarg.h>
|
||||
#include "avutil.h"
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
|
@ -107,24 +106,6 @@ typedef struct AVClass {
|
|||
*/
|
||||
int parent_log_context_offset;
|
||||
|
||||
/**
|
||||
* Return next AVOptions-enabled child or NULL
|
||||
*/
|
||||
void* (*child_next)(void *obj, void *prev);
|
||||
|
||||
#if FF_API_CHILD_CLASS_NEXT
|
||||
/**
|
||||
* Return an AVClass corresponding to the next potential
|
||||
* AVOptions-enabled child.
|
||||
*
|
||||
* The difference between child_next and this is that
|
||||
* 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)
|
||||
* This is only set if the category is equal for all objects using this class.
|
||||
|
@ -144,6 +125,11 @@ typedef struct AVClass {
|
|||
*/
|
||||
int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags);
|
||||
|
||||
/**
|
||||
* Return next AVOptions-enabled child or NULL
|
||||
*/
|
||||
void* (*child_next)(void *obj, void *prev);
|
||||
|
||||
/**
|
||||
* Iterate over the AVClasses corresponding to potential AVOptions-enabled
|
||||
* children.
|
||||
|
|
|
@ -25,6 +25,36 @@
|
|||
#ifndef AVUTIL_MACROS_H
|
||||
#define AVUTIL_MACROS_H
|
||||
|
||||
#include "libavutil/avconfig.h"
|
||||
|
||||
#if AV_HAVE_BIGENDIAN
|
||||
# define AV_NE(be, le) (be)
|
||||
#else
|
||||
# define AV_NE(be, le) (le)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Comparator.
|
||||
* For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0
|
||||
* if x == y. This is useful for instance in a qsort comparator callback.
|
||||
* Furthermore, compilers are able to optimize this to branchless code, and
|
||||
* there is no risk of overflow with signed types.
|
||||
* As with many macros, this evaluates its argument multiple times, it thus
|
||||
* must not have a side-effect.
|
||||
*/
|
||||
#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y)))
|
||||
|
||||
#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
|
||||
#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
|
||||
#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
|
||||
|
||||
#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
|
||||
#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
|
||||
|
||||
#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
|
||||
#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
|
||||
|
||||
/**
|
||||
* @addtogroup preproc_misc Preprocessor String Macros
|
||||
*
|
||||
|
|
|
@ -111,7 +111,8 @@ enum AVRounding {
|
|||
/**
|
||||
* Compute the greatest common divisor of two integer operands.
|
||||
*
|
||||
* @param a,b Operands
|
||||
* @param a Operand
|
||||
* @param b Operand
|
||||
* @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0;
|
||||
* if a == 0 and b == 0, returns 0.
|
||||
*/
|
||||
|
@ -186,7 +187,8 @@ int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);
|
|||
* av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02)
|
||||
* @endcode
|
||||
*
|
||||
* @param a,b Operands
|
||||
* @param a Operand
|
||||
* @param b Operand
|
||||
* @param mod Divisor; must be a power of 2
|
||||
* @return
|
||||
* - a negative value if `a % mod < b % mod`
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_md5 MD5
|
||||
|
@ -64,11 +63,7 @@ void av_md5_init(struct AVMD5 *ctx);
|
|||
* @param src input data to update hash with
|
||||
* @param len input data length
|
||||
*/
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len);
|
||||
#else
|
||||
void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, size_t len);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Finish hashing and output digest value.
|
||||
|
@ -85,11 +80,7 @@ void av_md5_final(struct AVMD5 *ctx, uint8_t *dst);
|
|||
* @param src The data to hash
|
||||
* @param len The length of the data, in bytes
|
||||
*/
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len);
|
||||
#else
|
||||
void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "error.h"
|
||||
#include "avutil.h"
|
||||
#include "version.h"
|
||||
|
||||
|
@ -52,86 +51,6 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#if FF_API_DECLARE_ALIGNED
|
||||
/**
|
||||
*
|
||||
* @defgroup lavu_mem_macros Alignment Macros
|
||||
* Helper macros for declaring aligned variables.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @def DECLARE_ALIGNED(n,t,v)
|
||||
* Declare a variable that is aligned in memory.
|
||||
*
|
||||
* @code{.c}
|
||||
* DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42;
|
||||
* DECLARE_ALIGNED(32, uint8_t, aligned_array)[128];
|
||||
*
|
||||
* // The default-alignment equivalent would be
|
||||
* uint16_t aligned_int = 42;
|
||||
* uint8_t aligned_array[128];
|
||||
* @endcode
|
||||
*
|
||||
* @param n Minimum alignment in bytes
|
||||
* @param t Type of the variable (or array element)
|
||||
* @param v Name of the variable
|
||||
*/
|
||||
|
||||
/**
|
||||
* @def DECLARE_ASM_ALIGNED(n,t,v)
|
||||
* Declare an aligned variable appropriate for use in inline assembly code.
|
||||
*
|
||||
* @code{.c}
|
||||
* DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008);
|
||||
* @endcode
|
||||
*
|
||||
* @param n Minimum alignment in bytes
|
||||
* @param t Type of the variable (or array element)
|
||||
* @param v Name of the variable
|
||||
*/
|
||||
|
||||
/**
|
||||
* @def DECLARE_ASM_CONST(n,t,v)
|
||||
* Declare a static constant aligned variable appropriate for use in inline
|
||||
* assembly code.
|
||||
*
|
||||
* @code{.c}
|
||||
* DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008);
|
||||
* @endcode
|
||||
*
|
||||
* @param n Minimum alignment in bytes
|
||||
* @param t Type of the variable (or array element)
|
||||
* @param v Name of the variable
|
||||
*/
|
||||
|
||||
#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
|
||||
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
|
||||
#define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
|
||||
#define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v
|
||||
#elif defined(__DJGPP__)
|
||||
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v
|
||||
#define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v
|
||||
#define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v
|
||||
#elif defined(__GNUC__) || defined(__clang__)
|
||||
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
|
||||
#define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v
|
||||
#define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v
|
||||
#elif defined(_MSC_VER)
|
||||
#define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v
|
||||
#define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v
|
||||
#define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v
|
||||
#else
|
||||
#define DECLARE_ALIGNED(n,t,v) t v
|
||||
#define DECLARE_ASM_ALIGNED(n,t,v) t v
|
||||
#define DECLARE_ASM_CONST(n,t,v) static const t v
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup lavu_mem_attrs Function Attributes
|
||||
* Function attributes applicable to memory handling functions.
|
||||
|
@ -238,20 +157,12 @@ av_alloc_size(1, 2) void *av_malloc_array(size_t nmemb, size_t size);
|
|||
* @see av_mallocz()
|
||||
* @see av_malloc_array()
|
||||
*/
|
||||
av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size);
|
||||
|
||||
/**
|
||||
* Non-inlined equivalent of av_mallocz_array().
|
||||
*
|
||||
* Created for symmetry with the calloc() C function.
|
||||
*/
|
||||
void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib;
|
||||
void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib av_alloc_size(1, 2);
|
||||
|
||||
/**
|
||||
* Allocate, reallocate, or free a block of memory.
|
||||
*
|
||||
* If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is
|
||||
* zero, free the memory block pointed to by `ptr`. Otherwise, expand or
|
||||
* If `ptr` is `NULL` and `size` > 0, allocate a new block. Otherwise, expand or
|
||||
* shrink that block of memory according to `size`.
|
||||
*
|
||||
* @param ptr Pointer to a memory block already allocated with
|
||||
|
@ -260,10 +171,11 @@ void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib;
|
|||
* reallocated
|
||||
*
|
||||
* @return Pointer to a newly-reallocated block or `NULL` if the block
|
||||
* cannot be reallocated or the function is used to free the memory block
|
||||
* cannot be reallocated
|
||||
*
|
||||
* @warning Unlike av_malloc(), the returned pointer is not guaranteed to be
|
||||
* correctly aligned.
|
||||
* correctly aligned. The returned pointer must be freed after even
|
||||
* if size is zero.
|
||||
* @see av_fast_realloc()
|
||||
* @see av_reallocp()
|
||||
*/
|
||||
|
@ -311,8 +223,7 @@ void *av_realloc_f(void *ptr, size_t nelem, size_t elsize);
|
|||
/**
|
||||
* Allocate, reallocate, or free an array.
|
||||
*
|
||||
* If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If
|
||||
* `nmemb` is zero, free the memory block pointed to by `ptr`.
|
||||
* If `ptr` is `NULL` and `nmemb` > 0, allocate a new block.
|
||||
*
|
||||
* @param ptr Pointer to a memory block already allocated with
|
||||
* av_realloc() or `NULL`
|
||||
|
@ -320,19 +231,19 @@ void *av_realloc_f(void *ptr, size_t nelem, size_t elsize);
|
|||
* @param size Size of the single element of the array
|
||||
*
|
||||
* @return Pointer to a newly-reallocated block or NULL if the block
|
||||
* cannot be reallocated or the function is used to free the memory block
|
||||
* cannot be reallocated
|
||||
*
|
||||
* @warning Unlike av_malloc(), the allocated memory is not guaranteed to be
|
||||
* correctly aligned.
|
||||
* correctly aligned. The returned pointer must be freed after even if
|
||||
* nmemb is zero.
|
||||
* @see av_reallocp_array()
|
||||
*/
|
||||
av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size);
|
||||
|
||||
/**
|
||||
* Allocate, reallocate, or free an array through a pointer to a pointer.
|
||||
* Allocate, reallocate an array through a pointer to a pointer.
|
||||
*
|
||||
* If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is
|
||||
* zero, free the memory block pointed to by `*ptr`.
|
||||
* If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block.
|
||||
*
|
||||
* @param[in,out] ptr Pointer to a pointer to a memory block already
|
||||
* allocated with av_realloc(), or a pointer to `NULL`.
|
||||
|
@ -343,7 +254,7 @@ av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size)
|
|||
* @return Zero on success, an AVERROR error code on failure
|
||||
*
|
||||
* @warning Unlike av_malloc(), the allocated memory is not guaranteed to be
|
||||
* correctly aligned.
|
||||
* correctly aligned. *ptr must be freed after even if nmemb is zero.
|
||||
*/
|
||||
int av_reallocp_array(void *ptr, size_t nmemb, size_t size);
|
||||
|
||||
|
@ -668,20 +579,12 @@ void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size,
|
|||
/**
|
||||
* Multiply two `size_t` values checking for overflow.
|
||||
*
|
||||
* @param[in] a,b Operands of multiplication
|
||||
* @param[in] a Operand of multiplication
|
||||
* @param[in] b Operand of multiplication
|
||||
* @param[out] r Pointer to the result of the operation
|
||||
* @return 0 on success, AVERROR(EINVAL) on overflow
|
||||
*/
|
||||
static inline int av_size_mult(size_t a, size_t b, size_t *r)
|
||||
{
|
||||
size_t t = a * b;
|
||||
/* Hack inspired from glibc: don't try the division if nelem and elsize
|
||||
* are both less than sqrt(SIZE_MAX). */
|
||||
if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b)
|
||||
return AVERROR(EINVAL);
|
||||
*r = t;
|
||||
return 0;
|
||||
}
|
||||
int av_size_mult(size_t a, size_t b, size_t *r);
|
||||
|
||||
/**
|
||||
* Set the maximum size that may be allocated in one block.
|
||||
|
|
|
@ -30,8 +30,6 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_murmur3 Murmur3
|
||||
* @ingroup lavu_hash
|
||||
|
@ -100,11 +98,7 @@ void av_murmur3_init(struct AVMurMur3 *c);
|
|||
* @param[in] src Input data to update hash with
|
||||
* @param[in] len Number of bytes to read from `src`
|
||||
*/
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len);
|
||||
#else
|
||||
void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Finish hashing and output digest value.
|
||||
|
|
|
@ -29,11 +29,11 @@
|
|||
|
||||
#include "rational.h"
|
||||
#include "avutil.h"
|
||||
#include "channel_layout.h"
|
||||
#include "dict.h"
|
||||
#include "log.h"
|
||||
#include "pixfmt.h"
|
||||
#include "samplefmt.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup avoptions AVOptions
|
||||
|
@ -238,8 +238,11 @@ enum AVOptionType{
|
|||
AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational
|
||||
AV_OPT_TYPE_DURATION,
|
||||
AV_OPT_TYPE_COLOR,
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
AV_OPT_TYPE_CHANNEL_LAYOUT,
|
||||
#endif
|
||||
AV_OPT_TYPE_BOOL,
|
||||
AV_OPT_TYPE_CHLAYOUT,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -648,19 +651,6 @@ 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.
|
||||
*
|
||||
|
@ -707,7 +697,11 @@ int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_
|
|||
int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);
|
||||
int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);
|
||||
int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags);
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
attribute_deprecated
|
||||
int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags);
|
||||
#endif
|
||||
int av_opt_set_chlayout(void *obj, const char *name, const AVChannelLayout *layout, int search_flags);
|
||||
/**
|
||||
* @note Any old dictionary present is discarded and replaced with a copy of the new one. The
|
||||
* caller still owns val is and responsible for freeing it.
|
||||
|
@ -762,7 +756,11 @@ int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_
|
|||
int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt);
|
||||
int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt);
|
||||
int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val);
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
attribute_deprecated
|
||||
int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout);
|
||||
#endif
|
||||
int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannelLayout *layout);
|
||||
/**
|
||||
* @param[out] out_val The returned dictionary is a copy of the actual value and must
|
||||
* be freed with av_dict_free() by the caller
|
||||
|
@ -804,9 +802,16 @@ int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags
|
|||
/**
|
||||
* Copy options from src object into dest object.
|
||||
*
|
||||
* The underlying AVClass of both src and dest must coincide. The guarantee
|
||||
* below does not apply if this is not fulfilled.
|
||||
*
|
||||
* Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object.
|
||||
* Original memory allocated for such options is freed unless both src and dest options points to the same memory.
|
||||
*
|
||||
* Even on error it is guaranteed that allocated options from src and dest
|
||||
* no longer alias each other afterwards; in particular calling av_opt_free()
|
||||
* on both src and dest is safe afterwards if dest has been memdup'ed from src.
|
||||
*
|
||||
* @param dest Object to copy from
|
||||
* @param src Object to copy into
|
||||
* @return 0 on success, negative on error
|
||||
|
|
|
@ -79,6 +79,8 @@ int av_parse_video_rate(AVRational *rate, const char *str);
|
|||
/**
|
||||
* Put the RGBA values that correspond to color_string in rgba_color.
|
||||
*
|
||||
* @param rgba_color 4-elements array of uint8_t values, where the respective
|
||||
* red, green, blue and alpha component values are written.
|
||||
* @param color_string a string specifying a color. It can be the name of
|
||||
* a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence,
|
||||
* possibly followed by "@" and a string representing the alpha
|
||||
|
@ -92,6 +94,8 @@ int av_parse_video_rate(AVRational *rate, const char *str);
|
|||
* @param slen length of the initial part of color_string containing the
|
||||
* color. It can be set to -1 if color_string is a null terminated string
|
||||
* containing nothing else than the color.
|
||||
* @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()). Can be NULL.
|
||||
* @return >= 0 in case of success, a negative value in case of
|
||||
* failure (for example if color_string cannot be parsed).
|
||||
*/
|
||||
|
@ -106,7 +110,7 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
|
|||
* av_parse_color().
|
||||
*
|
||||
* @param color_idx index of the requested color, starting from 0
|
||||
* @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB
|
||||
* @param rgb if not NULL, will point to a 3-elements array with the color value in RGB
|
||||
* @return the color name string or NULL if color_idx is not in the array
|
||||
*/
|
||||
const char *av_get_known_color_name(int color_idx, const uint8_t **rgb);
|
||||
|
@ -162,19 +166,19 @@ int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info
|
|||
* by the standard strptime().
|
||||
*
|
||||
* The supported input field descriptors are listed below.
|
||||
* - %H: the hour as a decimal number, using a 24-hour clock, in the
|
||||
* - `%%H`: the hour as a decimal number, using a 24-hour clock, in the
|
||||
* range '00' through '23'
|
||||
* - %J: hours as a decimal number, in the range '0' through INT_MAX
|
||||
* - %M: the minute as a decimal number, using a 24-hour clock, in the
|
||||
* - `%%J`: hours as a decimal number, in the range '0' through INT_MAX
|
||||
* - `%%M`: the minute as a decimal number, using a 24-hour clock, in the
|
||||
* range '00' through '59'
|
||||
* - %S: the second as a decimal number, using a 24-hour clock, in the
|
||||
* - `%%S`: the second as a decimal number, using a 24-hour clock, in the
|
||||
* range '00' through '59'
|
||||
* - %Y: the year as a decimal number, using the Gregorian calendar
|
||||
* - %m: the month as a decimal number, in the range '1' through '12'
|
||||
* - %d: the day of the month as a decimal number, in the range '1'
|
||||
* - `%%Y`: the year as a decimal number, using the Gregorian calendar
|
||||
* - `%%m`: the month as a decimal number, in the range '1' through '12'
|
||||
* - `%%d`: the day of the month as a decimal number, in the range '1'
|
||||
* through '31'
|
||||
* - %T: alias for '%H:%M:%S'
|
||||
* - %%: a literal '%'
|
||||
* - `%%T`: alias for `%%H:%%M:%%S`
|
||||
* - `%%`: a literal `%`
|
||||
*
|
||||
* @return a pointer to the first character not processed in this function
|
||||
* call. In case the input string contains more characters than
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include "attributes.h"
|
||||
#include "pixfmt.h"
|
||||
#include "version.h"
|
||||
|
||||
typedef struct AVComponentDescriptor {
|
||||
/**
|
||||
|
@ -56,17 +55,6 @@ typedef struct AVComponentDescriptor {
|
|||
* Number of bits in the component.
|
||||
*/
|
||||
int depth;
|
||||
|
||||
#if FF_API_PLUS1_MINUS1
|
||||
/** deprecated, use step instead */
|
||||
attribute_deprecated int step_minus1;
|
||||
|
||||
/** deprecated, use depth instead */
|
||||
attribute_deprecated int depth_minus1;
|
||||
|
||||
/** deprecated, use offset instead */
|
||||
attribute_deprecated int offset_plus1;
|
||||
#endif
|
||||
} AVComponentDescriptor;
|
||||
|
||||
/**
|
||||
|
@ -147,26 +135,6 @@ 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
|
||||
* PIX_FMT. This allows interpreting the data as if it was PAL8, which can
|
||||
* in some cases be simpler. Or the data can be interpreted purely based on
|
||||
* the pixel format without using the palette.
|
||||
* An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8
|
||||
*
|
||||
* @deprecated This flag is deprecated, and will be removed. When it is removed,
|
||||
* the extra palette allocation in AVFrame.data[1] is removed as well. Only
|
||||
* actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a
|
||||
* palette. Starting with FFmpeg versions which have this flag deprecated, the
|
||||
* extra "pseudo" palette is already ignored, and API users are not required to
|
||||
* allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required
|
||||
* 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
|
||||
* support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always
|
||||
|
@ -296,6 +264,28 @@ const char *av_chroma_location_name(enum AVChromaLocation location);
|
|||
*/
|
||||
int av_chroma_location_from_name(const char *name);
|
||||
|
||||
/**
|
||||
* Converts AVChromaLocation to swscale x/y chroma position.
|
||||
*
|
||||
* The positions represent the chroma (0,0) position in a coordinates system
|
||||
* with luma (0,0) representing the origin and luma(1,1) representing 256,256
|
||||
*
|
||||
* @param xpos horizontal chroma sample position
|
||||
* @param ypos vertical chroma sample position
|
||||
*/
|
||||
int av_chroma_location_enum_to_pos(int *xpos, int *ypos, enum AVChromaLocation pos);
|
||||
|
||||
/**
|
||||
* Converts swscale x/y chroma position to AVChromaLocation.
|
||||
*
|
||||
* The positions represent the chroma (0,0) position in a coordinates system
|
||||
* with luma (0,0) representing the origin and luma(1,1) representing 256,256
|
||||
*
|
||||
* @param xpos horizontal chroma sample position
|
||||
* @param ypos vertical chroma sample position
|
||||
*/
|
||||
enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos);
|
||||
|
||||
/**
|
||||
* Return the pixel format corresponding to name.
|
||||
*
|
||||
|
@ -389,12 +379,15 @@ void av_write_image_line(const uint16_t *src, uint8_t *data[4],
|
|||
*/
|
||||
enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt);
|
||||
|
||||
#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */
|
||||
#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */
|
||||
#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */
|
||||
#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */
|
||||
#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */
|
||||
#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
|
||||
#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */
|
||||
#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */
|
||||
#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */
|
||||
#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */
|
||||
#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */
|
||||
#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
|
||||
#define FF_LOSS_EXCESS_RESOLUTION 0x0040 /**< loss due to unneeded extra resolution */
|
||||
#define FF_LOSS_EXCESS_DEPTH 0x0080 /**< loss due to unneeded extra color depth */
|
||||
|
||||
|
||||
/**
|
||||
* Compute what kind of losses will occur when converting from one specific
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "common.h"
|
||||
|
||||
/**
|
||||
* Sum of abs(src1[x] - src2[x])
|
||||
|
|
|
@ -112,21 +112,11 @@ enum AVPixelFormat {
|
|||
AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined
|
||||
AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
|
||||
|
||||
#if FF_API_VAAPI
|
||||
/** @name Deprecated pixel formats */
|
||||
/**@{*/
|
||||
AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers
|
||||
AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers
|
||||
AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID
|
||||
/**@}*/
|
||||
AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD,
|
||||
#else
|
||||
/**
|
||||
* Hardware acceleration through VA-API, data[3] contains a
|
||||
* VASurfaceID.
|
||||
*/
|
||||
AV_PIX_FMT_VAAPI,
|
||||
#endif
|
||||
|
||||
AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
|
||||
AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
|
||||
|
@ -216,8 +206,36 @@ enum AVPixelFormat {
|
|||
AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian
|
||||
AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian
|
||||
/**
|
||||
* HW acceleration through QSV, data[3] contains a pointer to the
|
||||
* mfxFrameSurface1 structure.
|
||||
* HW acceleration through QSV, data[3] contains a pointer to the
|
||||
* mfxFrameSurface1 structure.
|
||||
*
|
||||
* Before FFmpeg 5.0:
|
||||
* mfxFrameSurface1.Data.MemId contains a pointer when importing
|
||||
* the following frames as QSV frames:
|
||||
*
|
||||
* VAAPI:
|
||||
* mfxFrameSurface1.Data.MemId contains a pointer to VASurfaceID
|
||||
*
|
||||
* DXVA2:
|
||||
* mfxFrameSurface1.Data.MemId contains a pointer to IDirect3DSurface9
|
||||
*
|
||||
* FFmpeg 5.0 and above:
|
||||
* mfxFrameSurface1.Data.MemId contains a pointer to the mfxHDLPair
|
||||
* structure when importing the following frames as QSV frames:
|
||||
*
|
||||
* VAAPI:
|
||||
* mfxHDLPair.first contains a VASurfaceID pointer.
|
||||
* mfxHDLPair.second is always MFX_INFINITE.
|
||||
*
|
||||
* DXVA2:
|
||||
* mfxHDLPair.first contains IDirect3DSurface9 pointer.
|
||||
* mfxHDLPair.second is always MFX_INFINITE.
|
||||
*
|
||||
* D3D11:
|
||||
* mfxHDLPair.first contains a ID3D11Texture2D pointer.
|
||||
* mfxHDLPair.second contains the texture array index of the frame if the
|
||||
* ID3D11Texture2D is an array texture, or always MFX_INFINITE if it is a
|
||||
* normal texture.
|
||||
*/
|
||||
AV_PIX_FMT_QSV,
|
||||
/**
|
||||
|
@ -270,7 +288,9 @@ enum AVPixelFormat {
|
|||
AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian
|
||||
AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian
|
||||
|
||||
#if FF_API_XVMC
|
||||
AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing
|
||||
#endif
|
||||
|
||||
AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
|
||||
AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
|
||||
|
@ -360,6 +380,46 @@ enum AVPixelFormat {
|
|||
|
||||
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_X2BGR10LE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined
|
||||
AV_PIX_FMT_X2BGR10BE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), big-endian, X=unused/undefined
|
||||
|
||||
AV_PIX_FMT_P210BE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, big-endian
|
||||
AV_PIX_FMT_P210LE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, little-endian
|
||||
|
||||
AV_PIX_FMT_P410BE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian
|
||||
AV_PIX_FMT_P410LE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian
|
||||
|
||||
AV_PIX_FMT_P216BE, ///< interleaved chroma YUV 4:2:2, 32bpp, big-endian
|
||||
AV_PIX_FMT_P216LE, ///< interleaved chroma YUV 4:2:2, 32bpp, little-endian
|
||||
|
||||
AV_PIX_FMT_P416BE, ///< interleaved chroma YUV 4:4:4, 48bpp, big-endian
|
||||
AV_PIX_FMT_P416LE, ///< interleaved chroma YUV 4:4:4, 48bpp, little-endian
|
||||
|
||||
AV_PIX_FMT_VUYA, ///< packed VUYA 4:4:4, 32bpp, VUYAVUYA...
|
||||
|
||||
AV_PIX_FMT_RGBAF16BE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian
|
||||
AV_PIX_FMT_RGBAF16LE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian
|
||||
|
||||
AV_PIX_FMT_VUYX, ///< packed VUYX 4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined
|
||||
|
||||
AV_PIX_FMT_P012LE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, little-endian
|
||||
AV_PIX_FMT_P012BE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, big-endian
|
||||
|
||||
AV_PIX_FMT_Y212BE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, big-endian
|
||||
AV_PIX_FMT_Y212LE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, little-endian
|
||||
|
||||
AV_PIX_FMT_XV30BE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), big-endian, variant of Y410 where alpha channel is left undefined
|
||||
AV_PIX_FMT_XV30LE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), little-endian, variant of Y410 where alpha channel is left undefined
|
||||
|
||||
AV_PIX_FMT_XV36BE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, big-endian, variant of Y412 where alpha channel is left undefined
|
||||
AV_PIX_FMT_XV36LE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, little-endian, variant of Y412 where alpha channel is left undefined
|
||||
|
||||
AV_PIX_FMT_RGBF32BE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., big-endian
|
||||
AV_PIX_FMT_RGBF32LE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., little-endian
|
||||
|
||||
AV_PIX_FMT_RGBAF32BE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., big-endian
|
||||
AV_PIX_FMT_RGBAF32LE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., little-endian
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
|
@ -446,39 +506,54 @@ enum AVPixelFormat {
|
|||
#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE)
|
||||
#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE)
|
||||
#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE)
|
||||
#define AV_PIX_FMT_P012 AV_PIX_FMT_NE(P012BE, P012LE)
|
||||
#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_Y212 AV_PIX_FMT_NE(Y212BE, Y212LE)
|
||||
#define AV_PIX_FMT_XV30 AV_PIX_FMT_NE(XV30BE, XV30LE)
|
||||
#define AV_PIX_FMT_XV36 AV_PIX_FMT_NE(XV36BE, XV36LE)
|
||||
#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE)
|
||||
#define AV_PIX_FMT_X2BGR10 AV_PIX_FMT_NE(X2BGR10BE, X2BGR10LE)
|
||||
|
||||
#define AV_PIX_FMT_P210 AV_PIX_FMT_NE(P210BE, P210LE)
|
||||
#define AV_PIX_FMT_P410 AV_PIX_FMT_NE(P410BE, P410LE)
|
||||
#define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE)
|
||||
#define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE)
|
||||
|
||||
#define AV_PIX_FMT_RGBAF16 AV_PIX_FMT_NE(RGBAF16BE, RGBAF16LE)
|
||||
|
||||
#define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE)
|
||||
#define AV_PIX_FMT_RGBAF32 AV_PIX_FMT_NE(RGBAF32BE, RGBAF32LE)
|
||||
|
||||
/**
|
||||
* Chromaticity coordinates of the source primaries.
|
||||
* These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1.
|
||||
* These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and ITU-T H.273.
|
||||
*/
|
||||
enum AVColorPrimaries {
|
||||
AVCOL_PRI_RESERVED0 = 0,
|
||||
AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
|
||||
AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B
|
||||
AVCOL_PRI_UNSPECIFIED = 2,
|
||||
AVCOL_PRI_RESERVED = 3,
|
||||
AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
|
||||
|
||||
AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
|
||||
AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
|
||||
AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above
|
||||
AVCOL_PRI_SMPTE240M = 7, ///< identical to above, also called "SMPTE C" even though it uses D65
|
||||
AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C
|
||||
AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020
|
||||
AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ)
|
||||
AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428,
|
||||
AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3
|
||||
AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3
|
||||
AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors
|
||||
AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC P22 group phosphors
|
||||
AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213,
|
||||
AVCOL_PRI_NB ///< Not part of ABI
|
||||
};
|
||||
|
||||
/**
|
||||
* Color Transfer Characteristic.
|
||||
* These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2.
|
||||
* These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2.
|
||||
*/
|
||||
enum AVColorTransferCharacteristic {
|
||||
AVCOL_TRC_RESERVED0 = 0,
|
||||
|
@ -507,18 +582,18 @@ enum AVColorTransferCharacteristic {
|
|||
|
||||
/**
|
||||
* YUV colorspace type.
|
||||
* These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3.
|
||||
* These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3.
|
||||
*/
|
||||
enum AVColorSpace {
|
||||
AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB)
|
||||
AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
|
||||
AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
|
||||
AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B
|
||||
AVCOL_SPC_UNSPECIFIED = 2,
|
||||
AVCOL_SPC_RESERVED = 3,
|
||||
AVCOL_SPC_RESERVED = 3, ///< reserved for future use by ITU-T and ISO/IEC just like 15-255 are
|
||||
AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
|
||||
AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
|
||||
AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
|
||||
AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above
|
||||
AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
|
||||
AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
|
||||
AVCOL_SPC_SMPTE240M = 7, ///< derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries
|
||||
AVCOL_SPC_YCGCO = 8, ///< used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
|
||||
AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO,
|
||||
AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system
|
||||
AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system
|
||||
|
@ -540,9 +615,9 @@ enum AVColorSpace {
|
|||
* 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,
|
||||
* - For RGB and luma 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
|
||||
* - For chroma 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
|
||||
|
@ -554,13 +629,13 @@ enum AVColorRange {
|
|||
/**
|
||||
* Narrow or limited range content.
|
||||
*
|
||||
* - For luminance planes:
|
||||
* - For luma planes:
|
||||
*
|
||||
* (219 * E + 16) * 2^(n-8)
|
||||
*
|
||||
* F.ex. the range of 16-235 for 8 bits
|
||||
*
|
||||
* - For chrominance planes:
|
||||
* - For chroma planes:
|
||||
*
|
||||
* (224 * E + 128) * 2^(n-8)
|
||||
*
|
||||
|
@ -571,13 +646,13 @@ enum AVColorRange {
|
|||
/**
|
||||
* Full range content.
|
||||
*
|
||||
* - For RGB and luminance planes:
|
||||
* - For RGB and luma planes:
|
||||
*
|
||||
* (2^n - 1) * E
|
||||
*
|
||||
* F.ex. the range of 0-255 for 8 bits
|
||||
*
|
||||
* - For chrominance planes:
|
||||
* - For chroma planes:
|
||||
*
|
||||
* (2^n - 1) * E + 2^(n - 1)
|
||||
*
|
||||
|
|
|
@ -179,7 +179,8 @@ AVRational av_d2q(double d, int max) av_const;
|
|||
* Find which of the two rationals is closer to another rational.
|
||||
*
|
||||
* @param q Rational to be compared against
|
||||
* @param q1,q2 Rationals to be tested
|
||||
* @param q1 Rational to be tested
|
||||
* @param q2 Rational to be tested
|
||||
* @return One of the following values:
|
||||
* - 1 if `q1` is nearer to `q` than `q2`
|
||||
* - -1 if `q2` is nearer to `q` than `q1`
|
||||
|
|
|
@ -42,6 +42,8 @@ AVRC4 *av_rc4_alloc(void);
|
|||
/**
|
||||
* @brief Initializes an AVRC4 context.
|
||||
*
|
||||
* @param d pointer to the AVRC4 context
|
||||
* @param key buffer containig the key
|
||||
* @param key_bits must be a multiple of 8
|
||||
* @param decrypt 0 for encryption, 1 for decryption, currently has no effect
|
||||
* @return zero on success, negative value otherwise
|
||||
|
@ -51,6 +53,7 @@ int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt);
|
|||
/**
|
||||
* @brief Encrypts / decrypts using the RC4 algorithm.
|
||||
*
|
||||
* @param d pointer to the AVRC4 context
|
||||
* @param count number of bytes
|
||||
* @param dst destination array, can be equal to src
|
||||
* @param src source array, can be equal to dst, may be NULL
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_ripemd RIPEMD
|
||||
|
@ -67,11 +66,7 @@ int av_ripemd_init(struct AVRIPEMD* context, int bits);
|
|||
* @param data input data to update hash with
|
||||
* @param len input data length
|
||||
*/
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len);
|
||||
#else
|
||||
void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, size_t len);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Finish hashing and output digest value.
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "avutil.h"
|
||||
#include "attributes.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_audio
|
||||
* @{
|
||||
|
@ -195,9 +192,8 @@ int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples,
|
|||
* @param nb_samples the number of samples in a single channel
|
||||
* @param sample_fmt the sample format
|
||||
* @param align buffer size alignment (0 = default, 1 = no alignment)
|
||||
* @return >=0 on success or a negative error code on failure
|
||||
* @todo return minimum size in bytes required for the buffer in case
|
||||
* of success at the next bump
|
||||
* @return minimum size in bytes required for the buffer on success,
|
||||
* or a negative error code on failure
|
||||
*/
|
||||
int av_samples_fill_arrays(uint8_t **audio_data, int *linesize,
|
||||
const uint8_t *buf,
|
||||
|
@ -217,6 +213,7 @@ int av_samples_fill_arrays(uint8_t **audio_data, int *linesize,
|
|||
* @param[out] linesize aligned size for audio buffer(s), may be NULL
|
||||
* @param nb_channels number of audio channels
|
||||
* @param nb_samples number of samples per channel
|
||||
* @param sample_fmt the sample format
|
||||
* @param align buffer size alignment (0 = default, 1 = no alignment)
|
||||
* @return >=0 on success or a negative error code on failure
|
||||
* @todo return the size of the allocated buffer in case of success at the next bump
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_sha SHA
|
||||
|
@ -74,11 +73,7 @@ int av_sha_init(struct AVSHA* context, int bits);
|
|||
* @param data input data to update hash with
|
||||
* @param len input data length
|
||||
*/
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
void av_sha_update(struct AVSHA *ctx, const uint8_t *data, unsigned int len);
|
||||
#else
|
||||
void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Finish hashing and output digest value.
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @defgroup lavu_sha512 SHA-512
|
||||
|
@ -76,11 +75,7 @@ int av_sha512_init(struct AVSHA512* context, int bits);
|
|||
* @param data input data to update hash with
|
||||
* @param len input data length
|
||||
*/
|
||||
#if FF_API_CRYPTO_SIZE_T
|
||||
void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len);
|
||||
#else
|
||||
void av_sha512_update(struct AVSHA512* context, const uint8_t* data, size_t len);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Finish hashing and output digest value.
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup lavu_video_spherical
|
||||
* Spherical video
|
||||
*/
|
||||
|
||||
|
@ -30,19 +31,14 @@
|
|||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_video
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavu_video_spherical Spherical video mapping
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_video_spherical
|
||||
* @ingroup lavu_video
|
||||
*
|
||||
* A spherical video file contains surfaces that need to be mapped onto a
|
||||
* sphere. Depending on how the frame was converted, a different distortion
|
||||
* transformation or surface recomposition function needs to be applied before
|
||||
* the video should be mapped and displayed.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -225,7 +221,6 @@ const char *av_spherical_projection_name(enum AVSphericalProjection projection);
|
|||
*/
|
||||
int av_spherical_from_name(const char *name);
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup lavu_video_stereo3d
|
||||
* Stereoscopic video
|
||||
*/
|
||||
|
||||
|
@ -31,19 +32,15 @@
|
|||
#include "frame.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_video
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavu_video_stereo3d Stereo3D types and functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_video_stereo3d
|
||||
* @ingroup lavu_video
|
||||
*
|
||||
* A stereoscopic video file consists in multiple views embedded in a single
|
||||
* frame, usually describing two views of a scene. This file describes all
|
||||
* possible codec-independent view arrangements.
|
||||
* */
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* List of possible 3D Types
|
||||
|
@ -226,7 +223,6 @@ const char *av_stereo3d_type_name(unsigned int type);
|
|||
int av_stereo3d_from_name(const char *name);
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#define AVUTIL_TREE_H
|
||||
|
||||
#include "attributes.h"
|
||||
#include "version.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_tree AVTree
|
||||
|
|
|
@ -59,7 +59,7 @@ int av_twofish_init(struct AVTWOFISH *ctx, const uint8_t *key, int key_bits);
|
|||
* @param dst destination array, can be equal to src
|
||||
* @param src source array, can be equal to dst
|
||||
* @param count number of 16 byte blocks
|
||||
* @paran iv initialization vector for CBC mode, NULL for ECB mode
|
||||
* @param iv initialization vector for CBC mode, NULL for ECB mode
|
||||
* @param decrypt 0 for encryption, 1 for decryption
|
||||
*/
|
||||
void av_twofish_crypt(struct AVTWOFISH *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt);
|
||||
|
|
|
@ -38,47 +38,75 @@ typedef struct AVComplexInt32 {
|
|||
|
||||
enum AVTXType {
|
||||
/**
|
||||
* Standard complex to complex FFT with sample data type AVComplexFloat.
|
||||
* Standard complex to complex FFT with sample data type of AVComplexFloat,
|
||||
* AVComplexDouble or AVComplexInt32, for each respective variant.
|
||||
*
|
||||
* Output is not 1/len normalized. Scaling currently unsupported.
|
||||
* The stride parameter is ignored.
|
||||
* The stride parameter must be set to the size of a single sample in bytes.
|
||||
*/
|
||||
AV_TX_FLOAT_FFT = 0,
|
||||
AV_TX_FLOAT_FFT = 0,
|
||||
AV_TX_DOUBLE_FFT = 2,
|
||||
AV_TX_INT32_FFT = 4,
|
||||
|
||||
/**
|
||||
* 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)
|
||||
* Standard MDCT with a sample data type of float, double or int32_t,
|
||||
* respecively. For the float and int32 variants, the scale type is
|
||||
* 'float', while for the double variant, it's 'double'.
|
||||
* If scale is NULL, 1.0 will be used as a default.
|
||||
*
|
||||
* Length is the frame size, not the window size (which is 2x frame).
|
||||
* For forward transforms, the stride specifies the spacing between each
|
||||
* sample in the output array in bytes. The input must be a flat array.
|
||||
*
|
||||
* 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).
|
||||
* sample in the input array in bytes. The output must be a flat array.
|
||||
*
|
||||
* 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).
|
||||
* contain redundant data. This is what most codecs work with. To do a full
|
||||
* inverse transform, set the AV_TX_FULL_IMDCT flag on init.
|
||||
*/
|
||||
AV_TX_FLOAT_MDCT = 1,
|
||||
AV_TX_DOUBLE_MDCT = 3,
|
||||
AV_TX_INT32_MDCT = 5,
|
||||
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32.
|
||||
* Real to complex and complex to real DFTs.
|
||||
* For the float and int32 variants, the scale type is 'float', while for
|
||||
* the double variant, it's a 'double'. If scale is NULL, 1.0 will be used
|
||||
* as a default.
|
||||
*
|
||||
* For forward transforms (R2C), stride must be the spacing between two
|
||||
* samples in bytes. For inverse transforms, the stride must be set
|
||||
* to the spacing between two complex values in bytes.
|
||||
*
|
||||
* The forward transform performs a real-to-complex DFT of N samples to
|
||||
* N/2+1 complex values.
|
||||
*
|
||||
* The inverse transform performs a complex-to-real DFT of N/2+1 complex
|
||||
* values to N real samples. The output is not normalized, but can be
|
||||
* made so by setting the scale value to 1.0/len.
|
||||
* NOTE: the inverse transform always overwrites the input.
|
||||
*/
|
||||
AV_TX_INT32_FFT = 4,
|
||||
AV_TX_FLOAT_RDFT = 6,
|
||||
AV_TX_DOUBLE_RDFT = 7,
|
||||
AV_TX_INT32_RDFT = 8,
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* Stride must be a non-zero multiple of sizeof(int32_t).
|
||||
* Real to real (DCT) transforms.
|
||||
*
|
||||
* The forward transform is a DCT-II.
|
||||
* The inverse transform is a DCT-III.
|
||||
*
|
||||
* The input array is always overwritten. DCT-III requires that the
|
||||
* input be padded with 2 extra samples. Stride must be set to the
|
||||
* spacing between two samples in bytes.
|
||||
*/
|
||||
AV_TX_INT32_MDCT = 5,
|
||||
AV_TX_FLOAT_DCT = 9,
|
||||
AV_TX_DOUBLE_DCT = 10,
|
||||
AV_TX_INT32_DCT = 11,
|
||||
|
||||
/* Not part of the API, do not use */
|
||||
AV_TX_NB,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -93,7 +121,7 @@ enum AVTXType {
|
|||
* @param stride the input or output stride in bytes
|
||||
*
|
||||
* The out and in arrays must be aligned to the maximum required by the CPU
|
||||
* architecture.
|
||||
* architecture unless the AV_TX_UNALIGNED flag was set in av_tx_init().
|
||||
* The stride must follow the constraints the transform type has specified.
|
||||
*/
|
||||
typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride);
|
||||
|
@ -103,11 +131,24 @@ typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride);
|
|||
*/
|
||||
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.
|
||||
* Allows for in-place transformations, where input == output.
|
||||
* May be unsupported or slower for some transform types.
|
||||
*/
|
||||
AV_TX_INPLACE = 1ULL << 0,
|
||||
|
||||
/**
|
||||
* Relaxes alignment requirement for the in and out arrays of av_tx_fn().
|
||||
* May be slower with certain transform types.
|
||||
*/
|
||||
AV_TX_UNALIGNED = 1ULL << 1,
|
||||
|
||||
/**
|
||||
* Performs a full inverse MDCT rather than leaving out samples that can be
|
||||
* derived through symmetry. Requires an output array of 'len' floats,
|
||||
* rather than the usual 'len/2' floats.
|
||||
* Ignored for all transforms but inverse MDCTs.
|
||||
*/
|
||||
AV_TX_FULL_IMDCT = 1ULL << 2,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -128,7 +169,7 @@ int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type,
|
|||
int inv, int len, const void *scale, uint64_t flags);
|
||||
|
||||
/**
|
||||
* Frees a context and sets ctx to NULL, does nothing when ctx == NULL
|
||||
* Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL.
|
||||
*/
|
||||
void av_tx_uninit(AVTXContext **ctx);
|
||||
|
||||
|
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Copyright (c) 2022 Pierre-Anthony Lemieux <pal@palemieux.com>
|
||||
* Zane van Iperen <zane@zanevaniperen.com>
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* UUID parsing and serialization utilities.
|
||||
* The library treats the UUID as an opaque sequence of 16 unsigned bytes,
|
||||
* i.e. ignoring the internal layout of the UUID, which depends on the type
|
||||
* of the UUID.
|
||||
*
|
||||
* @author Pierre-Anthony Lemieux <pal@palemieux.com>
|
||||
* @author Zane van Iperen <zane@zanevaniperen.com>
|
||||
*/
|
||||
|
||||
#ifndef AVUTIL_UUID_H
|
||||
#define AVUTIL_UUID_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#define AV_PRI_UUID \
|
||||
"%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \
|
||||
"%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
|
||||
|
||||
#define AV_PRI_URN_UUID \
|
||||
"urn:uuid:%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \
|
||||
"%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
|
||||
|
||||
/* AV_UUID_ARG() is used together with AV_PRI_UUID() or AV_PRI_URN_UUID
|
||||
* to print UUIDs, e.g.
|
||||
* av_log(NULL, AV_LOG_DEBUG, "UUID: " AV_PRI_UUID, AV_UUID_ARG(uuid));
|
||||
*/
|
||||
#define AV_UUID_ARG(x) \
|
||||
(x)[ 0], (x)[ 1], (x)[ 2], (x)[ 3], \
|
||||
(x)[ 4], (x)[ 5], (x)[ 6], (x)[ 7], \
|
||||
(x)[ 8], (x)[ 9], (x)[10], (x)[11], \
|
||||
(x)[12], (x)[13], (x)[14], (x)[15]
|
||||
|
||||
#define AV_UUID_LEN 16
|
||||
|
||||
/* Binary representation of a UUID */
|
||||
typedef uint8_t AVUUID[AV_UUID_LEN];
|
||||
|
||||
/**
|
||||
* Parses a string representation of a UUID formatted according to IETF RFC 4122
|
||||
* into an AVUUID. The parsing is case-insensitive. The string must be 37
|
||||
* characters long, including the terminating NUL character.
|
||||
*
|
||||
* Example string representation: "2fceebd0-7017-433d-bafb-d073a7116696"
|
||||
*
|
||||
* @param[in] in String representation of a UUID,
|
||||
* e.g. 2fceebd0-7017-433d-bafb-d073a7116696
|
||||
* @param[out] uu AVUUID
|
||||
* @return A non-zero value in case of an error.
|
||||
*/
|
||||
int av_uuid_parse(const char *in, AVUUID uu);
|
||||
|
||||
/**
|
||||
* Parses a URN representation of a UUID, as specified at IETF RFC 4122,
|
||||
* into an AVUUID. The parsing is case-insensitive. The string must be 46
|
||||
* characters long, including the terminating NUL character.
|
||||
*
|
||||
* Example string representation: "urn:uuid:2fceebd0-7017-433d-bafb-d073a7116696"
|
||||
*
|
||||
* @param[in] in URN UUID
|
||||
* @param[out] uu AVUUID
|
||||
* @return A non-zero value in case of an error.
|
||||
*/
|
||||
int av_uuid_urn_parse(const char *in, AVUUID uu);
|
||||
|
||||
/**
|
||||
* Parses a string representation of a UUID formatted according to IETF RFC 4122
|
||||
* into an AVUUID. The parsing is case-insensitive.
|
||||
*
|
||||
* @param[in] in_start Pointer to the first character of the string representation
|
||||
* @param[in] in_end Pointer to the character after the last character of the
|
||||
* string representation. That memory location is never
|
||||
* accessed. It is an error if `in_end - in_start != 36`.
|
||||
* @param[out] uu AVUUID
|
||||
* @return A non-zero value in case of an error.
|
||||
*/
|
||||
int av_uuid_parse_range(const char *in_start, const char *in_end, AVUUID uu);
|
||||
|
||||
/**
|
||||
* Serializes a AVUUID into a string representation according to IETF RFC 4122.
|
||||
* The string is lowercase and always 37 characters long, including the
|
||||
* terminating NUL character.
|
||||
*
|
||||
* @param[in] uu AVUUID
|
||||
* @param[out] out Pointer to an array of no less than 37 characters.
|
||||
*/
|
||||
void av_uuid_unparse(const AVUUID uu, char *out);
|
||||
|
||||
/**
|
||||
* Compares two UUIDs for equality.
|
||||
*
|
||||
* @param[in] uu1 AVUUID
|
||||
* @param[in] uu2 AVUUID
|
||||
* @return Nonzero if uu1 and uu2 are identical, 0 otherwise
|
||||
*/
|
||||
static inline int av_uuid_equal(const AVUUID uu1, const AVUUID uu2)
|
||||
{
|
||||
return memcmp(uu1, uu2, AV_UUID_LEN) == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the bytes of src into dest.
|
||||
*
|
||||
* @param[out] dest AVUUID
|
||||
* @param[in] src AVUUID
|
||||
*/
|
||||
static inline void av_uuid_copy(AVUUID dest, const AVUUID src)
|
||||
{
|
||||
memcpy(dest, src, AV_UUID_LEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a UUID to the nil UUID, i.e. a UUID with have all
|
||||
* its 128 bits set to zero.
|
||||
*
|
||||
* @param[in,out] uu UUID to be set to the nil UUID
|
||||
*/
|
||||
static inline void av_uuid_nil(AVUUID uu)
|
||||
{
|
||||
memset(uu, 0, AV_UUID_LEN);
|
||||
}
|
||||
|
||||
#endif /* AVUTIL_UUID_H */
|
|
@ -78,8 +78,8 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 56
|
||||
#define LIBAVUTIL_VERSION_MINOR 70
|
||||
#define LIBAVUTIL_VERSION_MAJOR 58
|
||||
#define LIBAVUTIL_VERSION_MINOR 2
|
||||
#define LIBAVUTIL_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
|
@ -105,42 +105,14 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#ifndef FF_API_VAAPI
|
||||
#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_FRAME_QP
|
||||
#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_PLUS1_MINUS1
|
||||
#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_ERROR_FRAME
|
||||
#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_PKT_PTS
|
||||
#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_CRYPTO_SIZE_T
|
||||
#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#ifndef FF_API_FRAME_GET_SET
|
||||
#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
#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
|
||||
#define FF_API_FIFO_PEEK2 (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
#define FF_API_FIFO_OLD_API (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
#define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
#define FF_API_OLD_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
#define FF_API_AV_FOPEN_UTF8 (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
#define FF_API_PKT_DURATION (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
#define FF_API_REORDERED_OPAQUE (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
#define FF_API_FRAME_PICTURE_NUMBER (LIBAVUTIL_VERSION_MAJOR < 59)
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
|
|
@ -34,11 +34,11 @@
|
|||
* Audio resampling, sample format conversion and mixing library.
|
||||
*
|
||||
* Interaction with lswr is done through SwrContext, which is
|
||||
* allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters
|
||||
* allocated with swr_alloc() or swr_alloc_set_opts2(). It is opaque, so all parameters
|
||||
* must be set with the @ref avoptions API.
|
||||
*
|
||||
* The first thing you will need to do in order to use lswr is to allocate
|
||||
* SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts(). If you
|
||||
* SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts2(). If you
|
||||
* are using the former, you must set options through the @ref avoptions API.
|
||||
* The latter function provides the same feature, but it allows you to set some
|
||||
* common options in the same statement.
|
||||
|
@ -57,13 +57,14 @@
|
|||
* av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0);
|
||||
* @endcode
|
||||
*
|
||||
* The same job can be done using swr_alloc_set_opts() as well:
|
||||
* The same job can be done using swr_alloc_set_opts2() as well:
|
||||
* @code
|
||||
* SwrContext *swr = swr_alloc_set_opts(NULL, // we're allocating a new context
|
||||
* AV_CH_LAYOUT_STEREO, // out_ch_layout
|
||||
* SwrContext *swr = NULL;
|
||||
* int ret = swr_alloc_set_opts2(&swr, // we're allocating a new context
|
||||
* &(AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO, // out_ch_layout
|
||||
* AV_SAMPLE_FMT_S16, // out_sample_fmt
|
||||
* 44100, // out_sample_rate
|
||||
* AV_CH_LAYOUT_5POINT1, // in_ch_layout
|
||||
* &(AVChannelLayout)AV_CHANNEL_LAYOUT_5POINT1, // in_ch_layout
|
||||
* AV_SAMPLE_FMT_FLTP, // in_sample_fmt
|
||||
* 48000, // in_sample_rate
|
||||
* 0, // log_offset
|
||||
|
@ -72,8 +73,8 @@
|
|||
*
|
||||
* Once all values have been set, it must be initialized with swr_init(). If
|
||||
* you need to change the conversion parameters, you can change the parameters
|
||||
* using @ref AVOptions, as described above in the first example; or by using
|
||||
* swr_alloc_set_opts(), but with the first argument the allocated context.
|
||||
* using @ref avoptions, as described above in the first example; or by using
|
||||
* swr_alloc_set_opts2(), but with the first argument the allocated context.
|
||||
* You must then call swr_init() again.
|
||||
*
|
||||
* The conversion itself is done by repeatedly calling swr_convert().
|
||||
|
@ -124,7 +125,13 @@
|
|||
#include "libavutil/frame.h"
|
||||
#include "libavutil/samplefmt.h"
|
||||
|
||||
#include "libswresample/version_major.h"
|
||||
#ifndef HAVE_AV_CONFIG_H
|
||||
/* When included as part of the ffmpeg build, only include the major version
|
||||
* to avoid unnecessary rebuilds. When included externally, keep including
|
||||
* the full version information. */
|
||||
#include "libswresample/version.h"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name Option constants
|
||||
|
@ -199,9 +206,9 @@ const AVClass *swr_get_class(void);
|
|||
* Allocate SwrContext.
|
||||
*
|
||||
* If you use this function you will need to set the parameters (manually or
|
||||
* with swr_alloc_set_opts()) before calling swr_init().
|
||||
* with swr_alloc_set_opts2()) before calling swr_init().
|
||||
*
|
||||
* @see swr_alloc_set_opts(), swr_init(), swr_free()
|
||||
* @see swr_alloc_set_opts2(), swr_init(), swr_free()
|
||||
* @return NULL on error, allocated context otherwise
|
||||
*/
|
||||
struct SwrContext *swr_alloc(void);
|
||||
|
@ -227,6 +234,7 @@ int swr_init(struct SwrContext *s);
|
|||
*/
|
||||
int swr_is_initialized(struct SwrContext *s);
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* Allocate SwrContext if needed and set/reset common parameters.
|
||||
*
|
||||
|
@ -246,12 +254,41 @@ int swr_is_initialized(struct SwrContext *s);
|
|||
*
|
||||
* @see swr_init(), swr_free()
|
||||
* @return NULL on error, allocated context otherwise
|
||||
* @deprecated use @ref swr_alloc_set_opts2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,
|
||||
int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,
|
||||
int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate,
|
||||
int log_offset, void *log_ctx);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Allocate SwrContext if needed and set/reset common parameters.
|
||||
*
|
||||
* This function does not require *ps to be allocated with swr_alloc(). On the
|
||||
* other hand, swr_alloc() can use swr_alloc_set_opts2() to set the parameters
|
||||
* on the allocated context.
|
||||
*
|
||||
* @param ps Pointer to an existing Swr context if available, or to NULL if not.
|
||||
* On success, *ps will be set to the allocated context.
|
||||
* @param out_ch_layout output channel layout (e.g. AV_CHANNEL_LAYOUT_*)
|
||||
* @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*).
|
||||
* @param out_sample_rate output sample rate (frequency in Hz)
|
||||
* @param in_ch_layout input channel layout (e.g. AV_CHANNEL_LAYOUT_*)
|
||||
* @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*).
|
||||
* @param in_sample_rate input sample rate (frequency in Hz)
|
||||
* @param log_offset logging level offset
|
||||
* @param log_ctx parent logging context, can be NULL
|
||||
*
|
||||
* @see swr_init(), swr_free()
|
||||
* @return 0 on success, a negative AVERROR code on error.
|
||||
* On error, the Swr context is freed and *ps set to NULL.
|
||||
*/
|
||||
int swr_alloc_set_opts2(struct SwrContext **ps,
|
||||
const AVChannelLayout *out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,
|
||||
const AVChannelLayout *in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate,
|
||||
int log_offset, void *log_ctx);
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
|
@ -317,8 +354,8 @@ int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,
|
|||
* in this case the output timestamps will match output sample numbers.
|
||||
* See ffmpeg-resampler(1) for the two modes of compensation.
|
||||
*
|
||||
* @param s[in] initialized Swr context
|
||||
* @param pts[in] timestamp for the next input sample, INT64_MIN if unknown
|
||||
* @param[in] s initialized Swr context
|
||||
* @param[in] pts timestamp for the next input sample, INT64_MIN if unknown
|
||||
* @see swr_set_compensation(), swr_drop_output(), and swr_inject_silence() are
|
||||
* function used internally for timestamp compensation.
|
||||
* @return the output timestamp for the next output sample
|
||||
|
@ -362,6 +399,40 @@ int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensatio
|
|||
*/
|
||||
int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map);
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* Generate a channel mixing matrix.
|
||||
*
|
||||
* This function is the one used internally by libswresample for building the
|
||||
* default mixing matrix. It is made public just as a utility function for
|
||||
* building custom matrices.
|
||||
*
|
||||
* @param in_layout input channel layout
|
||||
* @param out_layout output channel layout
|
||||
* @param center_mix_level mix level for the center channel
|
||||
* @param surround_mix_level mix level for the surround channel(s)
|
||||
* @param lfe_mix_level mix level for the low-frequency effects channel
|
||||
* @param rematrix_maxval if 1.0, coefficients will be normalized to prevent
|
||||
* overflow. if INT_MAX, coefficients will not be
|
||||
* normalized.
|
||||
* @param[out] matrix mixing coefficients; matrix[i + stride * o] is
|
||||
* the weight of input channel i in output channel o.
|
||||
* @param stride distance between adjacent input channels in the
|
||||
* matrix array
|
||||
* @param matrix_encoding matrixed stereo downmix mode (e.g. dplii)
|
||||
* @param log_ctx parent logging context, can be NULL
|
||||
* @return 0 on success, negative AVERROR code on failure
|
||||
* @deprecated use @ref swr_build_matrix2()
|
||||
*/
|
||||
attribute_deprecated
|
||||
int swr_build_matrix(uint64_t in_layout, uint64_t out_layout,
|
||||
double center_mix_level, double surround_mix_level,
|
||||
double lfe_mix_level, double rematrix_maxval,
|
||||
double rematrix_volume, double *matrix,
|
||||
int stride, enum AVMatrixEncoding matrix_encoding,
|
||||
void *log_ctx);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Generate a channel mixing matrix.
|
||||
*
|
||||
|
@ -385,12 +456,12 @@ int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map);
|
|||
* @param log_ctx parent logging context, can be NULL
|
||||
* @return 0 on success, negative AVERROR code on failure
|
||||
*/
|
||||
int swr_build_matrix(uint64_t in_layout, uint64_t out_layout,
|
||||
double center_mix_level, double surround_mix_level,
|
||||
double lfe_mix_level, double rematrix_maxval,
|
||||
double rematrix_volume, double *matrix,
|
||||
int stride, enum AVMatrixEncoding matrix_encoding,
|
||||
void *log_ctx);
|
||||
int swr_build_matrix2(const AVChannelLayout *in_layout, const AVChannelLayout *out_layout,
|
||||
double center_mix_level, double surround_mix_level,
|
||||
double lfe_mix_level, double maxval,
|
||||
double rematrix_volume, double *matrix,
|
||||
ptrdiff_t stride, enum AVMatrixEncoding matrix_encoding,
|
||||
void *log_context);
|
||||
|
||||
/**
|
||||
* Set a customized remix matrix.
|
||||
|
@ -565,8 +636,8 @@ int swr_convert_frame(SwrContext *swr,
|
|||
* @see swr_close();
|
||||
*
|
||||
* @param swr audio resample context
|
||||
* @param output output AVFrame
|
||||
* @param input input AVFrame
|
||||
* @param out output AVFrame
|
||||
* @param in input AVFrame
|
||||
* @return 0 on success, AVERROR on failure.
|
||||
*/
|
||||
int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in);
|
||||
|
|
|
@ -26,10 +26,11 @@
|
|||
* Libswresample version macros
|
||||
*/
|
||||
|
||||
#include "libavutil/avutil.h"
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBSWRESAMPLE_VERSION_MAJOR 3
|
||||
#define LIBSWRESAMPLE_VERSION_MINOR 9
|
||||
#include "version_major.h"
|
||||
|
||||
#define LIBSWRESAMPLE_VERSION_MINOR 10
|
||||
#define LIBSWRESAMPLE_VERSION_MICRO 100
|
||||
|
||||
#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Version macros.
|
||||
*
|
||||
* This file is part of libswresample
|
||||
*
|
||||
* libswresample 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.
|
||||
*
|
||||
* libswresample 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 libswresample; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef SWRESAMPLE_VERSION_MAJOR_H
|
||||
#define SWRESAMPLE_VERSION_MAJOR_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Libswresample version macros
|
||||
*/
|
||||
|
||||
#define LIBSWRESAMPLE_VERSION_MAJOR 4
|
||||
|
||||
#endif /* SWRESAMPLE_VERSION_MAJOR_H */
|
|
@ -30,9 +30,16 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/avutil.h"
|
||||
#include "libavutil/frame.h"
|
||||
#include "libavutil/log.h"
|
||||
#include "libavutil/pixfmt.h"
|
||||
#include "version_major.h"
|
||||
#ifndef HAVE_AV_CONFIG_H
|
||||
/* When included as part of the ffmpeg build, only include the major version
|
||||
* to avoid unnecessary rebuilds. When included externally, keep including
|
||||
* the full version information. */
|
||||
#include "version.h"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup libsws libswscale
|
||||
|
@ -219,6 +226,107 @@ int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
|
|||
uint8_t *const dst[], const int dstStride[]);
|
||||
|
||||
/**
|
||||
* Scale source data from src and write the output to dst.
|
||||
*
|
||||
* This is merely a convenience wrapper around
|
||||
* - sws_frame_start()
|
||||
* - sws_send_slice(0, src->height)
|
||||
* - sws_receive_slice(0, dst->height)
|
||||
* - sws_frame_end()
|
||||
*
|
||||
* @param c The scaling context
|
||||
* @param dst The destination frame. See documentation for sws_frame_start() for
|
||||
* more details.
|
||||
* @param src The source frame.
|
||||
*
|
||||
* @return 0 on success, a negative AVERROR code on failure
|
||||
*/
|
||||
int sws_scale_frame(struct SwsContext *c, AVFrame *dst, const AVFrame *src);
|
||||
|
||||
/**
|
||||
* Initialize the scaling process for a given pair of source/destination frames.
|
||||
* Must be called before any calls to sws_send_slice() and sws_receive_slice().
|
||||
*
|
||||
* This function will retain references to src and dst, so they must both use
|
||||
* refcounted buffers (if allocated by the caller, in case of dst).
|
||||
*
|
||||
* @param c The scaling context
|
||||
* @param dst The destination frame.
|
||||
*
|
||||
* The data buffers may either be already allocated by the caller or
|
||||
* left clear, in which case they will be allocated by the scaler.
|
||||
* The latter may have performance advantages - e.g. in certain cases
|
||||
* some output planes may be references to input planes, rather than
|
||||
* copies.
|
||||
*
|
||||
* Output data will be written into this frame in successful
|
||||
* sws_receive_slice() calls.
|
||||
* @param src The source frame. The data buffers must be allocated, but the
|
||||
* frame data does not have to be ready at this point. Data
|
||||
* availability is then signalled by sws_send_slice().
|
||||
* @return 0 on success, a negative AVERROR code on failure
|
||||
*
|
||||
* @see sws_frame_end()
|
||||
*/
|
||||
int sws_frame_start(struct SwsContext *c, AVFrame *dst, const AVFrame *src);
|
||||
|
||||
/**
|
||||
* Finish the scaling process for a pair of source/destination frames previously
|
||||
* submitted with sws_frame_start(). Must be called after all sws_send_slice()
|
||||
* and sws_receive_slice() calls are done, before any new sws_frame_start()
|
||||
* calls.
|
||||
*
|
||||
* @param c The scaling context
|
||||
*/
|
||||
void sws_frame_end(struct SwsContext *c);
|
||||
|
||||
/**
|
||||
* Indicate that a horizontal slice of input data is available in the source
|
||||
* frame previously provided to sws_frame_start(). The slices may be provided in
|
||||
* any order, but may not overlap. For vertically subsampled pixel formats, the
|
||||
* slices must be aligned according to subsampling.
|
||||
*
|
||||
* @param c The scaling context
|
||||
* @param slice_start first row of the slice
|
||||
* @param slice_height number of rows in the slice
|
||||
*
|
||||
* @return a non-negative number on success, a negative AVERROR code on failure.
|
||||
*/
|
||||
int sws_send_slice(struct SwsContext *c, unsigned int slice_start,
|
||||
unsigned int slice_height);
|
||||
|
||||
/**
|
||||
* Request a horizontal slice of the output data to be written into the frame
|
||||
* previously provided to sws_frame_start().
|
||||
*
|
||||
* @param c The scaling context
|
||||
* @param slice_start first row of the slice; must be a multiple of
|
||||
* sws_receive_slice_alignment()
|
||||
* @param slice_height number of rows in the slice; must be a multiple of
|
||||
* sws_receive_slice_alignment(), except for the last slice
|
||||
* (i.e. when slice_start+slice_height is equal to output
|
||||
* frame height)
|
||||
*
|
||||
* @return a non-negative number if the data was successfully written into the output
|
||||
* AVERROR(EAGAIN) if more input data needs to be provided before the
|
||||
* output can be produced
|
||||
* another negative AVERROR code on other kinds of scaling failure
|
||||
*/
|
||||
int sws_receive_slice(struct SwsContext *c, unsigned int slice_start,
|
||||
unsigned int slice_height);
|
||||
|
||||
/**
|
||||
* Get the alignment required for slices
|
||||
*
|
||||
* @param c The scaling context
|
||||
* @return alignment required for output slices requested with sws_receive_slice().
|
||||
* Slice offsets and sizes passed to sws_receive_slice() must be
|
||||
* multiples of the value returned from this function.
|
||||
*/
|
||||
unsigned int sws_receive_slice_alignment(const struct SwsContext *c);
|
||||
|
||||
/**
|
||||
* @param c the scaling context
|
||||
* @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg)
|
||||
* @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg)
|
||||
* @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x]
|
||||
|
@ -226,14 +334,17 @@ int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
|
|||
* @param brightness 16.16 fixed point brightness correction
|
||||
* @param contrast 16.16 fixed point contrast correction
|
||||
* @param saturation 16.16 fixed point saturation correction
|
||||
* @return -1 if not supported
|
||||
*
|
||||
* @return A negative error code on error, non negative otherwise.
|
||||
* If `LIBSWSCALE_VERSION_MAJOR < 7`, returns -1 if not supported.
|
||||
*/
|
||||
int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
|
||||
int srcRange, const int table[4], int dstRange,
|
||||
int brightness, int contrast, int saturation);
|
||||
|
||||
/**
|
||||
* @return -1 if not supported
|
||||
* @return A negative error code on error, non negative otherwise.
|
||||
* If `LIBSWSCALE_VERSION_MAJOR < 7`, returns -1 if not supported.
|
||||
*/
|
||||
int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table,
|
||||
int *srcRange, int **table, int *dstRange,
|
||||
|
@ -260,17 +371,6 @@ void sws_scaleVec(SwsVector *a, double scalar);
|
|||
*/
|
||||
void sws_normalizeVec(SwsVector *a, double height);
|
||||
|
||||
#if FF_API_SWS_VECTOR
|
||||
attribute_deprecated SwsVector *sws_getConstVec(double c, int length);
|
||||
attribute_deprecated SwsVector *sws_getIdentityVec(void);
|
||||
attribute_deprecated void sws_convVec(SwsVector *a, SwsVector *b);
|
||||
attribute_deprecated void sws_addVec(SwsVector *a, SwsVector *b);
|
||||
attribute_deprecated void sws_subVec(SwsVector *a, SwsVector *b);
|
||||
attribute_deprecated void sws_shiftVec(SwsVector *a, int shift);
|
||||
attribute_deprecated SwsVector *sws_cloneVec(SwsVector *a);
|
||||
attribute_deprecated void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level);
|
||||
#endif
|
||||
|
||||
void sws_freeVec(SwsVector *a);
|
||||
|
||||
SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
|
||||
|
|
|
@ -26,8 +26,9 @@
|
|||
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBSWSCALE_VERSION_MAJOR 5
|
||||
#define LIBSWSCALE_VERSION_MINOR 9
|
||||
#include "version_major.h"
|
||||
|
||||
#define LIBSWSCALE_VERSION_MINOR 1
|
||||
#define LIBSWSCALE_VERSION_MICRO 100
|
||||
|
||||
#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \
|
||||
|
@ -40,14 +41,4 @@
|
|||
|
||||
#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION)
|
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be
|
||||
* dropped at a future version bump. The defines themselves are not part of
|
||||
* the public API and may change, break or disappear at any time.
|
||||
*/
|
||||
|
||||
#ifndef FF_API_SWS_VECTOR
|
||||
#define FF_API_SWS_VECTOR (LIBSWSCALE_VERSION_MAJOR < 6)
|
||||
#endif
|
||||
|
||||
#endif /* SWSCALE_VERSION_H */
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* 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 SWSCALE_VERSION_MAJOR_H
|
||||
#define SWSCALE_VERSION_MAJOR_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* swscale version macros
|
||||
*/
|
||||
|
||||
#define LIBSWSCALE_VERSION_MAJOR 7
|
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be
|
||||
* dropped at a future version bump. The defines themselves are not part of
|
||||
* the public API and may change, break or disappear at any time.
|
||||
*/
|
||||
|
||||
#endif /* SWSCALE_VERSION_MAJOR_H */
|
Loading…
Reference in New Issue