diff options
author | Rostislav Pehlivanov <rpehlivanov@ob-encoder.com> | 2016-06-23 18:06:59 +0100 |
---|---|---|
committer | Rostislav Pehlivanov <atomnuker@gmail.com> | 2016-07-11 23:38:01 +0100 |
commit | 09d89d940635e34b0f61266d66fbb9802b18564c (patch) | |
tree | 972503d5dd77694917501c035e0e5ad4e253df95 /libavcodec | |
parent | b9c6c5f4539dfaf26e8484aece1b39f0a55f8fff (diff) | |
download | ffmpeg-09d89d940635e34b0f61266d66fbb9802b18564c.tar.gz |
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@obe.tv>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/diracdec.c | 8 | ||||
-rw-r--r-- | libavcodec/diractab.h | 2 | ||||
-rw-r--r-- | libavcodec/vc2enc.c | 9 |
3 files changed, 9 insertions, 10 deletions
diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c index c5d00b9a8d..ad33809413 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 cd8b8acee7..2423b07293 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 bbbeaa090e..eda390163f 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; |