From patchwork Tue Oct 11 13:18:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 38694 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp861319pzb; Tue, 11 Oct 2022 06:19:20 -0700 (PDT) X-Google-Smtp-Source: AMsMyM58qKegdt+mCrZIW6Z9qetwN4gS/oHcxGHpD1dryOQ5RRB5KRTrhCOqSdslYoJwGjOkawMu X-Received: by 2002:a17:907:7f93:b0:781:dbee:dece with SMTP id qk19-20020a1709077f9300b00781dbeedecemr18806959ejc.323.1665494360608; Tue, 11 Oct 2022 06:19:20 -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 w7-20020a056402128700b004597f82e556si12004667edv.201.2022.10.11.06.19.19; Tue, 11 Oct 2022 06:19:20 -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=L1dzfguJ; 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 D735468BD11; Tue, 11 Oct 2022 16:19:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073056.outbound.protection.outlook.com [40.92.73.56]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2380268BCAC for ; Tue, 11 Oct 2022 16:19:08 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OXsqbF16d5STsvTN7odNzqh4SMOp/G0xmjqQyLleOvh4zwuz4xwX90dY0cU3Wdp9SuoIh3Ga/zY+EZCq8+fBig0NS6ixts8u3hmNNIYlXwi+DO9rN52Afmk+CtmYO9aqJTXDhNZfIfp0nLvy0wwQZCELnCDU+AXLwKTmWAkLHqixk6o2O3c+hZMLAP5bjSi/p6qDPBegqv7n/AQ1s70nrtnUilFIYp9rzHGCuYa8e1lT27rw3ZYNVSPeG+YH0TOTfM3dNiZSop1pWnP1YhjuVugr8V4nZ31M2hyQWa/4qqDVf57PueNNlJVjqNQtg33az0ROkwRZGpMFMJlHqtlmCA== 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=B6dPaxw6zZBtyLkxk5kgxE/uTbSeTgVRKb3VUxo2Ixo=; b=SyfZHFzgIoE1TWFqjnrtWN1zenr6eJ0u/Qo93XixdRwX0Q9IKZSgoU2rhmq+Dm2VNnh01R6sczTCuuSFF6vjlUBtSKnQiwjy7/K9jEaA5RUmJZ/aXlrohE0IlyBCdgNNaDVP+t5c/4riylzzRQjfj5zgQJ6tzuTcaJSP6+v4MGdWbF172XZbs0GOGn3sLqFLb4WLolaQx4WMTzcOUbvPcxtCbBIP3MitFFEVf2Zo10tzwuYxBTyuwACMQG4Q7drWxMR9T5NmbsPUV8Vdu/usDlIhtyzrk+HY4pxd1XLB+F6+7vHMZUOnNojoUEnllM4IFsu642a33/rL5reoKzL2Ig== 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=B6dPaxw6zZBtyLkxk5kgxE/uTbSeTgVRKb3VUxo2Ixo=; b=L1dzfguJ6iI3ab5Ty9LyxBn6WxfKZA44zVYYvahc0SVF3kwIrPLHwFpJ8SU5ciOc76cX6c7OuyNrwiPx7Ti8zpOZ4c63fcW60AxF2ss3enfpslu/ev3CWgPlurDcg4LmWrNv3pJiPEJqNHdO9W4r9UakalBc5g23FBP36nN027q2xuFEXd0flCKenvp+8M6wkpypcOdppnSIeAtfPVHnFJTU9gFrrP/ARy6S41j68z40Xz917rF/dirRqGB/K0wrZHHJagysEaSrmo296bf9A1K3hw5efojddcyIu1DY6sae395RzYkTIpd2Xl2qYZNrh8J2lerivE8J+jAUGrK25g== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0340.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.15; Tue, 11 Oct 2022 13:19:04 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f9d7:680f:70c4:44fe]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f9d7:680f:70c4:44fe%7]) with mapi id 15.20.5709.015; Tue, 11 Oct 2022 13:19:04 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 11 Oct 2022 15:18:48 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [yVUN+c+h1tz1tEisZuu61RZJhxe6+s//RtsSG8IqZJM=] X-ClientProxiedBy: FR3P281CA0048.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::20) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20221011131848.798459-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0340:EE_ X-MS-Office365-Filtering-Correlation-Id: f3e7fc8e-8987-4d2f-3241-08daab8b2b45 X-MS-Exchange-SLBlob-MailProps: ZILSnhm0P3kF9Z1W9BPVdBUiZmKrnp+J8CaVNoelKeQz9b1lBDJICTKpc2RB+3MqnodhIxerRPcgEnnB/RDNyVA3egfYIQpdwauzboyrd2qswUaL7aVa6A2Ftl75NrBugEIZ51Ovom01SdbLDOmOP2R+JpcvNeDE1ndz5erFyle2M7PMPyFIu5xYHGs7QeeNDUsu+jOslqq0hQwTOlwdNCsfI0wCMkWbbYELy3cLPn6GaBRQ6FnN/GiEwaYiCgYNKxgezIYFzGkzblJ0PpJaxY7FFcJme4lvR4Hb6r/RoO8lgRqyk5xqkr3UotnzkWX23LGvfpIZtlaafVQeVyF9Zu8dr9lKSklHSxkdDLpOj19N/BjbS/ufT1AXeEqdLUlceELaSn4y1UCh7OeeXDr8qiiA6XK7LdSPRCei6Aby2NegqMTRJEqTRFCY2w+8ZCTm0iwHIm1k3ztZKRfEdVupeS5uDpBh5buL+8ffbhPbxSBNNbFHqcDX9Jz1jMlx2JbUqIKZRK1E9PiJiBt1ff31lSwIOKqB5+cj0uRnuBmkFVEuUHZEwHi+lmZR7KZHVDrEY81p4XLfDjWykX6GTTDgpN/ZW8ZdRV4qFFDCPuG4jCGP/LA7BMJfdfpRySAWVpI79fZudHQxlvzPoxBxXIyOhIJopOnC146LyUTCdNH4fTt94Jw3F1sl+dQf/CwrVIfIlolGpoXRNVzyt5jwPGchHacGjWfz6ptQWhnHTmTl9wzLcC7oZs0fishVt1u2wHZRj702f9USfXXsauo8NUeNeGgIX9KT0D/E X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vx+rRei0coeKiMkTib8pg1T+EP3YjRfHphnrG8XDAG7qEiks0dgx9OMRA0p/cUr3cIW000bSVj9k5xTGg+7tXs+HE7i130tjhFUcvHSSiKqm0cA/sQ0fSHwOvcBgHXHosf/wvgw0BMdOpGt3Hwf+giv3vxy5vw7/RDqGRpJKiS8MHsD+RULONNP3Vfchhb3EgtRIlgn2kKB2n15E+N3gozsSEsW3TdSptXpcolV0hIz2OWH9mFCaeOYgwqDDTkjfMK27kG1DSLeX+XQ3qOCtZutOn7JGS63Z0711AE3DUxvgvqr/lzjVVvy368AvokZgdTOuKNbimwBCYm2BAm2qa/YJycYexmEB6N/F3MBaJc+Z68Wox+DOWRqktPwyhnQTeAicnRr8snVmr7jaBZXJess3ZiltlTdqHVcxv/hkXMOi9MJdaKKUFnx0z08O6WNRZIzUkT2nQO+IuchxqYvLk+yjlfK0YAUzwVnYX4FQvsm+vcTkClUoIF2uwOnOSeI3qQTg3DUxtdKj9wFPB+xMTNTVdsC4AehsTb+dwdWpy+HfnYR3D/bk+J/6xAzkSRS8ZICzIzEnKXep0diUyNst2TkFOTgZMA5E1uDqfS/f6ZxpIyGSx8BNwghm2zcfmtrPvoOnJiET7v1dkrIv+Yztrb8wf9HpeSTYVNNao3dg6JcfLw44F5jjfbU0cLFPTWtC X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6whZTtc9Ym1kP6I/HE6O/9eWnnj3gbHvJd3Yf/o455qTWvZDFs76LSebMNJo6Nmbxo6QbUtWTH/TWJm+OzGKGI+adBnsnM2lq/jHokCgKb0XS/pGCmY8Bv91s1aBxb1HLpRpF6kMFemM8Am172H34DN2BtNvuXNcRpBxB/ArEgJ3rO/BQm/8Vikfc7ejzRymSsCIXZde3JtYub+8PJWDKE9xeaQIxSXTmBNnBcuDOk6uN6khLBY9i2ngPHqKGFKr572VlwZFE4sbnkh43MHCECLWVtrB8+DbEK0TgT9tNY/BOXgeHGZ+/RfXvWUuQIaoyXbuyiNHnig5OobmGtVbe5V0Cfmxt18sh680tyLbHC+c8vI24nRU8MYzzdHwdukv6/YB8KyqHCst4vCO4L88UVrX7IGnzvWCfcqaKnC8eiV4hOsrUKtrZIj7IrbFy3JIW/9vGdc7+PWhy4kx8OXvbRgNh7Ivnv9CiUlaWdGOXf9VXyb8l65NrnhFtefe0/YRQW2/7oN6K249kAVOyhO3r3yQne0valENwmvsC9DyxzEEBpzDNoBjd4bHWprGWNEZQ3Ge9Y7GvXgE1U54XUkHN17jVCyORVdz4X1BRUNzbkAV1X1KW4zxASeLoeQsmX0KzpMB9SkhnvQftK0dqIe/xBLccYLKJYdQeX4v6SQnJaAKAHJ3KBcFt8LlTBljj7jcToPL8SQvWNTdcobRWN9ljZme9Z7F7RBUdssX5stE5KWp7RLA/kIgOsM7IiAOsfRfRee36SiN+3IwUKJo3v64LidXfmeT5KsD4MTJjX1btRMFQDnTPSQSrAXj6xWo5xO7Ocb8kfRavS0Siu/T2bs1sW0gJOaSHlAR7BjdBS11SmHkP6o1JUpUMyWh5a9iRAkTMqEu+MYJY5FF24Xmztmwg47q7a8WBLF/aE2DcYKjI/PVwLz7lE+Yq/3W2VZAxA89ewTYwALsOpxVvhUMBdMnfJ3CvYdtT7HJpeCbAybhKv9moSkY2enge3YIhD9FIoqx5mES1ThM4Pj7baWWLuKHv4zEwXXgQuOSN/g6trZiycOsuZtbcjpvtKWSAD3qSUxKlvL94KlcOKE0rtG9F7vH8pDUefJ9elerhrCiAXeMyJHoMhL0LEEUD7SipXG43Aqyq6eNkUAuCnGdjppOgJ/2oP9iKZBDsupDDsBMAWsr+B58CosECk2pHkms0HXUzTMZ2AtrhVIqhZxHL5bO8Rf37ZiP2unWXiVJEpHuP+LaSDq2T1vUCeI9NXiFV2OWIDkeTuQkmGZiWG5ZPvWk8HwjijUHI7CxZt3LCjRoXK2ljfHMmjhO262bvaxoJ9ajJgvy X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3e7fc8e-8987-4d2f-3241-08daab8b2b45 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Oct 2022 13:19:04.3136 (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: PR3P250MB0340 Subject: [FFmpeg-devel] [PATCH 4/4] avcodec/svq1enc: Move PutBitContext from context to stack 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: yy9qbNWq9oS2 This is more natural, because said context is only used for the duration of one call to svq1_encode_frame(). Signed-off-by: Andreas Rheinhardt --- libavcodec/svq1enc.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 67a6de5cc0..75adbe7ea0 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -56,7 +56,6 @@ typedef struct SVQ1EncContext { HpelDSPContext hdsp; AVFrame *current_picture; AVFrame *last_picture; - PutBitContext pb; /* Some compression statistics */ enum AVPictureType pict_type; @@ -93,38 +92,38 @@ typedef struct SVQ1EncContext { SVQ1EncDSPContext svq1encdsp; } SVQ1EncContext; -static void svq1_write_header(SVQ1EncContext *s, int frame_type) +static void svq1_write_header(SVQ1EncContext *s, PutBitContext *pb, int frame_type) { int i; /* frame code */ - put_bits(&s->pb, 22, 0x20); + put_bits(pb, 22, 0x20); /* temporal reference (sure hope this is a "don't care") */ - put_bits(&s->pb, 8, 0x00); + put_bits(pb, 8, 0x00); /* frame type */ - put_bits(&s->pb, 2, frame_type - 1); + put_bits(pb, 2, frame_type - 1); if (frame_type == AV_PICTURE_TYPE_I) { /* no checksum since frame code is 0x20 */ /* no embedded string either */ /* output 5 unknown bits (2 + 2 + 1) */ - put_bits(&s->pb, 5, 2); /* 2 needed by quicktime decoder */ + put_bits(pb, 5, 2); /* 2 needed by quicktime decoder */ i = ff_match_2uint16((void*)ff_svq1_frame_size_table, FF_ARRAY_ELEMS(ff_svq1_frame_size_table), s->frame_width, s->frame_height); - put_bits(&s->pb, 3, i); + put_bits(pb, 3, i); if (i == 7) { - put_bits(&s->pb, 12, s->frame_width); - put_bits(&s->pb, 12, s->frame_height); + put_bits(pb, 12, s->frame_width); + put_bits(pb, 12, s->frame_height); } } /* no checksum or extra data (next 2 bits get 0) */ - put_bits(&s->pb, 2, 0); + put_bits(pb, 2, 0); } #define QUALITY_THRESHOLD 100 @@ -298,6 +297,7 @@ static void init_block_index(MpegEncContext *s){ } static int svq1_encode_plane(SVQ1EncContext *s, int plane, + PutBitContext *pb, const unsigned char *src_plane, unsigned char *ref_plane, unsigned char *decoded_plane, @@ -425,7 +425,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, int score[4] = { 0, 0, 0, 0 }, best; uint8_t *temp = s->scratchbuf; - if (put_bytes_left(&s->pb, 0) < 3000) { // FIXME: check size + if (put_bytes_left(pb, 0) < 3000) { // FIXME: check size av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n"); return -1; } @@ -496,7 +496,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, if (score[2] < score[best] && mx == 0 && my == 0) { best = 2; s->hdsp.put_pixels_tab[0][0](decoded, ref, stride, 16); - put_bits(&s->pb, SVQ1_BLOCK_SKIP_LEN, SVQ1_BLOCK_SKIP_CODE); + put_bits(pb, SVQ1_BLOCK_SKIP_LEN, SVQ1_BLOCK_SKIP_CODE); } } @@ -521,7 +521,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, if (best != 2) for (i = 5; i >= 0; i--) - ff_copy_bits(&s->pb, reorder_buffer[best][i], + ff_copy_bits(pb, reorder_buffer[best][i], count[best][i]); if (best == 0) s->hdsp.put_pixels_tab[0][0](decoded, temp, stride, 16); @@ -630,6 +630,7 @@ static int svq1_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet) { SVQ1EncContext *const s = avctx->priv_data; + PutBitContext pb; int i, ret; ret = ff_alloc_packet(avctx, pkt, s->y_block_width * s->y_block_height * @@ -660,8 +661,6 @@ static int svq1_encode_frame(AVCodecContext *avctx, AVPacket *pkt, FFSWAP(AVFrame*, s->current_picture, s->last_picture); - init_put_bits(&s->pb, pkt->data, pkt->size); - if (avctx->gop_size && (avctx->frame_number % avctx->gop_size)) s->pict_type = AV_PICTURE_TYPE_P; else @@ -670,9 +669,10 @@ static int svq1_encode_frame(AVCodecContext *avctx, AVPacket *pkt, ff_side_data_set_encoder_stats(pkt, pict->quality, NULL, 0, s->pict_type); - svq1_write_header(s, s->pict_type); + init_put_bits(&pb, pkt->data, pkt->size); + svq1_write_header(s, &pb, s->pict_type); for (i = 0; i < 3; i++) { - int ret = svq1_encode_plane(s, i, + int ret = svq1_encode_plane(s, i, &pb, pict->data[i], s->last_picture->data[i], s->current_picture->data[i], @@ -692,13 +692,13 @@ static int svq1_encode_frame(AVCodecContext *avctx, AVPacket *pkt, } } - // align_put_bits(&s->pb); - while (put_bits_count(&s->pb) & 31) - put_bits(&s->pb, 1, 0); + // align_put_bits(&pb); + while (put_bits_count(&pb) & 31) + put_bits(&pb, 1, 0); - flush_put_bits(&s->pb); + flush_put_bits(&pb); - pkt->size = put_bytes_output(&s->pb); + pkt->size = put_bytes_output(&pb); if (s->pict_type == AV_PICTURE_TYPE_I) pkt->flags |= AV_PKT_FLAG_KEY; *got_packet = 1;