From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8C7494B801 for ; Fri, 14 Jun 2024 18:26:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CD4B768D6B0; Fri, 14 Jun 2024 21:26:21 +0300 (EEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2054.outbound.protection.outlook.com [40.92.75.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5DBC368D67A for ; Fri, 14 Jun 2024 21:26:15 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EW8GlL9YvXSogT9oS+77y/wpYj0gbg5HfUu+bI+/AT+CL+f5mN8Mn9uCRv3l7jlGLXyr162ch3guhIRGWbzafYXVMgs93HPC5mP3rPzJmhi+uHJoMQdQ9eeNTlvvDZAD0fK7gmTAwDPLGRRS03VDUH6xZMviuo6JmKpi/tZryM5QTb/cF+1pauovzMQ9ohkoLMcZstm9eS+I20oBAa2y3ZmO4efCOjNJVpgTUiaGcIvDQVPV/FYsL8Y47QIv67d6bIaoILKvBgeXr3Nqj+thcubdY+XesRNrWaWCR1x6vDxvnPVkE0YmpoV4wVkZlCze6ca5KiBHL17QWUv/GjgZkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QoSkoWLiVbMTYZT3Cusuwz1IQleplquHQ14U9S5QS1g=; b=gk3gBJhPlY+7lbEViCJ94IybNglrrIrxeJ5IFIiGrGbAjAy1RzcXLcHAVGYPCe7qwb1hTdKNRYt43vgAN3XZiFm6Mluce/Yz6YIoJWrS0CkLJ4w9y9KbdzzYjJUIOdRLjsp4DN8OE98N2iIV86lfVPZ+UCzSq20kdOVPTyfZC5ggQtf2aGVCV74YK1baeGyOJ6SCRaVL5+JNQd88PiH5SzXabvEkoZaJqrVaHZBS/kHmdDLlEJlT0PuQjjvDxxDUhNrhEyYHFEUVWkPFLKXru4DLixC4zUpZYPSISrpIEdik8VN3j0tY4IaAEFFR2meyRT/3BKbI8WVWR36eiyfYIQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QoSkoWLiVbMTYZT3Cusuwz1IQleplquHQ14U9S5QS1g=; b=UCCxI27mIvadBplTRpFG19RTaXALB6G/Hqe6ISlYOcJB7IBtww90jmo3guEBNMgrOcV7XXJO3gcN8QaFZHqVsCCgois3ozauC6P2tFcLTE1tj/JrCNelDbkAXZDeGhK5eqAyucVZwojEy6HV2eeCY33nALSoOmPVGoQO03y/AzK9o3g0GUquq+X6NES4GUNDnh3lXhKOYNxgDikWOR2HTAU9v4tn3svcPEMZmKM9QX8oHr7l0vDtKEbubSbypydDZopjyuTYoQq9UOyE23SRpJ0eXdHvLnpve7fg1rO0xDtnme3HV6YYcgP52vFY+nWB6dHUZkyOmWXywAmnoy1mAQ== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PRAP250MB0563.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:298::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7677.22; Fri, 14 Jun 2024 18:26:10 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%4]) with mapi id 15.20.7677.026; Fri, 14 Jun 2024 18:26:10 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 14 Jun 2024 20:25:50 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [9wFAH53Mm8MDaq2/MrQXLPgBLOsrCAQir0B0S6eUKs0=] X-ClientProxiedBy: ZR0P278CA0072.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::23) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240614182558.3088802-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PRAP250MB0563:EE_ X-MS-Office365-Filtering-Correlation-Id: 9bb56625-af03-4c73-ef29-08dc8c9f76e1 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|3412199022|440099025|1710799023; X-Microsoft-Antispam-Message-Info: UU2yj2PLeS3Tkx5sE/OgDqi5P0QlvcygYiO2gsoJ9qWBRQFKCnGRqWe5wNx9yW49yzOtTIBxwN6OVbH3wZWqXUKpYeROj7adWaCIY/jPRfI+S8Kyp/AIRIZqVjaSfpQ46Xx8Hti9cs39Ix1jzrLh45kXQ397kUC/DDNurO440eatztxxGS+2SJo5feKl9bWy+3VhfP2kLaJES1qWu6qDPT3eZ1I5tiYjQ/3K2x63BVEsQUeXGDbUnzRgklVerpz0tBDfIpK3Jcu1PrXv/QPzraS473p3VzvfIu9gQtNexB5LvVjkJkv+9uIBR1rNdeQrTPeUpr6QdX8scDAigweN7IGFz44NUNtOgO+rVSDQAXf7lWJnh3yPEk3LxVyaSRdivlsm67hMg8fgDKNCzg8+lrMAuQJUn8fbJew/aPARcbrchinx9eUe3qS460HRhHMhNo13xKDCrY/DHMp2UYAe6Zk0cGQhJ1a+P2cTgxEC8R6TDfRMYgoy0B9GQcNSAS8fP5Prs4fG+uuvtPk6GSUbUdoK5XVikWku+s6zlO9QjQWQywTh9XF3fEj2TGYJzZ7pvQ05VvR3fOGwhjXQluxFF1oXA6FrGwcbSz6MAM4mzlCOEoKoJ7k2xUpG3cVurGji X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?BWNL6fS3O1AKDjRGVZ32urgyl5sCjiLvboEzidsGT+eW/hoJZpFdyNXNKz3S?= =?us-ascii?Q?uddvfiTdx8D9u+n7NUgCIIDoom2/7JRoNzjSM92bm5H1yQM84f9RtmLtYda5?= =?us-ascii?Q?73POdExIVSomi8hvaVzld1/ATCvK2tp8LIs03Ddu9Nx2xAON9TYL88NsHMis?= =?us-ascii?Q?x4BWvHwsA/NVbupJvWci3AGezj47pKpkFSfpK87fojJjmIJaKG6CC5Kw7JC3?= =?us-ascii?Q?3QwzecAm77y3AuwrpS6lIMIebY2gzChyyurz7pwLgaZLM9tth1AnxqL855V0?= =?us-ascii?Q?qcUOhrjL9091wB7ESGlehG8FS7+frnC0MKiNkxny3+SI/QHHnMVHvud1iN0q?= =?us-ascii?Q?K1xMfFYjbtN/Z/JQB2IR06eLQPbm3067YmB2NYJRgHDMZJa+TCGuGO8SM+UT?= =?us-ascii?Q?v7hQazP4FtfvKn09/yPpUcCsDiKIzBhxejPQWQRLmSlK/UNTEDKOHhq1sEBK?= =?us-ascii?Q?gErzYntHPLPli4xNSafwQHV5JsS+5P/P/jB6984PXOyMGBcaHjWt9E2gm65O?= =?us-ascii?Q?xGA7/2rI0zBS1goyBOh9Nop38zd6H7IrgMslhyj2PediSG38Bft8a4K1AV3H?= =?us-ascii?Q?39CQp3/56ZjvuqGmOunZbVrFuT6+ZZeEhr4F6VaoXQvssTelBWKx2vE4lnZS?= =?us-ascii?Q?0wQQEiTOnLuXhrzei90CQLce2HNwCFxlID57DeOVVcz0f45tyVVpX11a7Zv8?= =?us-ascii?Q?1LlpFeuse6jsmgi/CwDBT9F5fGXzZJm2tSTcZdLhFAgEWSGfXA6+BreeHfVf?= =?us-ascii?Q?9xrlX4g8pPUmoabl4/Wh0ltvb16rFTij7urDYjTVzwkd6mVel3BJ/HlRRCzY?= =?us-ascii?Q?fbERxXKT4b27sJN8lof4KU1AUrFoOUg1sj1Bj+Vp8UFmPqKceaTDK319rYEN?= =?us-ascii?Q?yl2ymPltY+kaK+5ksxwftQ8qxyOpyDHDI6PW2VUiEQa0DlBv6djYn0cOJrpF?= =?us-ascii?Q?pIyjtKZgDclR0BDcEijmR3WgJS0SzO8aTEXZXLx4RRaQHfKC3uH9k6ojflXm?= =?us-ascii?Q?KHEaudyFwRyyDegygcxr/IEFBIKWJgt3YwZDNMCl+MapAj790iFUhQY+qL3j?= =?us-ascii?Q?qte0R6Wj1HdMULI40/+TIcNtmZxS2lJ9Ip2H4sVgR+7pdAAChL0/xdXjiQNh?= =?us-ascii?Q?jd0vc23yYNIZfEsvfe4iDMoA10IgV+Sa9XSCgn+8vhJQQwbs5eH472OGY1tr?= =?us-ascii?Q?uC6lZFU9pmNdAR5+s9HsfANRs5BCbYMj4b/sp6B67PccjayCUKBdfbwW8wI2?= =?us-ascii?Q?/N4jwSpTx34IaFBUQ2rVc3H8b4en4TdWV18hxh4vrA=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9bb56625-af03-4c73-ef29-08dc8c9f76e1 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jun 2024 18:26:10.3688 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PRAP250MB0563 Subject: [FFmpeg-devel] [PATCH 59/67] avcodec/h261dec: Unquantize coefficients while parsing them X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is beneficial for performance: When concatenating the file from the vsynth1-h261 fate-test 100 times, performance (measured by timing the codec's decode callback) improved by 9.6%. Signed-off-by: Andreas Rheinhardt --- libavcodec/h261dec.c | 11 +++++++++-- libavcodec/mpegvideo_dec.c | 11 ++++++----- libavcodec/mpegvideo_enc.c | 2 +- libavcodec/mpv_reconstruct_mb_template.c | 24 ++++++++++++------------ 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index f1c1e1a48a..6df8588bb6 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -244,6 +244,7 @@ static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded int level, i, j, run; const RLTable *rl = &ff_h261_rl_tcoeff; const uint8_t *scan_table; + const int qmul = s->qscale << 1, qadd = (s->qscale - 1) | 1; /* For the variable length encoding there are two code tables, one being * used for the first transmitted LEVEL in INTER, INTER + MC and @@ -265,7 +266,7 @@ static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded * being coded as 1111 1111. */ if (level == 255) level = 128; - block[0] = level; + block[0] = level * s->y_dc_scale; i = 1; } else if (coded) { // Run Level Code @@ -276,7 +277,8 @@ static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded i = 0; if (check & 0x2) { skip_bits(&s->gb, 2); - block[0] = (check & 0x1) ? -1 : 1; + block[0] = qmul + qadd; + block[0] *= (check & 0x1) ? -1 : 1; i = 1; } } else { @@ -306,10 +308,15 @@ static int h261_decode_block(H261DecContext *h, int16_t *block, int n, int coded run = SHOW_UBITS(re, &s->gb, 6) + 1; SKIP_CACHE(re, &s->gb, 6); level = SHOW_SBITS(re, &s->gb, 8); + if (level > 0) + level = level * qmul + qadd; + else if (level < 0) + level = level * qmul - qadd; SKIP_COUNTER(re, &s->gb, 6 + 8); } else if (level == 0) { break; } else { + level = level * qmul + qadd; if (SHOW_UBITS(re, &s->gb, 1)) level = -level; SKIP_COUNTER(re, &s->gb, 1); diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c index 684f31947c..da88a35120 100644 --- a/libavcodec/mpegvideo_dec.c +++ b/libavcodec/mpegvideo_dec.c @@ -927,15 +927,16 @@ void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]) } } + av_assert2((s->out_format <= FMT_H261) == (s->out_format == FMT_H261 || s->out_format == FMT_MPEG1)); if (!s->avctx->lowres) { #if !CONFIG_SMALL - if (s->out_format == FMT_MPEG1) - mpv_reconstruct_mb_internal(s, block, 0, DEFINITELY_MPEG12); + if (s->out_format <= FMT_H261) + mpv_reconstruct_mb_internal(s, block, 0, DEFINITELY_MPEG12_H261); else - mpv_reconstruct_mb_internal(s, block, 0, NOT_MPEG12); + mpv_reconstruct_mb_internal(s, block, 0, NOT_MPEG12_H261); #else - mpv_reconstruct_mb_internal(s, block, 0, MAY_BE_MPEG12); + mpv_reconstruct_mb_internal(s, block, 0, MAY_BE_MPEG12_H261); #endif } else - mpv_reconstruct_mb_internal(s, block, 1, MAY_BE_MPEG12); + mpv_reconstruct_mb_internal(s, block, 1, MAY_BE_MPEG12_H261); } diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 125d16e694..d05a93d249 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1101,7 +1101,7 @@ static void mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]) } } - mpv_reconstruct_mb_internal(s, block, 0, MAY_BE_MPEG12); + mpv_reconstruct_mb_internal(s, block, 0, MAY_BE_MPEG12_H261); } static int get_sae(const uint8_t *src, int ref, int stride) diff --git a/libavcodec/mpv_reconstruct_mb_template.c b/libavcodec/mpv_reconstruct_mb_template.c index 4b16974827..dca982ae0f 100644 --- a/libavcodec/mpv_reconstruct_mb_template.c +++ b/libavcodec/mpv_reconstruct_mb_template.c @@ -20,9 +20,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#define NOT_MPEG12 0 -#define MAY_BE_MPEG12 1 -#define DEFINITELY_MPEG12 2 +#define NOT_MPEG12_H261 0 +#define MAY_BE_MPEG12_H261 1 +#define DEFINITELY_MPEG12_H261 2 /* put block[] to dest[] */ static inline void put_dct(MpegEncContext *s, @@ -56,14 +56,14 @@ static av_always_inline void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], int lowres_flag, int is_mpeg12) { -#define IS_MPEG12(s) (is_mpeg12 == MAY_BE_MPEG12 ? ((s)->out_format == FMT_MPEG1) : is_mpeg12) +#define IS_MPEG12_H261(s) (is_mpeg12 == MAY_BE_MPEG12_H261 ? ((s)->out_format <= FMT_H261) : is_mpeg12) const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; s->cur_pic.qscale_table[mb_xy] = s->qscale; /* update DC predictors for P macroblocks */ if (!s->mb_intra) { - if (is_mpeg12 != DEFINITELY_MPEG12 && (s->h263_pred || s->h263_aic)) { + if (is_mpeg12 != DEFINITELY_MPEG12_H261 && (s->h263_pred || s->h263_aic)) { if (s->mbintra_table[mb_xy]) ff_clean_intra_table_entries(s); } else { @@ -71,7 +71,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], s->last_dc[1] = s->last_dc[2] = 128 << s->intra_dc_precision; } - } else if (is_mpeg12 != DEFINITELY_MPEG12 && (s->h263_pred || s->h263_aic)) + } else if (is_mpeg12 != DEFINITELY_MPEG12_H261 && (s->h263_pred || s->h263_aic)) s->mbintra_table[mb_xy] = 1; #if IS_ENCODER @@ -110,7 +110,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], /* decoding or more than one mb_type (MC was already done otherwise) */ #if !IS_ENCODER - if (HAVE_THREADS && is_mpeg12 != DEFINITELY_MPEG12 && + if (HAVE_THREADS && is_mpeg12 != DEFINITELY_MPEG12_H261 && s->avctx->active_thread_type & FF_THREAD_FRAME) { if (s->mv_dir & MV_DIR_FORWARD) { ff_thread_progress_await(&s->last_pic.ptr->progress, @@ -136,7 +136,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], const op_pixels_func (*op_pix)[4]; const qpel_mc_func (*op_qpix)[16]; - if ((is_mpeg12 == DEFINITELY_MPEG12 || !s->no_rounding) || s->pict_type == AV_PICTURE_TYPE_B) { + if ((is_mpeg12 == DEFINITELY_MPEG12_H261 || !s->no_rounding) || s->pict_type == AV_PICTURE_TYPE_B) { op_pix = s->hdsp.put_pixels_tab; op_qpix = s->qdsp.put_qpel_pixels_tab; } else { @@ -162,7 +162,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], } /* add dct residue */ - if (!(IS_MPEG12(s) || s->msmpeg4_version != MSMP4_UNUSED || + if (!(IS_MPEG12_H261(s) || s->msmpeg4_version != MSMP4_UNUSED || (s->codec_id == AV_CODEC_ID_MPEG4 && !s->mpeg_quant))) #endif /* !IS_ENCODER */ { @@ -187,7 +187,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], } } #if !IS_ENCODER - else if (is_mpeg12 == DEFINITELY_MPEG12 || lowres_flag || (s->codec_id != AV_CODEC_ID_WMV2)) { + else if (is_mpeg12 == DEFINITELY_MPEG12_H261 || lowres_flag || (s->codec_id != AV_CODEC_ID_WMV2)) { add_dct(s, block[0], 0, dest_y , dct_linesize); add_dct(s, block[1], 1, dest_y + block_size, dct_linesize); add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize); @@ -222,12 +222,12 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], #if !IS_ENCODER /* Only MPEG-4 Simple Studio Profile is supported in > 8-bit mode. TODO: Integrate 10-bit properly into mpegvideo.c so that ER works properly */ - if (is_mpeg12 != DEFINITELY_MPEG12 && CONFIG_MPEG4_DECODER && + if (is_mpeg12 != DEFINITELY_MPEG12_H261 && CONFIG_MPEG4_DECODER && /* s->codec_id == AV_CODEC_ID_MPEG4 && */ s->avctx->bits_per_raw_sample > 8) { ff_mpeg4_decode_studio(s, dest_y, dest_cb, dest_cr, block_size, uvlinesize, dct_linesize, dct_offset); - } else if (!IS_MPEG12(s)) + } else if (!IS_MPEG12_H261(s)) #endif /* !IS_ENCODER */ { /* dct only in intra block */ -- 2.40.1 _______________________________________________ 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".