1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

avcodec/libaomenc: Get number of operating points

Use the new codec control AV1E_GET_NUM_OPERATING_POINTS to get the
number of operating points. This is the size of the output arrays of
AV1E_GET_SEQ_LEVEL_IDX and AV1E_GET_TARGET_SEQ_LEVEL_IDX.

Signed-off-by: Wan-Teh Chang <wtc@google.com>
Signed-off-by: James Zern <jzern@google.com>
This commit is contained in:
Wan-Teh Chang
2022-06-16 09:24:22 -07:00
committed by James Zern
parent 5a4ffb4f5e
commit 38bc24be8d

View File

@@ -199,6 +199,9 @@ static const char *const ctlidstr[] = {
[AV1E_SET_ENABLE_SMOOTH_INTERINTRA] = "AV1E_SET_ENABLE_SMOOTH_INTERINTRA", [AV1E_SET_ENABLE_SMOOTH_INTERINTRA] = "AV1E_SET_ENABLE_SMOOTH_INTERINTRA",
[AV1E_SET_ENABLE_REF_FRAME_MVS] = "AV1E_SET_ENABLE_REF_FRAME_MVS", [AV1E_SET_ENABLE_REF_FRAME_MVS] = "AV1E_SET_ENABLE_REF_FRAME_MVS",
#endif #endif
#ifdef AOM_CTRL_AV1E_GET_NUM_OPERATING_POINTS
[AV1E_GET_NUM_OPERATING_POINTS] = "AV1E_GET_NUM_OPERATING_POINTS",
#endif
#ifdef AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX #ifdef AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX
[AV1E_GET_SEQ_LEVEL_IDX] = "AV1E_GET_SEQ_LEVEL_IDX", [AV1E_GET_SEQ_LEVEL_IDX] = "AV1E_GET_SEQ_LEVEL_IDX",
#endif #endif
@@ -330,7 +333,8 @@ static av_cold int codecctl_int(AVCodecContext *avctx,
return 0; return 0;
} }
#if defined(AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX) && \ #if defined(AOM_CTRL_AV1E_GET_NUM_OPERATING_POINTS) && \
defined(AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX) && \
defined(AOM_CTRL_AV1E_GET_TARGET_SEQ_LEVEL_IDX) defined(AOM_CTRL_AV1E_GET_TARGET_SEQ_LEVEL_IDX)
static av_cold int codecctl_intp(AVCodecContext *avctx, static av_cold int codecctl_intp(AVCodecContext *avctx,
#ifdef UENUM1BYTE #ifdef UENUM1BYTE
@@ -364,16 +368,20 @@ static av_cold int aom_free(AVCodecContext *avctx)
{ {
AOMContext *ctx = avctx->priv_data; AOMContext *ctx = avctx->priv_data;
#if defined(AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX) && \ #if defined(AOM_CTRL_AV1E_GET_NUM_OPERATING_POINTS) && \
defined(AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX) && \
defined(AOM_CTRL_AV1E_GET_TARGET_SEQ_LEVEL_IDX) defined(AOM_CTRL_AV1E_GET_TARGET_SEQ_LEVEL_IDX)
if (!(avctx->flags & AV_CODEC_FLAG_PASS1)) { if (!(avctx->flags & AV_CODEC_FLAG_PASS1)) {
int levels[32] = { 0 }; int num_operating_points;
int target_levels[32] = { 0 }; int levels[32];
int target_levels[32];
if (!codecctl_intp(avctx, AV1E_GET_SEQ_LEVEL_IDX, levels) && if (!codecctl_intp(avctx, AV1E_GET_NUM_OPERATING_POINTS,
&num_operating_points) &&
!codecctl_intp(avctx, AV1E_GET_SEQ_LEVEL_IDX, levels) &&
!codecctl_intp(avctx, AV1E_GET_TARGET_SEQ_LEVEL_IDX, !codecctl_intp(avctx, AV1E_GET_TARGET_SEQ_LEVEL_IDX,
target_levels)) { target_levels)) {
for (int i = 0; i < 32; i++) { for (int i = 0; i < num_operating_points; i++) {
if (levels[i] > target_levels[i]) { if (levels[i] > target_levels[i]) {
// Warn when the target level was not met // Warn when the target level was not met
av_log(avctx, AV_LOG_WARNING, av_log(avctx, AV_LOG_WARNING,