[FFmpeg-cvslog] avcodec/eatgq: Don't use IDCTDSP-API unnecessarily

Andreas Rheinhardt git at videolan.org
Mon Oct 24 02:41:08 EEST 2022


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Thu Oct 20 05:27:41 2022 +0200| [a8f34f0877e348eef4e84a8466b413c6d438b14b] | committer: Andreas Rheinhardt

avcodec/eatgq: Don't use IDCTDSP-API unnecessarily

The eatgq decoder uses a custom IDCT and actually does not
use the IDCTDSP API at all. Somehow it was nevertheless
used to simply apply the identity permutation on ff_zigzag_direct.
This commit stops doing so. It also renames perm to scantable,
because it is only the scantable as given by the spec without
any further permutation performed by us.

Reviewed-by: Peter Ross <pross at xvid.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a8f34f0877e348eef4e84a8466b413c6d438b14b
---

 configure          |  2 +-
 libavcodec/eatgq.c | 21 ++++++++-------------
 2 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/configure b/configure
index 16b2084945..84d7be8bfe 100755
--- a/configure
+++ b/configure
@@ -2821,7 +2821,7 @@ dxv_decoder_select="lzf texturedsp"
 eac3_decoder_select="ac3_decoder"
 eac3_encoder_select="ac3_encoder"
 eamad_decoder_select="aandcttables blockdsp bswapdsp"
-eatgq_decoder_select="aandcttables idctdsp"
+eatgq_decoder_select="aandcttables"
 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
 exr_decoder_deps="zlib"
 exr_encoder_deps="zlib"
diff --git a/libavcodec/eatgq.c b/libavcodec/eatgq.c
index a6c3e72f85..627615b4e8 100644
--- a/libavcodec/eatgq.c
+++ b/libavcodec/eatgq.c
@@ -39,12 +39,10 @@
 #include "decode.h"
 #include "eaidct.h"
 #include "get_bits.h"
-#include "idctdsp.h"
 
 typedef struct TgqContext {
     AVCodecContext *avctx;
     int width, height;
-    ScanTable scantable;
     int qtable[64];
     DECLARE_ALIGNED(16, int16_t, block)[6][64];
     GetByteContext gb;
@@ -53,10 +51,7 @@ typedef struct TgqContext {
 static av_cold int tgq_decode_init(AVCodecContext *avctx)
 {
     TgqContext *s = avctx->priv_data;
-    uint8_t idct_permutation[64];
     s->avctx = avctx;
-    ff_init_scantable_permutation(idct_permutation, FF_IDCT_PERM_NONE);
-    ff_init_scantable(idct_permutation, &s->scantable, ff_zigzag_direct);
     avctx->framerate = (AVRational){ 15, 1 };
     avctx->pix_fmt   = AV_PIX_FMT_YUV420P;
     return 0;
@@ -64,15 +59,15 @@ static av_cold int tgq_decode_init(AVCodecContext *avctx)
 
 static void tgq_decode_block(TgqContext *s, int16_t block[64], GetBitContext *gb)
 {
-    uint8_t *perm = s->scantable.permutated;
+    const uint8_t *scantable = ff_zigzag_direct;
     int i, j, value;
     block[0] = get_sbits(gb, 8) * s->qtable[0];
     for (i = 1; i < 64;) {
         switch (show_bits(gb, 3)) {
         case 4:
-            block[perm[i++]] = 0;
+            block[scantable[i++]] = 0;
         case 0:
-            block[perm[i++]] = 0;
+            block[scantable[i++]] = 0;
             skip_bits(gb, 3);
             break;
         case 5:
@@ -80,16 +75,16 @@ static void tgq_decode_block(TgqContext *s, int16_t block[64], GetBitContext *gb
             skip_bits(gb, 2);
             value = get_bits(gb, 6);
             for (j = 0; j < value; j++)
-                block[perm[i++]] = 0;
+                block[scantable[i++]] = 0;
             break;
         case 6:
             skip_bits(gb, 3);
-            block[perm[i]] = -s->qtable[perm[i]];
+            block[scantable[i]] = -s->qtable[scantable[i]];
             i++;
             break;
         case 2:
             skip_bits(gb, 3);
-            block[perm[i]] = s->qtable[perm[i]];
+            block[scantable[i]] = s->qtable[scantable[i]];
             i++;
             break;
         case 7: // 111b
@@ -97,9 +92,9 @@ static void tgq_decode_block(TgqContext *s, int16_t block[64], GetBitContext *gb
             skip_bits(gb, 2);
             if (show_bits(gb, 6) == 0x3F) {
                 skip_bits(gb, 6);
-                block[perm[i]] = get_sbits(gb, 8) * s->qtable[perm[i]];
+                block[scantable[i]] = get_sbits(gb, 8) * s->qtable[scantable[i]];
             } else {
-                block[perm[i]] = get_sbits(gb, 6) * s->qtable[perm[i]];
+                block[scantable[i]] = get_sbits(gb, 6) * s->qtable[scantable[i]];
             }
             i++;
             break;



More information about the ffmpeg-cvslog mailing list