You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/mpegvideo_enc: Don't set qscale_table value prematurely
When there are multiple candidates for macroblock type, the encoder tries them all. In order to do so, it keeps several sets of states containing the variables that get modified when encoding the macroblock and in the end uses the best of these. Yet one variable was set, but not included in this state: The current macroblock's qscale value in the current picture's qscale_table. This may currently be set multiple times in mpv_reconstruct_mb(), yet it is read when adaptive_quant is true. Currently, the value read can be the value set by the last attempt to write the current macroblock and not the initial value. Fix this by only setting the qscale_table value in one place outside of mpv_reconstruct_mb() (where it does not belong at all). Reviewed-by: Ramiro Polla <ramiro.polla@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
@ -1118,10 +1118,6 @@ static inline void add_dequant_dct(MpegEncContext *s,
|
||||
*/
|
||||
static void mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64])
|
||||
{
|
||||
const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
|
||||
|
||||
s->cur_pic.qscale_table[mb_xy] = s->qscale;
|
||||
|
||||
if (s->avctx->debug & FF_DEBUG_DCT_COEFF) {
|
||||
/* print DCT coefficients */
|
||||
av_log(s->avctx, AV_LOG_DEBUG, "DCT coeffs of MB at %dx%d:\n", s->mb_x, s->mb_y);
|
||||
@ -3382,8 +3378,6 @@ static int encode_thread(AVCodecContext *c, void *arg){
|
||||
}
|
||||
}
|
||||
|
||||
s->cur_pic.qscale_table[xy] = best_s.qscale;
|
||||
|
||||
copy_context_after_encode(s, &best_s);
|
||||
|
||||
pb_bits_count= put_bits_count(&s->pb);
|
||||
@ -3538,6 +3532,8 @@ static int encode_thread(AVCodecContext *c, void *arg){
|
||||
mpv_reconstruct_mb(s, s->block);
|
||||
}
|
||||
|
||||
s->cur_pic.qscale_table[xy] = s->qscale;
|
||||
|
||||
/* clean the MV table in IPS frames for direct mode in B-frames */
|
||||
if(s->mb_intra /* && I,P,S_TYPE */){
|
||||
s->p_mv_table[xy][0]=0;
|
||||
|
@ -2,45 +2,45 @@ ret: 0 st: 0 flags:1 dts: 0.000000 pts: NOPTS pos: 5652 size: 6855
|
||||
ret: 0 st:-1 flags:0 ts:-1.000000
|
||||
ret: 0 st: 0 flags:1 dts: 0.000000 pts: NOPTS pos: 5652 size: 6855
|
||||
ret: 0 st:-1 flags:1 ts: 1.894167
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161318 size: 19176
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161352 size: 19191
|
||||
ret: 0 st: 0 flags:0 ts: 0.800000
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75056 size: 19178
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75104 size: 19178
|
||||
ret:-1 st: 0 flags:1 ts:-0.320000
|
||||
ret:-1 st:-1 flags:0 ts: 2.576668
|
||||
ret: 0 st:-1 flags:1 ts: 1.470835
|
||||
ret: 0 st: 0 flags:1 dts: 1.360000 pts: NOPTS pos: 118696 size: 20018
|
||||
ret: 0 st: 0 flags:1 dts: 1.360000 pts: NOPTS pos: 118586 size: 20060
|
||||
ret: 0 st: 0 flags:0 ts: 0.360000
|
||||
ret: 0 st: 0 flags:1 dts: 0.400000 pts: NOPTS pos: 35800 size: 17261
|
||||
ret: 0 st: 0 flags:1 dts: 0.400000 pts: NOPTS pos: 35840 size: 17261
|
||||
ret:-1 st: 0 flags:1 ts:-0.760000
|
||||
ret:-1 st:-1 flags:0 ts: 2.153336
|
||||
ret: 0 st:-1 flags:1 ts: 1.047503
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75056 size: 19178
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75104 size: 19178
|
||||
ret: 0 st: 0 flags:0 ts:-0.040000
|
||||
ret: 0 st: 0 flags:1 dts: 0.000000 pts: NOPTS pos: 5652 size: 6855
|
||||
ret: 0 st: 0 flags:1 ts: 2.840000
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161318 size: 19176
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161352 size: 19191
|
||||
ret: 0 st:-1 flags:0 ts: 1.730004
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161318 size: 19176
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161352 size: 19191
|
||||
ret: 0 st:-1 flags:1 ts: 0.624171
|
||||
ret: 0 st: 0 flags:1 dts: 0.400000 pts: NOPTS pos: 35800 size: 17261
|
||||
ret: 0 st: 0 flags:1 dts: 0.400000 pts: NOPTS pos: 35840 size: 17261
|
||||
ret: 0 st: 0 flags:0 ts:-0.480000
|
||||
ret: 0 st: 0 flags:1 dts: 0.000000 pts: NOPTS pos: 5652 size: 6855
|
||||
ret: 0 st: 0 flags:1 ts: 2.400000
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161318 size: 19176
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161352 size: 19191
|
||||
ret: 0 st:-1 flags:0 ts: 1.306672
|
||||
ret: 0 st: 0 flags:1 dts: 1.360000 pts: NOPTS pos: 118696 size: 20018
|
||||
ret: 0 st: 0 flags:1 dts: 1.360000 pts: NOPTS pos: 118586 size: 20060
|
||||
ret: 0 st:-1 flags:1 ts: 0.200839
|
||||
ret: 0 st: 0 flags:1 dts: 0.000000 pts: NOPTS pos: 5652 size: 6855
|
||||
ret: 0 st: 0 flags:0 ts:-0.920000
|
||||
ret: 0 st: 0 flags:1 dts: 0.000000 pts: NOPTS pos: 5652 size: 6855
|
||||
ret: 0 st: 0 flags:1 ts: 2.000000
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161318 size: 19176
|
||||
ret: 0 st: 0 flags:1 dts: 1.840000 pts: NOPTS pos: 161352 size: 19191
|
||||
ret: 0 st:-1 flags:0 ts: 0.883340
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75056 size: 19178
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75104 size: 19178
|
||||
ret:-1 st:-1 flags:1 ts:-0.222493
|
||||
ret:-1 st: 0 flags:0 ts: 2.680000
|
||||
ret: 0 st: 0 flags:1 ts: 1.560000
|
||||
ret: 0 st: 0 flags:1 dts: 1.360000 pts: NOPTS pos: 118696 size: 20018
|
||||
ret: 0 st: 0 flags:1 dts: 1.360000 pts: NOPTS pos: 118586 size: 20060
|
||||
ret: 0 st:-1 flags:0 ts: 0.460008
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75056 size: 19178
|
||||
ret: 0 st: 0 flags:1 dts: 0.880000 pts: NOPTS pos: 75104 size: 19178
|
||||
ret:-1 st:-1 flags:1 ts:-0.645825
|
||||
|
@ -1,4 +1,4 @@
|
||||
0f1cbbdc3f9b91f2d9ac3d1fc2cf7d4e *tests/data/fate/vsynth1-mpeg4-adap.avi
|
||||
325518 tests/data/fate/vsynth1-mpeg4-adap.avi
|
||||
1e6c596f9f491fbf15920ef1bace7fb8 *tests/data/fate/vsynth1-mpeg4-adap.out.rawvideo
|
||||
stddev: 14.12 PSNR: 25.13 MAXDIFF: 184 bytes: 7603200/ 7603200
|
||||
3b4fe7ad106cb112364d062b20ad80a8 *tests/data/fate/vsynth1-mpeg4-adap.avi
|
||||
325594 tests/data/fate/vsynth1-mpeg4-adap.avi
|
||||
96c5a7759413ab24afaa926abb3c5fe0 *tests/data/fate/vsynth1-mpeg4-adap.out.rawvideo
|
||||
stddev: 14.11 PSNR: 25.13 MAXDIFF: 184 bytes: 7603200/ 7603200
|
||||
|
@ -1,4 +1,4 @@
|
||||
9465ef120d560537d8fcfb5564782e01 *tests/data/fate/vsynth2-mpeg4-adap.avi
|
||||
203004 tests/data/fate/vsynth2-mpeg4-adap.avi
|
||||
d7851ab1ca9744f8e618a24193e5ef76 *tests/data/fate/vsynth2-mpeg4-adap.out.rawvideo
|
||||
stddev: 4.56 PSNR: 34.95 MAXDIFF: 84 bytes: 7603200/ 7603200
|
||||
21d205e0f42ce613481b202d52593225 *tests/data/fate/vsynth2-mpeg4-adap.avi
|
||||
202870 tests/data/fate/vsynth2-mpeg4-adap.avi
|
||||
1c45877fe27fb5fbfcdaff4a1da94de4 *tests/data/fate/vsynth2-mpeg4-adap.out.rawvideo
|
||||
stddev: 4.55 PSNR: 34.95 MAXDIFF: 84 bytes: 7603200/ 7603200
|
||||
|
@ -1,4 +1,4 @@
|
||||
6b2f641f2e68b11b992fd6ba1ed66a21 *tests/data/fate/vsynth3-mpeg4-adap.avi
|
||||
41012 tests/data/fate/vsynth3-mpeg4-adap.avi
|
||||
3483a2032cb02c3a37f5e43b128e59ed *tests/data/fate/vsynth3-mpeg4-adap.out.rawvideo
|
||||
stddev: 5.79 PSNR: 32.87 MAXDIFF: 49 bytes: 86700/ 86700
|
||||
10512ee1a666ed95643557e1cf699363 *tests/data/fate/vsynth3-mpeg4-adap.avi
|
||||
41100 tests/data/fate/vsynth3-mpeg4-adap.avi
|
||||
9ba2c3cab3f08d2a345b849d0b30e3e1 *tests/data/fate/vsynth3-mpeg4-adap.out.rawvideo
|
||||
stddev: 5.79 PSNR: 32.88 MAXDIFF: 49 bytes: 86700/ 86700
|
||||
|
@ -1,4 +1,4 @@
|
||||
633da125f46391eef33bb031cd728f4b *tests/data/fate/vsynth_lena-mpeg4-adap.avi
|
||||
187598 tests/data/fate/vsynth_lena-mpeg4-adap.avi
|
||||
21312bfcb28c40299fb27a5b03477f8c *tests/data/fate/vsynth_lena-mpeg4-adap.out.rawvideo
|
||||
stddev: 3.63 PSNR: 36.92 MAXDIFF: 71 bytes: 7603200/ 7603200
|
||||
5af033cfe87bc2abf688b602e5a1a35c *tests/data/fate/vsynth_lena-mpeg4-adap.avi
|
||||
187652 tests/data/fate/vsynth_lena-mpeg4-adap.avi
|
||||
515efcfb456cf7b460f356fe0dc7c808 *tests/data/fate/vsynth_lena-mpeg4-adap.out.rawvideo
|
||||
stddev: 3.63 PSNR: 36.93 MAXDIFF: 71 bytes: 7603200/ 7603200
|
||||
|
Reference in New Issue
Block a user