From patchwork Sat May 11 20:51:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 48782 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1706:b0:1af:cdee:28c5 with SMTP id nv6csp300061pzb; Sat, 11 May 2024 14:00:41 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX5+xiFvHdTNRoVK5VDeOnRPAQ56rRhLAdOsKX9htRtPxN+5MqrdjrryCjWx287oRAbWuGgvbhuN16XlxXAE+VRseltswcftR4O/w== X-Google-Smtp-Source: AGHT+IG7Eb/p3D+vjoHiVsxIjIa0xBMc1sYoP76cLUptH0sEUgYCVUWZDEOrQoRvHUm68MY8U9uC X-Received: by 2002:ac2:54b9:0:b0:51f:d72:cd2d with SMTP id 2adb3069b0e04-5220fc7aeb4mr3597070e87.22.1715461241528; Sat, 11 May 2024 14:00:41 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a5a17c2d11esi339248966b.1019.2024.05.11.14.00.41; Sat, 11 May 2024 14:00:41 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=vKw8Vz5w; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 99A6368D81D; Sat, 11 May 2024 23:55:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2015.outbound.protection.outlook.com [40.92.90.15]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 09AD368D7FD for ; Sat, 11 May 2024 23:55:48 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C3t6sqFj7LK5GGpMOMNQUrCVoZf8LDF0qu8eRvnKB930s8aRNN3YBigjWpa8qkb9R4hpJI7VwwZ4S6NMvov21XyL3uiN2EIllzbKLVAWgMCDutMSx6/nIRC3PxYg2kmx/ZGYvtxQj4ipGqePlBzZM1VzuBTxl458oKuX4Wl/UigcrHrD7b/3TBGdjyOB1Lxl+8Bw2i5uaOPu23yuqx7kec59JgsIuGxmEhwEzRw+9EEC8qhBFuWc9BoiGw4TVjLPAVAGdWNPSwual3nmxUF8SMR/xsc0CQVOXG9/C/5qx/w1r7bB0/hw456GTGf62trx7exjptgI1/hDa+1mZ3GAaQ== 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=R3EXu7q9UYUzxfBcWLJWSmEt84bFANYhfpUUEv94cAg=; b=HjhGpkZ0v9boreWiWFI+dGKAM8ozfV6CTJE3B1ZKs7tNOL+jbJk8ty6YZjPEHyUuwQjn5VgXd0y4yOnyNcGDIfEhldTtDVy4/ihlXm0TaTS51hkowuCXUgAXUIgokso9CJQaR5BY3sEpJf2Mz7sV3M/RyLZRDborFRslSMzqmX05PYICxvzbIxrYdk7S3GEl3kLqMJahkOE5wUMbX8IlFReQ/Alm2GSFW8HM750npRtv3R9PzrLp1y9brye+ekDTd653psW67Uu5XyNghMQJCVkEOIiIYshttKvvGim2QILgYTPirwrT74gMTJDBjc/687SEdCiCejjN1hJ9JjmbNQ== 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=R3EXu7q9UYUzxfBcWLJWSmEt84bFANYhfpUUEv94cAg=; b=vKw8Vz5wNl1/tErRjHr56If6DpkQG2vRHdspVbO4Oj6xi2AU8VvZJYsQpz5DkPo4pH3QC26ObIdmSQzHlYjsY6Nx4E4teK41iWNIpyDjJBOLmilsoq4PY90C31A165GTJ/fc+Ls7ITbro4+Tk6Y9hUmYm8w/rkOPOLQ/58t78JpelYW/v8oPqFFhIBMCCRTnk6FwUcHMMxXATQXaZPLLVvtohC7Qipvyxo+sZzqgdXK+O1lRkXl+Kp0rFeVexSzCyLvvj4j3e7oD5I7/mD9liyS993NSXejIWWm35TdOZ4XjDT+nQOFaop0prq1uKHe9TTWnHifVFUGweHgj5vbcRQ== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS8P250MB0070.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55; Sat, 11 May 2024 20:55:47 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%7]) with mapi id 15.20.7544.052; Sat, 11 May 2024 20:55:47 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 11 May 2024 22:51:25 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [uOXzI+Xt/HvqmeOxuV+6/4xUz+cxZfnVwgRLIZ8qFXo=] X-ClientProxiedBy: ZR0P278CA0172.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:45::6) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240511205135.2411886-60-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS8P250MB0070:EE_ X-MS-Office365-Filtering-Correlation-Id: 5e894e41-2630-4c53-31e3-08dc71fcbb7d X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|3412199016|440099019|1710799017; X-Microsoft-Antispam-Message-Info: uj7HaX2FAno+9AEAbnHkZPyDQWtKrp5iAFtpENuaKcfJ97j4ftNjztERueosT6aw/Cn/frkNQV23xmVPpLk2BZqAulx3fHI7aA1uyAZf4k3+b/XAJiFeuD9pMiQu6okX8hKRj6KrpYszjDcf6VMKayYuMfLSiZACE/a4XtLS9hdxZrZXk1JfJfVl7yYNmo01iNTiMg5d4PLxuk330Th5H8khyoNDLf//qK2/ggGhcRSjejte735keA/1H/W1KRxVDNo1YiM7GZZVsR0j5OYz8z62FpqidwKO6rRCN5WjeT0u+M8D3MQPbMNmtnsnS+utEqR2ax1dj6YQ+JRa+U+h+qpK0ZKESFwdq3rmg+wdDMHv6gBf3RCdW6wPA3DJ0RB2VZqUgTxmBUDWtrR9EUbr5gyqa2Zp7juLlJXGE8RsoD2yPLZ6Xc8q2KpSw4a5QOpN151zGYOpns8wW4o4ZNJPiUV5O8yhwuju+mYXVwerDonsF8bvQ3qq+0KBtEv4+MscUiv6hORkBJBeW1IvL8fGkPgJbBowX1pQ4aqc1KYJx5Zrqbmq/hc9Ha6CrrThFWXP7l+2kfHb2oLNFR9uR69kiLtr8xENg03oMdfxym7vRAd94ow4DLp7oAtF4NvRlerC X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lStoFXNnMhde6w1Em9GakQFq9LJGYmKVDSBV4/2UdEKi7lrA1oTkbKg9nElzRL+VlXVb/3DKoIs6YHUD72t89plRe3DgDYMbeIQPV4eXzv0tp2nj7+KagHPvcdj0cBdbtcrn+LRUy0OXL5d7zYECXNJX7Ujgr5J8VYQr8R/38+twYPDBUVeewxmrQXYcSDTx8rb4pA3+q59pSn7xW2l5PLp+X1vnevQSqIVfSjxk1HUHFDTKJ0AVoHJetAM7FfsPBSdEqG35/Yfvra/oN6om0dtTi/fWZ2UjTmze2hDF6itHPc0gvcrmc8w4suC82GDQKI+wSdXXstgaSvEz4GK4xFbllv6SHepzaeV+mIT4hKtQMRl6m1mQkj3A9+zlCPVZOX6EcDRJnrn/QFRsUa85mqkFibCAHSNvG0f5uP1G3XY2S+xyKeTbLqxebPHou5hPH5pXVdu7VjT4X5bf9INcfkQnd01rOVbFrm3Lm5Qng5ZjPRv4xAq1RA2t3KivzQIc0M8NCIq13turWSiwUYGtxSoV0vRu0rWydctlzVxKhG/dcjsVbTY5vCa+wyudDjt86KJL3scnKolZNrEypbxwUBeu9p1XJxOFVoFxUJDMMYV5XxUN2r2RBRXGinuif6atghVpjQxnWIzzPXAPjFgmG0esLqNx4YLMbq0r+oh3a6CxOuxKXF95vn45/tGUQNSUa3oEktZm6PS2sISrSM3x/oQV79LttxS+2w/TYhCtDrVctdVYGImueHJkDRVjID48kV7yJQKJYKvMD517dcZGR4MXaaEUNogHap0lJ3ekH6YepeKcYYp1qZ5vaPGQLkPp3128IXpIDq30umsKyt8jLIh7zvLIE4MgNNedIIX3b0HWMsih07JcIMmorOi/UfWjJY7eLAJiQr/j/boHtekT0p3Ao74fabw9AU5RbJVfn6mukM5IU8Z8MOPeAIZCH4f8+eDMgs9rhv328LruL/W38175br6FM73Pb60V7PY7CkdEG+GxoQnWOPjqs7ULSXO+OaedLz/RHv9oOp8mmi5dS85YUzwU4Dc9o+kYfC/YFkWF39u0bbKZ/NZ/1hoKxBQQYEQSH9GUvX8kDWCv9aTmhnNhHkcGsWgW9o4hj+CNcMgwRYPR0J5lxAQWTLCshwmIJd3MbVJrpqJqwYw5G3Bu/RjGUrx1oE281dfTHtjleGp7pANeItjnBEfCZUn6oSv2zCCyuNHaupUt1I6Yr36htBuwVygB8/L8uMCgi74W8diAxpIuwyrgOmAHgBFh2IGoqvOkznnONqVDb7A0iy2Z5w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5e894e41-2630-4c53-31e3-08dc71fcbb7d X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 20:55:47.3510 (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: AS8P250MB0070 Subject: [FFmpeg-devel] [PATCH v2 61/71] avcodec/mpegvideo_enc: Unify initializing PutBitContexts 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ClxEZUKy8qyI This also rids us of the requirement to preserve the PutBitContext in ff_update_duplicate_context(). Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.c | 1 - libavcodec/mpegvideo_enc.c | 42 +++++++++++++++++--------------------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 89d19a743a..93df8a315d 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -471,7 +471,6 @@ static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src) COPY(start_mb_y); COPY(end_mb_y); COPY(me.map_generation); - COPY(pb); COPY(dct_error_sum); COPY(dct_count[0]); COPY(dct_count[1]); diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index aac1fad535..195d1e3465 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -84,7 +84,7 @@ #define QMAT_SHIFT_MMX 16 #define QMAT_SHIFT 21 -static int encode_picture(MpegEncContext *s); +static int encode_picture(MpegEncContext *s, const AVPacket *pkt); static int dct_quantize_refine(MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale); static int sse_mb(MpegEncContext *s); static void denoise_dct_c(MpegEncContext *s, int16_t *block); @@ -1669,7 +1669,6 @@ static int select_input_picture(MpegEncContext *s) ff_mpv_unref_picture(&s->cur_pic); return ret; } - s->me.temp = s->me.scratchpad = s->sc.scratchpad_buf; s->picture_number = s->cur_pic.ptr->display_picture_number; } @@ -1755,7 +1754,7 @@ int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet) { MpegEncContext *s = avctx->priv_data; - int i, stuffing_count, ret; + int stuffing_count, ret; int context_count = s->slice_context_count; ff_mpv_unref_picture(&s->cur_pic); @@ -1791,21 +1790,11 @@ int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, s->prev_mb_info = s->last_mb_info = s->mb_info_size = 0; } - for (i = 0; i < context_count; i++) { - int start_y = s->thread_context[i]->start_mb_y; - int end_y = s->thread_context[i]-> end_mb_y; - int h = s->mb_height; - uint8_t *start = pkt->data + (size_t)(((int64_t) pkt->size) * start_y / h); - uint8_t *end = pkt->data + (size_t)(((int64_t) pkt->size) * end_y / h); - - init_put_bits(&s->thread_context[i]->pb, start, end - start); - } - s->pict_type = s->new_pic->pict_type; //emms_c(); frame_start(s); vbv_retry: - ret = encode_picture(s); + ret = encode_picture(s, pkt); if (growing_buffer) { av_assert0(s->pb.buf == avctx->internal->byte_buffer); pkt->data = s->pb.buf; @@ -1849,10 +1838,6 @@ vbv_retry: s->time_base = s->last_time_base; s->last_non_b_time = s->time - s->pp_time; } - for (i = 0; i < context_count; i++) { - PutBitContext *pb = &s->thread_context[i]->pb; - init_put_bits(pb, pb->buf, pb->buf_end - pb->buf); - } s->vbv_ignore_qmax = 1; av_log(avctx, AV_LOG_VERBOSE, "reencoding frame due to VBV\n"); goto vbv_retry; @@ -3564,7 +3549,7 @@ static void set_frame_distances(MpegEncContext * s){ } } -static int encode_picture(MpegEncContext *s) +static int encode_picture(MpegEncContext *s, const AVPacket *pkt) { int i, ret; int bits; @@ -3616,12 +3601,23 @@ static int encode_picture(MpegEncContext *s) return -1; s->mb_intra=0; //for the rate distortion & bit compare functions - for(i=1; ithread_context[i]; - ret = ff_update_duplicate_context(slice, s); - if (ret < 0) - return ret; + uint8_t *start, *end; + int h; + + if (i) { + ret = ff_update_duplicate_context(slice, s); + if (ret < 0) + return ret; + } slice->me.temp = slice->me.scratchpad = slice->sc.scratchpad_buf; + + h = s->mb_height; + start = pkt->data + (size_t)(((int64_t) pkt->size) * slice->start_mb_y / h); + end = pkt->data + (size_t)(((int64_t) pkt->size) * slice-> end_mb_y / h); + + init_put_bits(&s->thread_context[i]->pb, start, end - start); } /* Estimate motion for every MB */