summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorRostislav Pehlivanov <rpehlivanov@ob-encoder.com>2016-06-23 18:06:59 +0100
committerRostislav Pehlivanov <atomnuker@gmail.com>2016-07-11 23:38:01 +0100
commit09d89d940635e34b0f61266d66fbb9802b18564c (patch)
tree972503d5dd77694917501c035e0e5ad4e253df95 /libavcodec
parentb9c6c5f4539dfaf26e8484aece1b39f0a55f8fff (diff)
downloadffmpeg-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.c8
-rw-r--r--libavcodec/diractab.h2
-rw-r--r--libavcodec/vc2enc.c9
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;