deps: update vpx to 1.13.0

This commit is contained in:
alexey.lysiuk 2023-02-19 10:56:51 +02:00
parent d6c70c75c3
commit 9ce2ca7811
5 changed files with 184 additions and 11 deletions

View file

@ -757,6 +757,16 @@ enum vp8e_enc_control_id {
* Supported in codecs: VP8
*/
VP8E_SET_RTC_EXTERNAL_RATECTRL,
/*!\brief Codec control to set quantizer for the next frame.
*
* This will turn off cyclic refresh. Only applicable to 1-pass without
* spatial layers.
*
* Supported in codecs: VP9
*
*/
VP9E_SET_QUANTIZER_ONE_PASS,
};
/*!\brief vpx 1-D scaling mode
@ -1085,6 +1095,8 @@ VPX_CTRL_USE_TYPE(VP9E_GET_LAST_QUANTIZER_SVC_LAYERS, int *)
#define VPX_CTRL_VP9E_GET_LAST_QUANTIZER_SVC_LAYERS
VPX_CTRL_USE_TYPE(VP8E_SET_RTC_EXTERNAL_RATECTRL, int)
#define VPX_CTRL_VP8E_SET_RTC_EXTERNAL_RATECTRL
VPX_CTRL_USE_TYPE(VP9E_SET_QUANTIZER_ONE_PASS, int)
#define VPX_CTRL_VP9E_SET_QUANTIZER_ONE_PASS
/*!\endcond */
/*! @} - end defgroup vp8_encoder */

View file

