From patchwork Mon Apr 29 21:14:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 48407 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp2272839pzb; Mon, 29 Apr 2024 14:20:25 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWK1tbpCBlOZ1Zp7FgfdvEkB4GzyW04bnX0qijB2n+DT902FE7OTnO0tSjJ1Z/WWAwQSZ+dovuAaqslyOSfQeM/+FY4lclQ+BawxA== X-Google-Smtp-Source: AGHT+IGR//8RCACbhu/WhTV1d9diCjT50qhNPt3N9FddXM1Gv/td51JjkkIKyP6A7mHXZbgP7Jlx X-Received: by 2002:a2e:7d09:0:b0:2dc:e69a:fdbc with SMTP id y9-20020a2e7d09000000b002dce69afdbcmr9217502ljc.1.1714425625461; Mon, 29 Apr 2024 14:20:25 -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 u15-20020a50a40f000000b0056e23afe278si14913100edb.569.2024.04.29.14.20.25; Mon, 29 Apr 2024 14:20:25 -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="QJ2xGE/m"; 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 E4B1768D61D; Tue, 30 Apr 2024 00:17:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2106.outbound.protection.outlook.com [40.92.91.106]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C176968D612 for ; Tue, 30 Apr 2024 00:17:34 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NgLkY5tmIWr6IApMGk9RKo+Q5E0Sps874+7F+nWyRSrWnop2ub/5wcRrRyfSq9jDUW3FRVoObm/r+dO7+8I6oKZYhiEyoMXHfdLal9jrN7Wp6YLFXcMnRN/qWSAlN9oNAobIySk7P+dvTKh5zgAYV3M1A2WpDtAcA7LxjRdkzhzHHgQWXBtt6aZsmnQCBlfSztZg3BfrDFxErsHXuM/CvR4ltxnkYW2g4O/4eOMRMh6Gj4hIv1/1rY2UXjjgLWbrr1kgqquKrfuywrAQ9HkVlMUTFkZvlJCHUiWmHX7n/hVS8pe5hy31sf9evhLOnvD+mQumdfSRtMuBsC+L0EL1IA== 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=/T7SkkjEJXiO0IYQIHQ1m2RrlTVpgu8VytCjEW1R+sc=; b=Ppu1lNhY8a3KELBGcHJm9aV6I2Ub2Np4PhpMIisjKxlN5Kt7hCD+Uyar1Oi1VWVBdQ8BVQotlur5HaSzLAV72hKW8IWd6sOMm5ExTvKQwSF35l1MK6CkNPrsDQWSkl3X/u9E172hpDAqfRva6n5/+gebmfdyUmm0bzyfXNPcmlVbZvquYijVZlicko0RrWsIUQvRCwKZkT6Hys+FYkwyO9Y9ElGnKbeltroSOQYfTEMGlPp4thVthanzm1UukIFWrQ3OARgzI0ZZuW+JEb2sHOV7DYpSgm22vKDhCPtF73XcyOvrJgTvYn9BYjMJ2vAOzKJlrYkT/OBdW+IFnzacxg== 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=/T7SkkjEJXiO0IYQIHQ1m2RrlTVpgu8VytCjEW1R+sc=; b=QJ2xGE/mo+Q/cAGyFKLjDlPqJ4QEdD8G4m3htrq4MCiKWhK2DBchM+LckmckxDbfr7I8rDsFR2sngr6JhvsfArGcdq9dLrBWKIfRI7L9LTV0WHxTmPpgGQoZZLoLXGKElzxzrp/ewtw5ht8x9atEVjSEiV5w3wPYhPn/U30d1O8tZqlpQ4ELJv7Q3Q1Sra6653i6aThBrIhn1OQs8vwtomGDgWNMK6sA391xRoS8Fy0HJ9EBGIC6Xv+ldFn6WsXiiR8PQZY8oezxrI2RNM4ljQZNdylC3WEbnZC76U0dwS06WFluokTVE6CQnLbktVcp0KBVZgkzz3h5mVQfRLynsQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PRAP250MB0616.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:297::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7519.34; Mon, 29 Apr 2024 21:17:30 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb%3]) with mapi id 15.20.7519.031; Mon, 29 Apr 2024 21:17:30 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Apr 2024 23:14:30 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [uCmprZ2fz4pPpXE1zqT9CbGdHqQqzBJCizyU/tenL50=] X-ClientProxiedBy: ZR0P278CA0199.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:6a::21) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240429211438.3274834-35-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PRAP250MB0616:EE_ X-MS-Office365-Filtering-Correlation-Id: d4e60203-fd50-42f9-594e-08dc6891c75c X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|3412199016|440099019|1710799017; X-Microsoft-Antispam-Message-Info: EpNbLP5JiZwp/SYRmtOvwOmS/Q9CEJ1ta1gLZnBu40A37NTDljzuDYjlZviL9h/y9O4wtIRmhgf9vBi922wXd0TqYWirQLmZKy9xwXmN0JJxEF/r2cezpC08a2TyQa3kbamxua8270Dt4eyDd6F/AI90goaJE0sNTrCYJUx507HboGRXe9aboR4ycHBQ0YoEgh5haNLHmwm1X20t76uF1jIeoEhdJD51LNG0WxkFUo5bych4hFWxNOKHQVS2tHJGMzlfAvrxXC4co8LXSWDhsvSkCO5OLTd9ZWMcHr0FMA8qm5rcnuaQshpHl4dvxh/DAGRMG5AmwgV0FSBu/2De5TOplmx8mZcxyhoLpwe9qzZXNoUwv8PdYxt5bAmjMulfmW+wqCsfOfdKvaS/xsV7Bd2o37d6fxNOU2nIZOC4zXJU/ugd2ZYl5UMRAbklNNiEu7/IL0j6VIFIjO8jJ4Ubnmh34m3BddPZeKZg4Ps1yYxd+Ea+5nqbjBsdzlrVkFYu3JTIJDSYQkV7xIjvTP88NvfSr2usB51kAgiXNr12D/DrmKr3mg7N0zrLzKkoNLWqa5sJEblqRJFjjF/rD/bnejd10su6syh/lNCwQ2S1VrIjC1u/s2pTRZrSx7bgp+G5 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 22IrvtHpIvYJqndo9Goh+0/xAJxLlUH7G5RVhk9euPel/vzS6rlvDH61zo5M6NyIBguqb/2xnkI0RS89zS3uBsr7ZtTJRlTAguMNWwvQDWZSNqQQ29u7BF6BnaOZrLLu4h3SlUdQe9YVIQ8vny51Afbh5Cy22IgyXr3fXpsHeozprKIMlXFt78p37uaiQHUHNtHrzID1ZGq3psmXY9E+yvE5/r1si9fcP+2iFLgkknDtBF1UmFUonjR89aEOUbq/jltFGocIrxGsl7sbi730VH9IGFGQuAxGlUJ5GHShfcFA1lhJqQLp1ppUEreN+CCWvw+/LeOML6/tOmBOkIuOknyMUp6umse5KyzvnzU7he+otTzbojZlilVWvt9QfInM0j4zM7f47u6UiS+lvTgjc2XbYBwjg8eS6P0aSQQJ0jn6IbRkYY6zVft/xN81Osl+s68UXsocnWIj5DJkEAMkXBmHuzC9NU6PnCSOLamSIRTnL0ImCuFJmuizoRQqjOihftmR605vMCTjra0DsD4wFYebp7CK/P8kcoaT3iTmpvezQBAx9AldPteX2pAoaHEB4INbW4pUBP0SwzMnzNOd9lJhdXecDZnCTAEPw788/K8SO8BjBOdLUXCCrpvAzYGQXbzp1aZ7tO666IVLw0gz+rvj6Qxt59Lx6BYXwS9GqhhzWImcvd0CP22NmC8t+gOiBZGXVb4+xIpPuFbUmT0Nc217Vk1H1uowsGrL+rmtf5BOZWT2lWpX9YtWv9+7U1TuL5Whd0VI9LKbTc4AklnDOJrEyWdVyGrX0pgJurw2Jim1qMyBQJ6kjqxoTwHjlNEodQ/wAEm1NNYN4pNsTrnaoEI/XyCSEBEvonpiXWviPDaLVhNFcjvrTpcgqhXWbOzZEFYx7XBteWSlN6ZLtkBTyJH/efFeLjgfByraVnKzuvPPQIZ6o/YbaJbQLkUP6tqmjZ+ZETwANoXELJ7q2Wl1sNNwOUWZfXfOACFy4vxAnWlG2D3hCx1G4Bz6PT6u8hpIvsnMvPZajGfwhZO8hgFhbmfca3WIoMO+RREU4h1EFhvvUFeZiyOuAmVn+pHJWOLXxUr5Ww42yr68riwVlzA3Vp0b2oa7qtvdYHtdF8mpORh5AzPIjPO2ugoWscGlzvvAYUWSX3I0vod4HJSBSwo882MFOxFGyEgYdHIeND1OdJG53ow07u9xZksxiYRuvaQKympLQ1/s4Xpy83KG+E+QyMfqcxhTOwRFOJbe2HDsfCy65zpaRS34FcNCQ9oSFci6KPOZ6t3ZxSbbET8bxfE12w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d4e60203-fd50-42f9-594e-08dc6891c75c X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2024 21:17:30.5638 (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: PRAP250MB0616 Subject: [FFmpeg-devel] [PATCH 49/57] 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: qfjuXRiJu+IU 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 f4ad08f25b..b5c3de85f3 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 2bf4fc2cea..ddd68f2da8 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.b_scratchpad; 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; @@ -3568,7 +3553,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; @@ -3617,12 +3602,23 @@ static int encode_picture(MpegEncContext *s) } s->mb_intra=0; //for the rate distortion & bit compare functions - for(i=1; ithread_context[i]; - ret = ff_update_duplicate_context(slice_context, s); - if (ret < 0) - return ret; + uint8_t *start, *end; + int h; + + if (i) { + ret = ff_update_duplicate_context(slice_context, s); + if (ret < 0) + return ret; + } slice_context->me.temp = slice_context->me.scratchpad = slice_context->sc.b_scratchpad; + + h = s->mb_height; + start = pkt->data + (size_t)(((int64_t) pkt->size) * slice_context->start_mb_y / h); + end = pkt->data + (size_t)(((int64_t) pkt->size) * slice_context-> end_mb_y / h); + + init_put_bits(&s->thread_context[i]->pb, start, end - start); } if(ff_init_me(s)<0)