Message ID | E1cfA5f-0006Z7-34@pannekake.samfundet.no |
---|---|
State | Accepted |
Commit | e3c14eaa54c87d4d8771bc75cb24b0b537fbcd19 |
Headers | show |
On 2/18/17, Steinar H. Gunderson <steinar+ffmpeg@gunderson.no> wrote: > 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. > --- > libavcodec/speedhq.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavcodec/speedhq.c b/libavcodec/speedhq.c > index 45ee37a4e6..60efb0222b 100644 > --- a/libavcodec/speedhq.c > +++ b/libavcodec/speedhq.c > @@ -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, > -- > 2.11.0 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > lgtm
On Sat, Feb 18, 2017 at 08:37:26PM +0100, Paul B Mahol wrote: > On 2/18/17, Steinar H. Gunderson <steinar+ffmpeg@gunderson.no> wrote: > > 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. > > --- > > libavcodec/speedhq.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/libavcodec/speedhq.c b/libavcodec/speedhq.c > > index 45ee37a4e6..60efb0222b 100644 > > --- a/libavcodec/speedhq.c > > +++ b/libavcodec/speedhq.c > > @@ -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, > > -- > > 2.11.0 > > > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > lgtm applied thx [...]
diff --git a/libavcodec/speedhq.c b/libavcodec/speedhq.c index 45ee37a4e6..60efb0222b 100644 --- a/libavcodec/speedhq.c +++ b/libavcodec/speedhq.c @@ -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,