[FFmpeg-cvslog] avcodec/ituh263dec: Simplify AIC handling

Andreas Rheinhardt git at videolan.org
Sat Jun 21 23:20:57 EEST 2025


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Sun May 25 20:17:39 2025 +0200| [950137a7c82ab73643942f9b41b6cef3aead8a1b] | committer: Andreas Rheinhardt

avcodec/ituh263dec: Simplify AIC handling

Possible by using block_index.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

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

 libavcodec/ituh263dec.c | 35 +++++++++++++----------------------
 1 file changed, 13 insertions(+), 22 deletions(-)

diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c
index 896556edfb..809bfcf564 100644
--- a/libavcodec/ituh263dec.c
+++ b/libavcodec/ituh263dec.c
@@ -448,34 +448,25 @@ static void h263_decode_dquant(MpegEncContext *s){
 
 static void h263_pred_acdc(MpegEncContext * s, int16_t *block, int n)
 {
-    int x, y, wrap, a, c, pred_dc, scale;
-    int16_t *dc_val, *ac_val, *ac_val1;
+    int wrap, a, c, pred_dc, scale;
+    const int xy = s->block_index[n];
+    int16_t *const dc_val =  s->dc_val[0] + xy;
+    int16_t *const ac_val = (s->ac_val[0] + xy)[0];
 
     /* find prediction */
     if (n < 4) {
-        x = 2 * s->mb_x + (n & 1);
-        y = 2 * s->mb_y + (n>> 1);
         wrap = s->b8_stride;
-        dc_val = s->dc_val[0];
-        ac_val = s->ac_val[0][0];
         scale = s->y_dc_scale;
     } else {
-        x = s->mb_x;
-        y = s->mb_y;
         wrap = s->mb_stride;
-        dc_val = s->dc_val[n - 4 + 1];
-        ac_val = s->ac_val[n - 4 + 1][0];
         scale = s->c_dc_scale;
     }
 
-    ac_val += ((y) * wrap + (x)) * 16;
-    ac_val1 = ac_val;
-
     /* B C
      * A X
      */
-    a = dc_val[(x - 1) + (y) * wrap];
-    c = dc_val[(x) + (y - 1) * wrap];
+    a = dc_val[-1];
+    c = dc_val[-wrap];
 
     /* No prediction outside GOB boundary */
     if (s->first_slice_line && n != 3) {
@@ -488,18 +479,18 @@ static void h263_pred_acdc(MpegEncContext * s, int16_t *block, int n)
         if (s->h263_aic_dir) {
             /* left prediction */
             if (a != 1024) {
-                ac_val -= 16;
+                int16_t *const ac_val2 = ac_val - 16;
                 for (int i = 1; i < 8; i++) {
-                    block[s->idsp.idct_permutation[i << 3]] += ac_val[i];
+                    block[s->idsp.idct_permutation[i << 3]] += ac_val2[i];
                 }
                 pred_dc = a;
             }
         } else {
             /* top prediction */
             if (c != 1024) {
-                ac_val -= 16 * wrap;
+                int16_t *const ac_val2 = ac_val - 16 * wrap;
                 for (int i = 1; i < 8; i++) {
-                    block[s->idsp.idct_permutation[i]] += ac_val[i + 8];
+                    block[s->idsp.idct_permutation[i]] += ac_val2[i + 8];
                 }
                 pred_dc = c;
             }
@@ -523,14 +514,14 @@ static void h263_pred_acdc(MpegEncContext * s, int16_t *block, int n)
         block[0] |= 1;
 
     /* Update AC/DC tables */
-    dc_val[(x) + (y) * wrap] = block[0];
+    *dc_val = block[0];
 
     /* left copy */
     for (int i = 1; i < 8; i++)
-        ac_val1[i]     = block[s->idsp.idct_permutation[i << 3]];
+        ac_val[i]     = block[s->idsp.idct_permutation[i << 3]];
     /* top copy */
     for (int i = 1; i < 8; i++)
-        ac_val1[8 + i] = block[s->idsp.idct_permutation[i]];
+        ac_val[8 + i] = block[s->idsp.idct_permutation[i]];
 }
 
 static int h263_decode_block(MpegEncContext * s, int16_t * block,



More information about the ffmpeg-cvslog mailing list