diff mbox series

[FFmpeg-devel] avcodec/dnxhd: Make ff_dxnhd_get_cid_table return a pointer, not index

Message ID 20210122215116.520936-1-andreas.rheinhardt@gmail.com
State Accepted
Commit 10d059bb24eb88157e071a3db102ddd8f4937a00
Headers show
Series [FFmpeg-devel] avcodec/dnxhd: Make ff_dxnhd_get_cid_table return a pointer, not index
Related show

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

Andreas Rheinhardt Jan. 22, 2021, 9:51 p.m. UTC
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@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(-)

Comments

Andreas Rheinhardt Jan. 25, 2021, 9:11 a.m. UTC | #1
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@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
diff mbox series

Patch

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;