Merge commit '65f14128c4bcf8fcd9d3ba1e20b7a22057c9cfb0'
[ffmpeg.git] / libavcodec / intrax8.c
index f5bf795..2b37658 100644 (file)
@@ -1,18 +1,18 @@
 /*
- * This file is part of Libav.
+ * This file is part of FFmpeg.
  *
- * Libav is free software; you can redistribute it and/or
+ * FFmpeg is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
  *
- * Libav is distributed in the hope that it will be useful,
+ * FFmpeg is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with Libav; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
@@ -21,6 +21,7 @@
  * @brief IntraX8 (J-Frame) subdecoder, used by WMV2 and VC-1
  */
 
+#include "libavutil/avassert.h"
 #include "avcodec.h"
 #include "get_bits.h"
 #include "idctdsp.h"
@@ -135,7 +136,7 @@ static inline void x8_select_ac_table(IntraX8Context *const w, int mode)
     MpegEncContext *const s = w->s;
     int table_index;
 
-    assert(mode < 4);
+    av_assert2(mode < 4);
 
     if (w->j_ac_vlc[mode])
         return;
@@ -143,8 +144,7 @@ static inline void x8_select_ac_table(IntraX8Context *const w, int mode)
     table_index       = get_bits(&s->gb, 3);
     // 2 modes use same tables
     w->j_ac_vlc[mode] = &j_ac_vlc[w->quant < 13][mode >> 1][table_index];
-
-    assert(w->j_ac_vlc[mode]);
+    av_assert2(w->j_ac_vlc[mode]);
 }
 
 static inline int x8_get_orient_vlc(IntraX8Context *w)
@@ -155,8 +155,6 @@ static inline int x8_get_orient_vlc(IntraX8Context *w)
         int table_index = get_bits(&s->gb, 1 + (w->quant < 13));
         w->j_orient_vlc = &j_orient_vlc[w->quant < 13][table_index];
     }
-    assert(w->j_orient_vlc);
-    assert(w->j_orient_vlc->table);
 
     return get_vlc2(&s->gb, w->j_orient_vlc->table, OR_VLC_BITS, OR_VLC_MTD);
 }
@@ -295,14 +293,12 @@ static int x8_get_dc_rlf(IntraX8Context *const w, const int mode,
     MpegEncContext *const s = w->s;
     int i, e, c;
 
-    assert(mode < 3);
+    av_assert2(mode < 3);
     if (!w->j_dc_vlc[mode]) {
         int table_index = get_bits(&s->gb, 3);
         // 4 modes, same table
         w->j_dc_vlc[mode] = &j_dc_vlc[w->quant < 13][table_index];
     }
-    assert(w->j_dc_vlc);
-    assert(w->j_dc_vlc[mode]->table);
 
     i = get_vlc2(&s->gb, w->j_dc_vlc[mode]->table, DC_VLC_BITS, DC_VLC_MTD);
 
@@ -359,7 +355,7 @@ static int x8_setup_spatial_predictor(IntraX8Context *const w, const int chroma)
     if (chroma)
         return 0;
 
-    assert(w->orient < 3);
+    av_assert2(w->orient < 3);
     if (range < 2 * w->quant) {
         if ((w->edges & 3) == 0) {
             if (w->orient == 1)
@@ -379,9 +375,9 @@ static int x8_setup_spatial_predictor(IntraX8Context *const w, const int chroma)
         w->raw_orient = x8_get_orient_vlc(w);
         if (w->raw_orient < 0)
             return -1;
-        assert(w->raw_orient < 12);
-        assert(w->orient < 3);
-        w->orient = prediction_table[w->orient][w->raw_orient];
+        av_assert2(w->raw_orient < 12);
+        av_assert2(w->orient < 3);
+        w->orient=prediction_table[w->orient][w->raw_orient];
     }
     return 0;
 }
@@ -491,7 +487,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction,
 {
     MpegEncContext *const s = w->s;
     int t;
-#define B(x, y) s->block[0][w->idsp.idct_permutation[(x) + (y) * 8]]
+#define B(x,y)  s->block[0][w->idct_permutation[(x) + (y) * 8]]
 #define T(x)  ((x) * dc_level + 0x8000) >> 16;
     switch (direction) {
     case 0:
@@ -591,7 +587,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
     int use_quant_matrix;
     int sign;
 
-    assert(w->orient < 12);
+    av_assert2(w->orient < 12);
     s->bdsp.clear_block(s->block[0]);
 
     if (chroma)
@@ -703,7 +699,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
                                                w->frame->linesize[!!chroma]);
     }
     if (!zeros_only)
-        w->idsp.idct_add(w->dest[chroma],
+        w->wdsp.idct_add(w->dest[chroma],
                          w->frame->linesize[!!chroma],
                          s->block[0]);
 
@@ -752,16 +748,21 @@ av_cold int ff_intrax8_common_init(IntraX8Context *w, IDCTDSPContext *idsp,
     w->idsp = *idsp;
     w->s = s;
 
-    // two rows, 2 blocks per cannon mb
+    //two rows, 2 blocks per cannon mb
     w->prediction_table = av_mallocz(s->mb_width * 2 * 2);
     if (!w->prediction_table)
         return AVERROR(ENOMEM);
 
-    ff_init_scantable(w->idsp.idct_permutation, &w->scantable[0],
+    ff_wmv2dsp_init(&w->wdsp);
+
+    ff_init_scantable_permutation(w->idct_permutation,
+                                  w->wdsp.idct_perm);
+
+    ff_init_scantable(w->idct_permutation, &w->scantable[0],
                       ff_wmv1_scantable[0]);
-    ff_init_scantable(w->idsp.idct_permutation, &w->scantable[1],
+    ff_init_scantable(w->idct_permutation, &w->scantable[1],
                       ff_wmv1_scantable[2]);
-    ff_init_scantable(w->idsp.idct_permutation, &w->scantable[2],
+    ff_init_scantable(w->idct_permutation, &w->scantable[2],
                       ff_wmv1_scantable[3]);
 
     ff_intrax8dsp_init(&w->dsp);
@@ -779,7 +780,6 @@ int ff_intrax8_decode_picture(IntraX8Context *const w, Picture *pict,
 {
     MpegEncContext *const s = w->s;
     int mb_xy;
-    assert(s);
     w->use_quant_matrix = get_bits1(&s->gb);
 
     w->dquant = dquant;