From: AlexGuo1998 <gxt.1998@gmail.com> To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH] avcodec/amv: use correct quantize tables Date: Sun, 9 Apr 2023 16:37:49 +0800 Message-ID: <CAFUs7TSdiGO_SBsSDC6hXaea6ZkXt6zkBLfigVaAMX4KkqCd2Q@mail.gmail.com> (raw) In-Reply-To: <CAFUs7TR9Y2rrUcqGcKe-nUwbP6T_41dFPje2_yPQLdov8Z3h7g@mail.gmail.com> [-- Attachment #1: Type: text/plain, Size: 65 bytes --] So sorry that gmail trashed the patch. Re-sent as an attachment. [-- Attachment #2: 0001-avcodec-amv-use-correct-quantize-tables.txt --] [-- Type: text/plain, Size: 4964 bytes --] From 14910cef473a2858d5cf5e3bf855730762456de1 Mon Sep 17 00:00:00 2001 From: AlexGuo1998 <AlexGuo1998@163.com> Date: Sun, 9 Apr 2023 15:57:05 +0800 Subject: [PATCH] avcodec/amv: use correct quantize tables The official encoder has a mode to generate mjpeg AVI files, which embeds the correct quantize table. Change the table we use (both encoder and decoder) to match that. Signed-off-by: AlexGuo1998 <AlexGuo1998@163.com> --- libavcodec/mpegvideo_enc.c | 16 +++++++--------- libavcodec/sp5x.h | 21 +++++++++++++++++++++ libavcodec/sp5xdec.c | 9 +++++++-- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 7d3c8875f2..5592095ed2 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -2878,9 +2878,9 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->encoding_error[i] = 0; } if(s->codec_id==AV_CODEC_ID_AMV){ - s->last_dc[0] = 128*8/13; - s->last_dc[1] = 128*8/14; - s->last_dc[2] = 128*8/14; + s->last_dc[0] = 128*8/8; + s->last_dc[1] = 128*8/9; + s->last_dc[2] = 128*8/9; } s->mb_skip_run = 0; memset(s->last_mv, 0, sizeof(s->last_mv)); @@ -3755,18 +3755,16 @@ static int encode_picture(MpegEncContext *s) s->qscale= 8; if (s->codec_id == AV_CODEC_ID_AMV) { - static const uint8_t y[32] = {13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13}; - static const uint8_t c[32] = {14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14}; + static const uint8_t y[32] = {8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8}; + static const uint8_t c[32] = {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9}; for (int i = 1; i < 64; i++) { int j = s->idsp.idct_permutation[ff_zigzag_direct[i]]; - s->intra_matrix[j] = sp5x_qscale_five_quant_table[0][i]; - s->chroma_intra_matrix[j] = sp5x_qscale_five_quant_table[1][i]; + s->intra_matrix[j] = amv_quant_table[0][i]; + s->chroma_intra_matrix[j] = amv_quant_table[1][i]; } s->y_dc_scale_table = y; s->c_dc_scale_table = c; - s->intra_matrix[0] = 13; - s->chroma_intra_matrix[0] = 14; ff_convert_matrix(s, s->q_intra_matrix, s->q_intra_matrix16, s->intra_matrix, s->intra_quant_bias, 8, 8, 1); ff_convert_matrix(s, s->q_chroma_intra_matrix, s->q_chroma_intra_matrix16, diff --git a/libavcodec/sp5x.h b/libavcodec/sp5x.h index d84d851768..4646914235 100644 --- a/libavcodec/sp5x.h +++ b/libavcodec/sp5x.h @@ -145,4 +145,25 @@ static const uint8_t sp5x_qscale_five_quant_table[][64]= 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79 }, }; +static const uint8_t amv_quant_table[][64] = +{ + /* AMV: always constant quantize table */ + { 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, + 0x07, 0x07, 0x09, 0x09, 0x08, 0x0A, 0x0C, 0x14, + 0x0D, 0x0C, 0x0B, 0x0B, 0x0C, 0x19, 0x12, 0x13, + 0x0F, 0x14, 0x1D, 0x1A, 0x1F, 0x1E, 0x1D, 0x1A, + 0x1C, 0x1C, 0x20, 0x24, 0x2E, 0x27, 0x20, 0x22, + 0x2C, 0x23, 0x1C, 0x1C, 0x28, 0x37, 0x29, 0x2C, + 0x30, 0x31, 0x34, 0x34, 0x34, 0x1F, 0x27, 0x39, + 0x3D, 0x38, 0x32, 0x3C, 0x2E, 0x33, 0x34, 0x32 }, + { 0x09, 0x09, 0x09, 0x0C, 0x0B, 0x0C, 0x18, 0x0D, + 0x0D, 0x18, 0x32, 0x21, 0x1C, 0x21, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32 }, +}; + #endif /* AVCODEC_SP5X_H */ diff --git a/libavcodec/sp5xdec.c b/libavcodec/sp5xdec.c index dfed725500..8c8b4f67fa 100644 --- a/libavcodec/sp5xdec.c +++ b/libavcodec/sp5xdec.c @@ -55,8 +55,13 @@ static int sp5x_decode_frame(AVCodecContext *avctx, recoded[j++] = 0xD8; memcpy(recoded+j, &sp5x_data_dqt[0], sizeof(sp5x_data_dqt)); - memcpy(recoded + j + 5, &sp5x_qscale_five_quant_table[0], 64); - memcpy(recoded + j + 70, &sp5x_qscale_five_quant_table[1], 64); + if (avctx->codec_id==AV_CODEC_ID_AMV) { + memcpy(recoded + j + 5, &amv_quant_table[0], 64); + memcpy(recoded + j + 70, &amv_quant_table[1], 64); + } else { + memcpy(recoded + j + 5, &sp5x_qscale_five_quant_table[0], 64); + memcpy(recoded + j + 70, &sp5x_qscale_five_quant_table[1], 64); + } j += sizeof(sp5x_data_dqt); memcpy(recoded+j, &sp5x_data_dht[0], sizeof(sp5x_data_dht)); -- 2.40.0.windows.1 [-- Attachment #3: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-04-09 8:38 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-04-09 8:20 AlexGuo1998 2023-04-09 8:37 ` AlexGuo1998 [this message] 2023-04-09 23:42 ` Michael Niedermayer 2023-04-10 4:09 ` AlexGuo1998 2023-04-10 14:17 ` Michael Niedermayer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAFUs7TSdiGO_SBsSDC6hXaea6ZkXt6zkBLfigVaAMX4KkqCd2Q@mail.gmail.com \ --to=gxt.1998@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git