diff options
author | Dmitry Kovalev <dkovalev@google.com> | 2013-04-10 10:16:30 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2013-04-10 10:16:30 -0700 |
commit | 2759ce85ad385481ff7795287c13abd8d34753e0 (patch) | |
tree | 990312e2e5de07ef2aeba5e70c6dca1aad484610 /vp9/decoder | |
parent | b41e297582c886f03734d3212863fd2e00008ccf (diff) | |
parent | f370db0cf46b0974ea65484e54f5de27fa453912 (diff) | |
download | libvpx-2759ce85ad385481ff7795287c13abd8d34753e0.tar libvpx-2759ce85ad385481ff7795287c13abd8d34753e0.tar.gz libvpx-2759ce85ad385481ff7795287c13abd8d34753e0.tar.bz2 libvpx-2759ce85ad385481ff7795287c13abd8d34753e0.zip |
Merge "Adding setup_quantization function." into experimental
Diffstat (limited to 'vp9/decoder')
-rw-r--r-- | vp9/decoder/vp9_decodframe.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index eda0057b4..1e95e2207 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -118,11 +118,10 @@ void vp9_init_de_quantizer(VP9D_COMP *pbi) { static int get_qindex(MACROBLOCKD *mb, int segment_id, int base_qindex) { // Set the Q baseline allowing for any segment level adjustment if (vp9_segfeature_active(mb, segment_id, SEG_LVL_ALT_Q)) { - if (mb->mb_segment_abs_delta == SEGMENT_ABSDATA) - return vp9_get_segdata(mb, segment_id, SEG_LVL_ALT_Q); // Abs Value - else - return clamp(base_qindex + vp9_get_segdata(mb, segment_id, SEG_LVL_ALT_Q), - 0, MAXQ); // Delta Value + const int data = vp9_get_segdata(mb, segment_id, SEG_LVL_ALT_Q); + return mb->mb_segment_abs_delta == SEGMENT_ABSDATA ? + data : // Abs value + clamp(base_qindex + data, 0, MAXQ); // Delta value } else { return base_qindex; } @@ -1314,6 +1313,19 @@ static void setup_loopfilter(VP9_COMMON *pc, MACROBLOCKD *xd, vp9_reader *r) { } } +static void setup_quantization(VP9D_COMP *pbi, vp9_reader *r) { + // Read the default quantizers + VP9_COMMON *const pc = &pbi->common; + + pc->base_qindex = vp9_read_literal(r, QINDEX_BITS); + if (get_delta_q(r, &pc->y1dc_delta_q) | + get_delta_q(r, &pc->uvdc_delta_q) | + get_delta_q(r, &pc->uvac_delta_q)) + vp9_init_de_quantizer(pbi); + + mb_init_dequantizer(pbi, &pbi->mb); // MB level dequantizer setup +} + static const uint8_t *read_frame_size(VP9_COMMON *const pc, const uint8_t *data, const uint8_t *data_end, int *width, int *height) { @@ -1616,22 +1628,7 @@ int vp9_decode_frame(VP9D_COMP *pbi, const uint8_t **p_data_end) { // Dummy read for now vp9_read_literal(&header_bc, 2); - // Read the default quantizers. - { - int q_update = 0; - pc->base_qindex = vp9_read_literal(&header_bc, QINDEX_BITS); - - // AC 1st order Q = default - q_update = get_delta_q(&header_bc, &pc->y1dc_delta_q) | - get_delta_q(&header_bc, &pc->uvdc_delta_q) | - get_delta_q(&header_bc, &pc->uvac_delta_q); - - if (q_update) - vp9_init_de_quantizer(pbi); - - // MB level dequantizer setup - mb_init_dequantizer(pbi, &pbi->mb); - } + setup_quantization(pbi, &header_bc); // Determine if the golden frame or ARF buffer should be updated and how. // For all non key frames the GF and ARF refresh flags and sign bias |