[FFmpeg-devel] [PATCH] avcodec/dnxhd: Make ff_dxnhd_get_cid_table return a pointer, not index
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Mon Jan 25 11:11:16 EET 2021
Andreas Rheinhardt:
> All callers only use the index into ff_dnxhd_cid_table to get a pointer
> to the desired entry.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> libavcodec/dnxhddata.c | 46 +++++++++++++++++++++---------------------
> libavcodec/dnxhddata.h | 4 +---
> libavcodec/dnxhddec.c | 13 ++++++------
> libavcodec/dnxhdenc.c | 8 +++-----
> 4 files changed, 34 insertions(+), 37 deletions(-)
>
> diff --git a/libavcodec/dnxhddata.c b/libavcodec/dnxhddata.c
> index 154be89860..3a69a0f501 100644
> --- a/libavcodec/dnxhddata.c
> +++ b/libavcodec/dnxhddata.c
> @@ -932,7 +932,7 @@ static const uint8_t dnxhd_1250_run[62] = {
> 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
> };
>
> -const CIDEntry ff_dnxhd_cid_table[] = {
> +static const CIDEntry dnxhd_cid_table[] = {
> { 1235, 1920, 1080, 917504, 917504,
> 0, 6, 10, 4,
> dnxhd_1235_luma_weight, dnxhd_1235_chroma_weight,
> @@ -1075,31 +1075,31 @@ const CIDEntry ff_dnxhd_cid_table[] = {
> { 0 }, { 5888, 255} },
> };
>
> -int ff_dnxhd_get_cid_table(int cid)
> +const CIDEntry *ff_dnxhd_get_cid_table(int cid)
> {
> - int i;
> - for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++)
> - if (ff_dnxhd_cid_table[i].cid == cid)
> - return i;
> - return -1;
> + for (int i = 0; i < FF_ARRAY_ELEMS(dnxhd_cid_table); i++)
> + if (dnxhd_cid_table[i].cid == cid)
> + return &dnxhd_cid_table[i];
> + return NULL;
> }
>
> int avpriv_dnxhd_get_frame_size(int cid)
> {
> - int i = ff_dnxhd_get_cid_table(cid);
> - if (i<0)
> - return i;
> - return ff_dnxhd_cid_table[i].frame_size;
> + const CIDEntry *entry = ff_dnxhd_get_cid_table(cid);
> + if (!entry)
> + return -1;
> + return entry->frame_size;
> }
>
> int avpriv_dnxhd_get_hr_frame_size(int cid, int w, int h)
> {
> - int result, i = ff_dnxhd_get_cid_table(cid);
> + const CIDEntry *entry = ff_dnxhd_get_cid_table(cid);
> + int result;
>
> - if (i < 0)
> - return i;
> + if (!entry)
> + return -1;
>
> - result = ((h + 15) / 16) * ((w + 15) / 16) * (int64_t)ff_dnxhd_cid_table[i].packet_scale.num / ff_dnxhd_cid_table[i].packet_scale.den;
> + result = ((h + 15) / 16) * ((w + 15) / 16) * (int64_t)entry->packet_scale.num / entry->packet_scale.den;
> result = (result + 2048) / 4096 * 4096;
>
> return FFMAX(result, 8192);
> @@ -1107,10 +1107,10 @@ int avpriv_dnxhd_get_hr_frame_size(int cid, int w, int h)
>
> int avpriv_dnxhd_get_interlaced(int cid)
> {
> - int i = ff_dnxhd_get_cid_table(cid);
> - if (i < 0)
> - return i;
> - return ff_dnxhd_cid_table[i].flags & DNXHD_INTERLACED ? 1 : 0;
> + const CIDEntry *entry = ff_dnxhd_get_cid_table(cid);
> + if (!entry)
> + return -1;
> + return entry->flags & DNXHD_INTERLACED ? 1 : 0;
> }
>
> static int dnxhd_find_hr_cid(AVCodecContext *avctx)
> @@ -1140,8 +1140,8 @@ int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth)
>
> if (!mbs)
> return 0;
> - for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
> - const CIDEntry *cid = &ff_dnxhd_cid_table[i];
> + for (i = 0; i < FF_ARRAY_ELEMS(dnxhd_cid_table); i++) {
> + const CIDEntry *cid = &dnxhd_cid_table[i];
> int interlaced = cid->flags & DNXHD_INTERLACED ? 1 : 0;
> if (cid->width == avctx->width && cid->height == avctx->height &&
> interlaced == !!(avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) &&
> @@ -1163,8 +1163,8 @@ int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth)
> void ff_dnxhd_print_profiles(AVCodecContext *avctx, int loglevel)
> {
> int i, j;
> - for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
> - const CIDEntry *cid = &ff_dnxhd_cid_table[i];
> + for (i = 0; i < FF_ARRAY_ELEMS(dnxhd_cid_table); i++) {
> + const CIDEntry *cid = &dnxhd_cid_table[i];
> for (j = 0; j < FF_ARRAY_ELEMS(cid->bit_rates); j++) {
> if (!cid->bit_rates[j])
> break;
> diff --git a/libavcodec/dnxhddata.h b/libavcodec/dnxhddata.h
> index cfa6b0c99d..898079cffc 100644
> --- a/libavcodec/dnxhddata.h
> +++ b/libavcodec/dnxhddata.h
> @@ -58,9 +58,7 @@ typedef struct CIDEntry {
> AVRational packet_scale;
> } CIDEntry;
>
> -extern const CIDEntry ff_dnxhd_cid_table[];
> -
> -int ff_dnxhd_get_cid_table(int cid);
> +const CIDEntry *ff_dnxhd_get_cid_table(int cid);
> int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth);
> void ff_dnxhd_print_profiles(AVCodecContext *avctx, int loglevel);
>
> diff --git a/libavcodec/dnxhddec.c b/libavcodec/dnxhddec.c
> index 09bc6f9b59..c78d55aee5 100644
> --- a/libavcodec/dnxhddec.c
> +++ b/libavcodec/dnxhddec.c
> @@ -113,18 +113,19 @@ static av_cold int dnxhd_decode_init(AVCodecContext *avctx)
> static int dnxhd_init_vlc(DNXHDContext *ctx, uint32_t cid, int bitdepth)
> {
> if (cid != ctx->cid) {
> - int index;
> + const CIDEntry *cid_table = ff_dnxhd_get_cid_table(cid);
>
> - if ((index = ff_dnxhd_get_cid_table(cid)) < 0) {
> + if (!cid_table) {
> av_log(ctx->avctx, AV_LOG_ERROR, "unsupported cid %"PRIu32"\n", cid);
> return AVERROR(ENOSYS);
> }
> - if (ff_dnxhd_cid_table[index].bit_depth != bitdepth &&
> - ff_dnxhd_cid_table[index].bit_depth != DNXHD_VARIABLE) {
> - av_log(ctx->avctx, AV_LOG_ERROR, "bit depth mismatches %d %d\n", ff_dnxhd_cid_table[index].bit_depth, bitdepth);
> + if (cid_table->bit_depth != bitdepth &&
> + cid_table->bit_depth != DNXHD_VARIABLE) {
> + av_log(ctx->avctx, AV_LOG_ERROR, "bit depth mismatches %d %d\n",
> + cid_table->bit_depth, bitdepth);
> return AVERROR_INVALIDDATA;
> }
> - ctx->cid_table = &ff_dnxhd_cid_table[index];
> + ctx->cid_table = cid_table;
> av_log(ctx->avctx, AV_LOG_VERBOSE, "Profile cid %"PRIu32".\n", cid);
>
> ff_free_vlc(&ctx->ac_vlc);
> diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
> index 0144797d1b..2461c51727 100644
> --- a/libavcodec/dnxhdenc.c
> +++ b/libavcodec/dnxhdenc.c
> @@ -351,7 +351,7 @@ static av_cold int dnxhd_init_rc(DNXHDEncContext *ctx)
> static av_cold int dnxhd_encode_init(AVCodecContext *avctx)
> {
> DNXHDEncContext *ctx = avctx->priv_data;
> - int i, index, ret;
> + int i, ret;
>
> switch (avctx->pix_fmt) {
> case AV_PIX_FMT_YUV422P:
> @@ -411,10 +411,8 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx)
> return AVERROR(EINVAL);
> }
>
> - index = ff_dnxhd_get_cid_table(ctx->cid);
> - av_assert0(index >= 0);
> -
> - ctx->cid_table = &ff_dnxhd_cid_table[index];
> + ctx->cid_table = ff_dnxhd_get_cid_table(ctx->cid);
> + av_assert0(ctx->cid_table);
>
> ctx->m.avctx = avctx;
> ctx->m.mb_intra = 1;
>
Will apply this tomorrow unless there are objections.
- Andreas
More information about the ffmpeg-devel
mailing list