From patchwork Tue Aug 9 18:34:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 37201 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3d0d:b0:8d:a68e:8a0e with SMTP id y13csp426285pzi; Tue, 9 Aug 2022 11:35:49 -0700 (PDT) X-Google-Smtp-Source: AA6agR5hjMmb3Cf+XdxpuYO8vkhZsVCcFMGruJOCl6UXnyjSNXd8iQVZZyJyQoyTXdO4tTvug/Wq X-Received: by 2002:a05:6402:294c:b0:43a:91a9:a691 with SMTP id ed12-20020a056402294c00b0043a91a9a691mr23728151edb.182.1660070149620; Tue, 09 Aug 2022 11:35:49 -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 nb37-20020a1709071ca500b00730d5c78b76si2986803ejc.961.2022.08.09.11.35.48; Tue, 09 Aug 2022 11:35:49 -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=tdx33wcw; 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 0528B68B823; Tue, 9 Aug 2022 21:35:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03olkn2104.outbound.protection.outlook.com [40.92.58.104]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 290AC68B82B for ; Tue, 9 Aug 2022 21:35:24 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Sc1VpC5wR/GvS8QzcBPaGgAzzub1QWdDN20BXaNFs/qjRBrJ07HtLAKYIKK1A6HtBVH4qJUXCKo6rcAD3AKz091f6o9mZPqpOqUggpUJ37woakSdjM2ZwscUfy5zZQU7sv7u18Lb5ej1I9QjgNeYg3n68ueM8hQbavuun+jOzwlOOsgHrPGoa7Zv09iKfBr4KABMrzykWErHF+6skX+1/q8bWVPqUyVa+Nm+wUFnzrBalAyDK64ReAyqMwilPKkUd1TLGIe21VAv6t2xX0Py6zyJjt45cuKDG6fcELvDe4mgMW4mYUb/e3QmjV0yuviEowQrVOxDvTH5zhPoVLsXTw== 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=bO9+63grF14cMGBFNRTpfhWd9GwfBHbX26BddBYCJhs=; b=c5kr+uxUU/fczIEufifMuoKk5cVZjFgFuIzSalIpRoKAvQo90Is7n8e/yyfJNdLRX8sVSuFppCFKkHJmJyMQEzE+c9/SFyqHWrjZSE3pr1aJVKYP8y0pgmbWrGXt1pD52btzvWZzjZn+WIXGSuE2X00SM3zUW1FTN7lVl7mjPhrtHBV9rcSL8QI4/JQXS2TlfwZgJIXa61lW50PVOWrkF1yoprwVqD+qpgLNFpmzDrppMCzRjGEyy0T5IvyRBpGkNTQiOSbs9stZ6IrVJq/JpmBIbSrUEtRgUlqH4r6HQ3mHar9PC8FilPEpvOv1j+KzobZq8ZWAhY548AuKH4KjJA== 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=bO9+63grF14cMGBFNRTpfhWd9GwfBHbX26BddBYCJhs=; b=tdx33wcwF8wRjTfvxkqig4pvh3urtQId74It2S9nea9aq8L2ddguZ6BW1n/wnwJkqxgtrXU6mP4uwNv+Klxx9F41+VKLTm/k7O8SRLNipkuwDa2t/Rm9VAuM43Au+RkPFgIMLANdvOky2AXRKUBhK+W/+9yYKuqjl8DXK/oCdF4ruJpJLwjx8VPptKIhXC2pFUg9fb5ub8UibAim+xpqlURX5RT0o9+elcV03/N6uHIVlsMtUYPJRmn888ZIvgrz4OzljYN2zzSreTcYQgu6mvJ+Gn+gjgNg9nPxzE2uJuoJfpj3Qejn97qz7DZvzpzvMRL2mDjh6bxsqxErMv4kRQ== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DU2PR01MB8093.eurprd01.prod.exchangelabs.com (2603:10a6:10:276::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.16; Tue, 9 Aug 2022 18:35:13 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46%11]) with mapi id 15.20.5504.020; Tue, 9 Aug 2022 18:35:13 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 9 Aug 2022 20:34:50 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [lPWFHCZFJkx1i66covjWBbJ7IIN7RU0G] X-ClientProxiedBy: ZRAP278CA0011.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::21) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220809183453.220687-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b683a0e7-ed0a-42b3-48c8-08da7a35e57e X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEufWrdt/smugth52Ftjs6mlccw89na3oBW043npCWyEooQqc9Hc+0v7YH0CO7CUW/b1btz+jscvwWH/khsPEHNHtweLbA9oW9NfqVMebC6geEQnwbHIcgHIlrhAxHbglHVdWhVBLZw76oFOSxl8QQhzTJ3WniBTbI4ffLQCl+4QFVVW7B3CsRfuSTnnDhcrkCq+BzxH5NqIuSNvfqkC7ux/8sp2K1VuKXjjHYBf6n2r8bronqXeBA7YltkmO/KekCH2wVomBB2CHuTjFrEJrxI6CF3L0YcSQV0pZlOabAVnSnxmgbsKU7fY7pnbS4oPtkhOwo8awP6U0pqIi5WEM3P0XdtV9qtGi4k6MqmLG3sbVRYXqj+o63cU3u9CwGrG1tkp808mWetE6UEnBhLk+h1nsK40nkE/sQOBaTRUd1phkWc36qUGBECefSPLWGyKyF/pa1rkKWbVglk+DInjX6E7tXHUfm7/K6COAU631f6j/y5Lt2JZu0nLQ/47xb7XVBOt4JXs2XkszwrelNP0OelTUsYiOvEbOUxZYvSNExul4m8fxDfvtOGV6/Td2AscWzV5wJZuWJhQIj3E9FYCQwnwqmATt6YQxNGCTBcTzNdngoFj0mZICmN5B8CXPTXCALSJKYbgjN65A6BItUhrVOpCbkryLMJ+wDdr/X+CAf+tVDS5tbdIBbGIgo7OswHj2lGduimDPiWX8hN+D2VE3hvpJS2Y613uPvs9j3BAiS5k8wzfnNW++N2l7L6N98zAuQlp09PW7Cg/QmgZVSa1nSvs X-MS-TrafficTypeDiagnostic: DU2PR01MB8093:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +4bxvF9LHpk9CHfWaSpQnQOw9LzAdofA3oYjfLxtzAkY3RmjUotaVwa8un0SFxlbfogAGaPB5hIulG+uei92hoF8fdMjP77s5xcgSKqQz/fvELqyMZI7cImBfpNfn5LY66vZY09FzCRdgZQzLAQCPULaUCmfgzqnvqhxXIggW3xwNQ9pLs+4twjpCd/82BtW2/pDS+yQzni69rreInbY8PVWxqjNPuNZwNNrOTcuJW+QxMgKc3qxG5GKAkXxk+es5NgGIjToLXFm6LeoFgKPxDTgUMpiUtm68LB6W58PVyCCkjt18ueoxrfjp//b8+xtKjuJujeuIBPt93NGqNroHO2Y9ZWFQe6nH11zCbICFaaTLfPbBCr6ALF4HeFN2Jknoe7z77PTcbFUh1dn+9vhJI5utvzgDDPfblShWCe3UC6fur9gxoOp2dQ43aIPlmrl8VMnAYSt9EyNgQpK8h40lTrukomfTYQbvhbLJYVcb+pSoeNIBTDHis/e1OTCxX782h7gDxcsJQ52gMJGwptE9N9llnjiu4lqegWDbRRu5fqz5y3yG2DRydEYVxlNf9cj08LgflS+sygU4FXkjO6wM+ynUGiIYhAhxUYGYGpuu3KQ6sRrcBkiIYJDDzz11QtYRcjcuOjNK1nFN5eDMLX5iQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0US5D3Y+aMoTaSftdtHSRY7tkpm96UailMOMh6T+/4WtmHtu4mZgaMcFVb5cy+8Q8l9wg87RQAGii9D5g0QDtiKjnq2lWSBEM1Jn1XRD9Hyu1BI5Jv43SKIphapbe6d/uAIv1XCP6Iu8y9zrvBlT74Iel9IhtNp9fAFBka+Gmd9eywGndVMSFdMnXYDQy5vkGC8zfzjbrjDNFTSy1Oik1Hyvcv0XD0fmXt68LBwmIecztq/XIvDCiWagYzMEkrnwxSsbIhpMknZp60qip6bgNpwM4Jszjc1ORws2Tj04AbbUFAqCbPy1EdAUv0azEpz/OInO542Vgm45EPaDD4kUQpOtiOS9FmTTou8qXhgmKkpDpWe7JzmRvKwxPtbO7VnJgBzYe1pZTxPIWGHTPHsPGBb7bKkJajzebciJthtlxLVR//uzuOkhMds46GTIEnYLp/7hBspNjvx/m6quozaujI5qkzIIfu4YT+xU2fgExMyRY9zpzHQujEoh7CzoCt/XGUv09abZI1rx4rP50AF7Swy7uTw6wJ+xrX+BolBEeKE9aHc843BBqUcwaV4tnUVKCnKyNtKhXYVlL1VIlUJFRJdlnq5vaNEgSEoEGNJee6qjg408gYchM2Q29ll8VgKHxQo2joZa/NGUBjilZNpSnCsheweDLD1A3gk19cp6RmDz35XUIGFX7kNddrzFMXSituq96NbP60V2U2lT349IFOUF2ZRRnQQ6fXqbmpH2aW0k3xfuYW7T/6fizdQi+QmMqGWsy04jniscy5kOmC4S+mhbT4Xrr7XRObo9575rEVx66NyYIEcBs95a5aSd7OFjxnOYRA8ApVoI5lN3PEmL0yX6w7JbYi4w7dyK1XHjHr355sCjOfbZP74r+/95a8aaezPP6c80fYeu+AGnLCOsZZdctSIq9rFw175ATVuseen/EuI2eNVyxPtkSnuApRMzmylMeOzAna9q3LXRkl5eD2LQXpNV/tiYWlxqK3f46c8KhmDIsaMxNW+8gK+SuSmUljaD0sf+u8PDQt9/3a+vepbxEdLE/Z+ajRe4G+7lCoCHMZhtFibxFjAXhVveHTT+GN3fDWLmtWRy0GU6yQPmMzHdP+mIeXPZL1dbcF431s/tUIke1Enqo+M0AGpUfFDljgAD7p5IxYan7dJ8PvaUFU7dcmBExBhh9/bI7NhWckgb8aD0lQphJD57PAs4919E4BhW9gj9AH+4VTeFmoE1nuxCItbAF9qvp/dD+u7D4OVwiIDVzx0QhKLpinqlchEyVP52pO1PWBjpqRIRreP+CGIE1zD1WmcZQCX0l9E+4LA= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b683a0e7-ed0a-42b3-48c8-08da7a35e57e X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2022 18:35:13.1741 (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: DU2PR01MB8093 Subject: [FFmpeg-devel] [PATCH 6/9] avcodec/mpegpicture: Move encoding_error and mb_var_sum to MpegEncCtx 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: 9DtDv56KphqG These fields are only ever set by the encoder for the current picture and for no other picture. So only one set of these values needs to exist, so move them to MpegEncContext. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegpicture.c | 5 ----- libavcodec/mpegpicture.h | 5 ----- libavcodec/mpegvideo.h | 5 ++++- libavcodec/mpegvideo_enc.c | 25 ++++++++++++------------- libavcodec/ratecontrol.c | 17 ++++++++--------- libavcodec/snowenc.c | 8 ++++---- 6 files changed, 28 insertions(+), 37 deletions(-) diff --git a/libavcodec/mpegpicture.c b/libavcodec/mpegpicture.c index dc79662143..c57f149752 100644 --- a/libavcodec/mpegpicture.c +++ b/libavcodec/mpegpicture.c @@ -376,16 +376,11 @@ int ff_mpeg_ref_picture(AVCodecContext *avctx, Picture *dst, Picture *src) } dst->field_picture = src->field_picture; - dst->mb_var_sum = src->mb_var_sum; - dst->mc_mb_var_sum = src->mc_mb_var_sum; dst->b_frame_score = src->b_frame_score; dst->needs_realloc = src->needs_realloc; dst->reference = src->reference; dst->shared = src->shared; - memcpy(dst->encoding_error, src->encoding_error, - sizeof(dst->encoding_error)); - return 0; fail: ff_mpeg_unref_picture(avctx, dst); diff --git a/libavcodec/mpegpicture.h b/libavcodec/mpegpicture.h index 62589595d0..a1455ee13c 100644 --- a/libavcodec/mpegpicture.h +++ b/libavcodec/mpegpicture.h @@ -71,16 +71,11 @@ typedef struct Picture { int field_picture; ///< whether or not the picture was encoded in separate fields - int64_t mb_var_sum; ///< sum of MB variance for current frame - int64_t mc_mb_var_sum; ///< motion compensated MB variance for current frame - int b_frame_score; int needs_realloc; ///< Picture needs to be reallocated (eg due to a frame size change) int reference; int shared; - - uint64_t encoding_error[MPEGVIDEO_MAX_PLANES]; } Picture; /** diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 47619c1976..1ddf8034aa 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -236,10 +236,13 @@ typedef struct MpegEncContext { uint8_t (*p_field_select_table[2]); ///< Only the first element is allocated uint8_t (*b_field_select_table[2][2]); ///< Only the first element is allocated - /* The following three arrays are encoder-only */ + /* The following fields are encoder-only */ uint16_t *mb_var; ///< Table for MB variances uint16_t *mc_mb_var; ///< Table for motion compensated MB variances uint8_t *mb_mean; ///< Table for MB luminance + int64_t mb_var_sum; ///< sum of MB variance for current frame + int64_t mc_mb_var_sum; ///< motion compensated MB variance for current frame + uint64_t encoding_error[MPEGVIDEO_MAX_PLANES]; int motion_est; ///< ME algorithm int me_penalty_compensation; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index a34fb66eac..d45e15a039 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -1783,11 +1783,10 @@ vbv_retry: ff_write_pass1_stats(s); for (i = 0; i < 4; i++) { - s->current_picture_ptr->encoding_error[i] = s->current_picture.encoding_error[i]; - avctx->error[i] += s->current_picture_ptr->encoding_error[i]; + avctx->error[i] += s->encoding_error[i]; } ff_side_data_set_encoder_stats(pkt, s->current_picture.f->quality, - s->current_picture_ptr->encoding_error, + s->encoding_error, (avctx->flags&AV_CODEC_FLAG_PSNR) ? MPEGVIDEO_MAX_PLANES : 0, s->pict_type); @@ -2792,7 +2791,7 @@ static int encode_thread(AVCodecContext *c, void *arg){ /* note: quant matrix value (8) is implied here */ s->last_dc[i] = 128 << s->intra_dc_precision; - s->current_picture.encoding_error[i] = 0; + s->encoding_error[i] = 0; } if(s->codec_id==AV_CODEC_ID_AMV){ s->last_dc[0] = 128*8/13; @@ -3370,13 +3369,13 @@ static int encode_thread(AVCodecContext *c, void *arg){ if(s->mb_x*16 + 16 > s->width ) w= s->width - s->mb_x*16; if(s->mb_y*16 + 16 > s->height) h= s->height- s->mb_y*16; - s->current_picture.encoding_error[0] += sse( + s->encoding_error[0] += sse( s, s->new_picture->data[0] + s->mb_x*16 + s->mb_y*s->linesize*16, s->dest[0], w, h, s->linesize); - s->current_picture.encoding_error[1] += sse( + s->encoding_error[1] += sse( s, s->new_picture->data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*chr_h, s->dest[1], w>>1, h>>s->chroma_y_shift, s->uvlinesize); - s->current_picture.encoding_error[2] += sse( + s->encoding_error[2] += sse( s, s->new_picture->data[2] + s->mb_x*8 + s->mb_y*s->uvlinesize*chr_h, s->dest[2], w>>1, h>>s->chroma_y_shift, s->uvlinesize); } @@ -3416,9 +3415,9 @@ static void merge_context_after_encode(MpegEncContext *dst, MpegEncContext *src) MERGE(i_count); MERGE(skip_count); MERGE(misc_bits); - MERGE(current_picture.encoding_error[0]); - MERGE(current_picture.encoding_error[1]); - MERGE(current_picture.encoding_error[2]); + MERGE(encoding_error[0]); + MERGE(encoding_error[1]); + MERGE(encoding_error[2]); if (dst->noise_reduction){ for(i=0; i<64; i++){ @@ -3570,8 +3569,8 @@ static int encode_picture(MpegEncContext *s, int picture_number) for(i=1; ithread_context[i]); } - s->current_picture.mc_mb_var_sum= s->current_picture_ptr->mc_mb_var_sum= s->me.mc_mb_var_sum_temp; - s->current_picture. mb_var_sum= s->current_picture_ptr-> mb_var_sum= s->me. mb_var_sum_temp; + s->mc_mb_var_sum = s->me.mc_mb_var_sum_temp; + s->mb_var_sum = s->me. mb_var_sum_temp; emms_c(); if (s->me.scene_change_score > s->scenechange_threshold && @@ -3582,7 +3581,7 @@ static int encode_picture(MpegEncContext *s, int picture_number) if(s->msmpeg4_version >= 3) s->no_rounding=1; ff_dlog(s, "Scene change detected, encoding as I Frame %"PRId64" %"PRId64"\n", - s->current_picture.mb_var_sum, s->current_picture.mc_mb_var_sum); + s->mb_var_sum, s->mc_mb_var_sum); } if(!s->umvplus){ diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 53930f147b..4829172c2c 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -49,8 +49,8 @@ void ff_write_pass1_stats(MpegEncContext *s) s->misc_bits, s->f_code, s->b_code, - s->current_picture.mc_mb_var_sum, - s->current_picture.mb_var_sum, + s->mc_mb_var_sum, + s->mb_var_sum, s->i_count, s->skip_count, s->header_bits); } @@ -880,7 +880,6 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run) double rate_factor; int64_t var; const int pict_type = s->pict_type; - Picture * const pic = &s->current_picture; emms_c(); get_qminmax(&qmin, &qmax, s, pict_type); @@ -929,7 +928,7 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run) if (br_compensation <= 0.0) br_compensation = 0.001; - var = pict_type == AV_PICTURE_TYPE_I ? pic->mb_var_sum : pic->mc_mb_var_sum; + var = pict_type == AV_PICTURE_TYPE_I ? s->mb_var_sum : s->mc_mb_var_sum; short_term_q = 0; /* avoid warning */ if (s->avctx->flags & AV_CODEC_FLAG_PASS2) { @@ -942,8 +941,8 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run) } else { rce->pict_type = rce->new_pict_type = pict_type; - rce->mc_mb_var_sum = pic->mc_mb_var_sum; - rce->mb_var_sum = pic->mb_var_sum; + rce->mc_mb_var_sum = s->mc_mb_var_sum; + rce->mb_var_sum = s->mb_var_sum; rce->qscale = FF_QP2LAMBDA * 2; rce->f_code = s->f_code; rce->b_code = s->b_code; @@ -1003,7 +1002,7 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run) qmin, q, qmax, picture_number, wanted_bits / 1000, s->total_bits / 1000, br_compensation, short_term_q, s->frame_bits, - pic->mb_var_sum, pic->mc_mb_var_sum, + s->mb_var_sum, s->mc_mb_var_sum, s->bit_rate / 1000, (int)fps); } @@ -1019,8 +1018,8 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run) if (!dry_run) { rcc->last_qscale = q; - rcc->last_mc_mb_var_sum = pic->mc_mb_var_sum; - rcc->last_mb_var_sum = pic->mb_var_sum; + rcc->last_mc_mb_var_sum = s->mc_mb_var_sum; + rcc->last_mb_var_sum = s->mb_var_sum; } return q; } diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 72ed39c78c..a295ff8085 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1527,11 +1527,11 @@ static int ratecontrol_1pass(SnowContext *s, AVFrame *pict) coef_sum = (uint64_t)coef_sum * coef_sum >> 16; if(pict->pict_type == AV_PICTURE_TYPE_I){ - s->m.current_picture.mb_var_sum= coef_sum; - s->m.current_picture.mc_mb_var_sum= 0; + s->m.mb_var_sum = coef_sum; + s->m.mc_mb_var_sum = 0; }else{ - s->m.current_picture.mc_mb_var_sum= coef_sum; - s->m.current_picture.mb_var_sum= 0; + s->m.mc_mb_var_sum = coef_sum; + s->m.mb_var_sum = 0; } pict->quality= ff_rate_estimate_qscale(&s->m, 1);