mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2025-02-10 14:24:10 +00:00
speedhq: fix decoding artifacts
The quantization table is stored in the natural order, but when we access it, we use an index that's in zigzag order, causing us to read the wrong value. This causes artifacts, especially in areas with horizontal or vertical edges. The artifacts look a lot like the DCT ringing artifacts you'd expect to see from a low-bitrate file, but when comparing to NewTek's own decoder, it's obvious they're not supposed to be there. Fix by simply storing the scaled quantization table in zigzag order. Performance is unchanged. Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
ed69cb83f8
commit
e3c14eaa54
@ -409,7 +409,7 @@ static int decode_speedhq_field(const SHQContext *s, const uint8_t *buf, int buf
|
||||
static void compute_quant_matrix(int *output, int qscale)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 64; i++) output[i] = unscaled_quant_matrix[i] * qscale;
|
||||
for (i = 0; i < 64; i++) output[i] = unscaled_quant_matrix[ff_zigzag_direct[i]] * qscale;
|
||||
}
|
||||
|
||||
static int speedhq_decode_frame(AVCodecContext *avctx,
|
||||
|
Loading…
x
Reference in New Issue
Block a user