@ -115,14 +115,14 @@ typedef int64_t vpx_codec_pts_t;
* support frame types that are codec specific (MPEG-1 D-frames for example)
*/
typedef uint32_t vpx_codec_frame_flags_t;
#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */
#define VPX_FRAME_IS_KEY 0x1u /**< frame is the start of a GOP */
/*!\brief frame can be dropped without affecting the stream (no future frame
* depends on this one) */
#define VPX_FRAME_IS_DROPPABLE 0x2
#define VPX_FRAME_IS_DROPPABLE 0x2u
/*!\brief frame should be decoded but will not be shown */
#define VPX_FRAME_IS_INVISIBLE 0x4
#define VPX_FRAME_IS_INVISIBLE 0x4u
/*!\brief this is a fragment of the encoded frame */
#define VPX_FRAME_IS_FRAGMENT 0x8
#define VPX_FRAME_IS_FRAGMENT 0x8u
/*!\brief Error Resilient flags
*
@ -132,12 +132,13 @@ typedef uint32_t vpx_codec_frame_flags_t;
*/
typedef uint32_t vpx_codec_er_flags_t;
/*!\brief Improve resiliency against losses of whole frames */
#define VPX_ERROR_RESILIENT_DEFAULT 0x1
#define VPX_ERROR_RESILIENT_DEFAULT 0x1u
/*!\brief The frame partitions are independently decodable by the bool decoder,
* meaning that partitions can be decoded even though earlier partitions have
* been lost. Note that intra prediction is still done over the partition
* boundary. */
#define VPX_ERROR_RESILIENT_PARTITIONS 0x2
* boundary.
* \note This is only supported by VP8.*/
#define VPX_ERROR_RESILIENT_PARTITIONS 0x2u
/*!\brief Encoder output packet variants
*

View file

@ -25,7 +25,27 @@ extern "C" {
* types, removing or reassigning enums, adding/removing/rearranging
* fields to structures.
*/
#define VPX_EXT_RATECTRL_ABI_VERSION (1)
#define VPX_EXT_RATECTRL_ABI_VERSION (6)
/*!\brief The control type of the inference API.
* In VPX_RC_QP mode, the external rate control model determines the
* quantization parameter (QP) for each frame.
* In VPX_RC_GOP mode, the external rate control model determines the
* group of picture (GOP) of the video sequence.
* In VPX_RC_RDMULT mode, the external rate control model determines the
* rate-distortion multiplier (rdmult) for the current frame.
* In VPX_RC_GOP_QP mode, the external rate control model determines
* both the QP and the GOP.
* In VPX_RC_GOP_QP_RDMULT mode, the external rate control model determines
* the QP, GOP and the rdmult.
*/
typedef enum vpx_rc_type {
VPX_RC_QP = 1 << 0,
VPX_RC_GOP = 1 << 1,
VPX_RC_RDMULT = 1 << 2,
VPX_RC_GOP_QP = VPX_RC_QP | VPX_RC_GOP,
VPX_RC_GOP_QP_RDMULT = VPX_RC_QP | VPX_RC_GOP | VPX_RC_RDMULT
} vpx_rc_type_t;
/*!\brief Abstract rate control model handler
*
@ -34,11 +54,27 @@ extern "C" {
*/
typedef void *vpx_rc_model_t;
/*!\brief A reserved value for the q index.
* If the external rate control model returns this value,
* the encoder will use the default q selected by libvpx's rate control
* system.
*/
#define VPX_DEFAULT_Q -1
/*!\brief A reserved value for the rdmult.
* If the external rate control model returns this value,
* the encoder will use the default rdmult selected by libvpx's rate control
* system.
*/
#define VPX_DEFAULT_RDMULT -1
/*!\brief Encode frame decision made by the external rate control model
*
* The encoder will receive the decision from the external rate control model
* through get_encodeframe_decision() defined in vpx_rc_funcs_t.
*
* If q_index = VPX_DEFAULT_Q, the encoder will use libvpx's default q.
*
* If max_frame_size = 0, the encoding ignores max frame size limit.
* If max_frame_size = -1, the encoding uses VP9's max frame size as the limit.
* If the encoded frame size is larger than max_frame_size, the frame is
@ -67,7 +103,7 @@ typedef struct vpx_rc_encodeframe_info {
int show_index; /**< display index, starts from zero*/
int coding_index; /**< coding index, starts from zero*/
/*!
* index in group of picture, starts from zero.
* index of the current frame in this group of picture, starts from zero.
*/
int gop_index;
int ref_frame_coding_indexes[3]; /**< three reference frames' coding indices*/
@ -77,6 +113,14 @@ typedef struct vpx_rc_encodeframe_info {
* 1: Valid
*/
int ref_frame_valid_list[3];
/*!
* The length of the current GOP.
*/
int gop_size;
/*!
* Whether the current GOP uses an alt ref.
*/
int use_alt_ref;
} vpx_rc_encodeframe_info_t;
/*!\brief Frame coding result
@ -258,6 +302,84 @@ typedef struct vpx_rc_config {
int frame_rate_den; /**< denominator of frame rate */
} vpx_rc_config_t;
/*!\brief Information passed to the external rate control model to
* help make GOP decisions.
*/
typedef struct vpx_rc_gop_info {
/*!
* Minimum allowed gf interval, fixed for the whole clip.
* Note that it will be modified to match vp9's level constraints
* in the encoder.
* The level constraint is defined in vp9_encoder.c:
* const Vp9LevelSpec vp9_level_defs[VP9_LEVELS].
*/
int min_gf_interval;
/*!
* Maximum allowed gf interval, fixed for the whole clip.
*/
int max_gf_interval;
/*!
* Minimum allowed gf interval for the current GOP, determined
* by the encoder.
*/
int active_min_gf_interval;
/*!
* Maximum allowed gf interval for the current GOP, determined
* by the encoder.
*/
int active_max_gf_interval;
/*!
* Whether to allow the use of alt ref, determined by the encoder.
* It is fixed for the entire encode.
* See function "is_altref_enabled" in vp9_encoder.h.
*/
int allow_alt_ref;
/*!
* Is the current frame a key frame.
*/
int is_key_frame;
/*!
* Does the previous gop use alt ref or not.
*/
int last_gop_use_alt_ref;
/*!
* Current frame distance to the last keyframe, e.g., if Nth frame is a key,
* then the value of the N+1 th frame is 1.
*/
int frames_since_key;
/*!
* Current frame distance to the next keyframe, e.g. if Nth frame is a key,
* then the value of frame N - 1 is 1.
*/
int frames_to_key;
/*!
* Number of lookahead source frames.
*/
int lag_in_frames;
/*!
* Display index (temporal stamp) of this frame in the whole clip,
* starts from zero.
*/
int show_index;
/*!
* Coding index of this frame in the whole clip, starts from zero.
*/
int coding_index;
/*!
* The index of the current gop, starts from zero, resets to zero
* when a keyframe is set.
*/
int gop_global_index;
} vpx_rc_gop_info_t;
/*!\brief The decision made by the external rate control model to set the
* group of picture.
*/
typedef struct vpx_rc_gop_decision {
int gop_coding_frames; /**< The number of frames of this GOP */
int use_alt_ref; /**< Whether to use alt ref for this GOP */
} vpx_rc_gop_decision_t;
/*!\brief Create an external rate control model callback prototype
*
* This callback is invoked by the encoder to create an external rate control
@ -310,6 +432,32 @@ typedef vpx_rc_status_t (*vpx_rc_update_encodeframe_result_cb_fn_t)(
vpx_rc_model_t rate_ctrl_model,
const vpx_rc_encodeframe_result_t *encode_frame_result);
/*!\brief Get the GOP structure from the external rate control model.
*
* This callback is invoked by the encoder to get GOP decisions from
* the external rate control model.
*
* \param[in] rate_ctrl_model rate control model
* \param[in] gop_info information collected from the encoder
* \param[out] gop_decision GOP decision from the model
*/
typedef vpx_rc_status_t (*vpx_rc_get_gop_decision_cb_fn_t)(
vpx_rc_model_t rate_ctrl_model, const vpx_rc_gop_info_t *gop_info,
vpx_rc_gop_decision_t *gop_decision);
/*!\brief Get the frame rdmult from the external rate control model.
*
* This callback is invoked by the encoder to get rdmult from
* the external rate control model.
*
* \param[in] rate_ctrl_model rate control model
* \param[in] frame_info information collected from the encoder
* \param[out] rdmult frame rate-distortion multiplier from the model
*/
typedef vpx_rc_status_t (*vpx_rc_get_frame_rdmult_cb_fn_t)(
vpx_rc_model_t rate_ctrl_model, const vpx_rc_encodeframe_info_t *frame_info,
int *rdmult);
/*!\brief Delete the external rate control model callback prototype
*
* This callback is invoked by the encoder to delete the external rate control
@ -327,6 +475,10 @@ typedef vpx_rc_status_t (*vpx_rc_delete_model_cb_fn_t)(
* VP9E_SET_EXTERNAL_RATE_CONTROL.
*/
typedef struct vpx_rc_funcs {
/*!
* The rate control type of this API.
*/
vpx_rc_type_t rc_type;
/*!
* Create an external rate control model.
*/
@ -343,6 +495,14 @@ typedef struct vpx_rc_funcs {
* Update encodeframe result to the external rate control model.
*/
vpx_rc_update_encodeframe_result_cb_fn_t update_encodeframe_result;
/*!
* Get GOP decisions from the external rate control model.
*/
vpx_rc_get_gop_decision_cb_fn_t get_gop_decision;
/*!
* Get rdmult for the frame from the external rate control model.
*/
vpx_rc_get_frame_rdmult_cb_fn_t get_frame_rdmult;
/*!
* Delete the external rate control model.
*/

BIN
deps/vpx/lib/libvpx.a vendored

Binary file not shown.

View file

@ -1,4 +1,4 @@
# pkg-config file from libvpx v1.12.0
# pkg-config file from libvpx v1.13.0
prefix=
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
@ -6,7 +6,7 @@ includedir=${prefix}/include
Name: vpx
Description: WebM Project VPx codec implementation
Version: 1.12.0
Version: 1.13.0
Requires:
Conflicts:
Libs: -L${libdir} -lvpx -lm