[FFmpeg-cvslog] diractab: expose the maximum quantization index as a macro

Rostislav Pehlivanov git at videolan.org
Tue Jul 12 00:45:36 CEST 2016


ffmpeg | branch: master | Rostislav Pehlivanov <rpehlivanov at ob-encoder.com> | Thu Jun 23 18:06:59 2016 +0100| [09d89d940635e34b0f61266d66fbb9802b18564c] | committer: Rostislav Pehlivanov

diractab: expose the maximum quantization index as a macro

Prevents having to have random magic values in the decoder and a
separate macro in the encoder.

Signed-off-by: Rostislav Pehlivanov <rpehlivanov at obe.tv>

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

 libavcodec/diracdec.c |    8 ++++----
 libavcodec/diractab.h |    2 ++
 libavcodec/vc2enc.c   |    9 +++------
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c
index c5d00b9..ad33809 100644
--- a/libavcodec/diracdec.c
+++ b/libavcodec/diracdec.c
@@ -486,7 +486,7 @@ static inline void codeblock(DiracContext *s, SubBand *b,
         b->quant = quant;
     }
 
-    if (b->quant > 115) {
+    if (b->quant > DIRAC_MAX_QUANT_INDEX) {
         av_log(s->avctx, AV_LOG_ERROR, "Unsupported quant %d\n", b->quant);
         b->quant = 0;
         return;
@@ -676,12 +676,12 @@ static void decode_subband(DiracContext *s, GetBitContext *gb, int quant,
     uint8_t *buf2 = b2 ? b2->ibuf + top * b2->stride: NULL;
     int x, y;
 
-    if (quant > 115) {
+    if (quant > DIRAC_MAX_QUANT_INDEX) {
         av_log(s->avctx, AV_LOG_ERROR, "Unsupported quant %d\n", quant);
         return;
     }
-    qfactor = ff_dirac_qscale_tab[quant & 0x7f];
-    qoffset = ff_dirac_qoffset_intra_tab[quant & 0x7f] + 2;
+    qfactor = ff_dirac_qscale_tab[quant];
+    qoffset = ff_dirac_qoffset_intra_tab[quant] + 2;
     /* we have to constantly check for overread since the spec explicitly
        requires this, with the meaning that all remaining coeffs are set to 0 */
     if (get_bits_count(gb) >= bits_end)
diff --git a/libavcodec/diractab.h b/libavcodec/diractab.h
index cd8b8ac..2423b07 100644
--- a/libavcodec/diractab.h
+++ b/libavcodec/diractab.h
@@ -38,4 +38,6 @@ extern const int32_t ff_dirac_qoffset_intra_tab[120];
 /* Scaling offsets needed for quantization/dequantization, for inter frames */
 extern const int ff_dirac_qoffset_inter_tab[122];
 
+#define DIRAC_MAX_QUANT_INDEX (FF_ARRAY_ELEMS(ff_dirac_qscale_tab))
+
 #endif /* AVCODEC_DIRACTAB_H */
diff --git a/libavcodec/vc2enc.c b/libavcodec/vc2enc.c
index bbbeaa0..eda3901 100644
--- a/libavcodec/vc2enc.c
+++ b/libavcodec/vc2enc.c
@@ -29,11 +29,8 @@
 #include "vc2enc_dwt.h"
 #include "diractab.h"
 
-/* Quantizations above this usually zero coefficients and lower the quality */
-#define MAX_QUANT_INDEX FF_ARRAY_ELEMS(ff_dirac_qscale_tab)
-
 /* Total range is -COEF_LUT_TAB to +COEFF_LUT_TAB, but total tab size is half
- * (COEF_LUT_TAB*MAX_QUANT_INDEX) since the sign is appended during encoding */
+ * (COEF_LUT_TAB*DIRAC_MAX_QUANT_INDEX), as the sign is appended during encoding */
 #define COEF_LUT_TAB 2048
 
 /* The limited size resolution of each slice forces us to do this */
@@ -109,7 +106,7 @@ typedef struct Plane {
 
 typedef struct SliceArgs {
     PutBitContext pb;
-    int cache[MAX_QUANT_INDEX];
+    int cache[DIRAC_MAX_QUANT_INDEX];
     void *ctx;
     int x;
     int y;
@@ -1074,7 +1071,7 @@ static av_cold int vc2_encode_init(AVCodecContext *avctx)
     s->picture_number = 0;
 
     /* Total allowed quantization range */
-    s->q_ceil    = MAX_QUANT_INDEX;
+    s->q_ceil    = DIRAC_MAX_QUANT_INDEX;
 
     s->ver.major = 2;
     s->ver.minor = 0;



More information about the ffmpeg-cvslog mailing list