From patchwork Fri Sep 17 02:07:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 30295 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp1784404iov; Thu, 16 Sep 2021 19:08:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwcJTzn88a02rU6WrYCYH14fqoGhO/2H5qC1xFqNpx1qaPH4mUWFXJ57lcWnUkLAyIZtam5 X-Received: by 2002:a17:906:adb:: with SMTP id z27mr9929043ejf.235.1631844531814; Thu, 16 Sep 2021 19:08:51 -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 h25si5369250ejt.16.2021.09.16.19.08.51; Thu, 16 Sep 2021 19:08:51 -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=hGc68pE9; 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 0751068B10C; Fri, 17 Sep 2021 05:08:31 +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-oln040092073103.outbound.protection.outlook.com [40.92.73.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8F92668B0EB for ; Fri, 17 Sep 2021 05:08:24 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P7Ik+v8KY/w0tZ6YnvGKaEY9D8ZxhpWb8OaGZY+ecGqAibzV1/cEA+m8XtxzEwFi4l3ZDWZeqCBKJ1wmf97ER+aOxIyN1iX/gSMSN+/oC+DCl7tt0qGDO2JyrweuqFaSSnTLPu8E35So0GyewmPemA3vo4UrKtBfFTuO33D5a/H43rEhIwORKSjlWvuvWEDfe6GzmaS3+GJTRLfPd+oWWZE3F1WKLQa0bFfWQnWkTGBQe71fTofI07MAolryv99A8RrWPjR7wBIgv5klNn4Psw+hOf4P8yKbSFk5zNnEUb95kj30PGeyf6nCm0dkEndxPM64JzuQxMJTD/zAuZ8Xhg== 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; bh=+gL8FfE469+URJe6mm9LQlwwmzV6YoDpz9DqWQD5YfE=; b=GT0w6WAoZ9KofVJNpUv+p+0rL/YiJBqr5pfOhEjZPBYNyQnav6fJuvAqFKpOzufN08JTlLRZcykefnGgrDL+oj00eq6ThAbFzA0OK6cYTIETWGXxPSGRAs6+je0BAERaaxwAbF5UOcCFl2HgGUSVs4c08Tt/BmVb7rHYq5b6TIlJkGvU74jTLrkfao1QrBofqNb2Oedmu7VnWHpWp5odbbqqeCVkFoATgPekNAGgCJQaZYomlWQ12zpCigxw3EsoiCEd1jmbq6n51WTneqcZ4F3GojGwcIpRCUE9YDiUUkPIRUjYIV6EqrHJ7zVnEr/1fPF4kccJMwB7bV/eBumCiA== 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=+gL8FfE469+URJe6mm9LQlwwmzV6YoDpz9DqWQD5YfE=; b=hGc68pE9ZUrIK3+gxOogdNNHKs0oDPXggrnU0h3XLHBY3ELM9RlWED4BTT5LAMINUUBrGWqYp2h46FEpgQQDrsC3Iq669AZjvvgaC30mTstI+jUC1yGXq/19+SiQWzbHZg6EEZOVqhPkHOzcNuZmWXup7X1oVnrgjItofI0nEZsL2DGLZ1IcWvcTY7BJeZjQMjA5n2PVcNgIAM44VfOnlJ+vNLlCfAOe9mUPA54LjvY7P2zvzL6TxyDBOkwwTnmUvbOKAN9kbkg5+a2PsRWJ1jX54Sm4IZ/rnw7oxDbTKerq9/Ys6fnC5yLec67/mnnjCOj8Er4zwYq576vfgFzY0g== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (10.141.218.86) by AS8PR03MB6758.eurprd03.prod.outlook.com (20.182.229.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14; Fri, 17 Sep 2021 02:08:18 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::787b:2156:ca99:fe00]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::787b:2156:ca99:fe00%3]) with mapi id 15.20.4523.016; Fri, 17 Sep 2021 02:08:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 17 Sep 2021 04:07:58 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 In-Reply-To: References: X-TMN: [nSdxn3egzY4rraiHeZCCJfIusBn7LY5a] X-ClientProxiedBy: AM8P191CA0018.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:21a::23) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20210917020808.275498-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.142.38) by AM8P191CA0018.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:21a::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14 via Frontend Transport; Fri, 17 Sep 2021 02:08:17 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4f70e7e7-33ac-4e45-3770-08d9798003ed X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQB5KKqMro6wr3957+0yV3Ui5vWDqr7lxQlKr1dhBiS/V7HhYkQOWWFtH84/ItyHrCFEX0A5CRIUrzR5DxCebhJYkipS8yUsjGtf4iNiUNDKp1VsypHm998QDONjvWoZpVMEIyIpjkdMZYmcyPOPTy+wSwMOdSJZO2nlzb6KwB5QhjIZRjj8Zdyy4Ju1ctLrn8JBkUOBfUPMyH3LQsYRy5KBtEP0d9crs1lY8Fye2/N+pfKK6OWCyCB72Pgvc23OaEdTT2p6Zg9+8NXAAqtd35Lw9X0vRaFF4ih2fb+oHsuRPS4uVmm81a6RaQ6mTi3WPZtbjEYkaZw+RIwUNg0cOKkb/x62Xnkm2E0ksUGkqq3MSSNbFX49ke3toFl87p0S885+L9maVjbkMEpoW4MP2TbpPH+LYk8L9Bz+ct4R5aUpOCEJI1bR+0XT6FyoQEWDdUk7I+rDTg86XGt+Aqp0aER2oc+RTdnO1QiQxjPzXDihRYNHe695dIycgfGGB4mG7B+dxP9RJ31pRviwamDcQvrX/+1aOMyNxquCZNa9y6b7zXfLTV4eZVI/87aino49v2+OIwsgAMmX13iXta58+0E6IEsmxZhFwXuf+ZyK52fK8U5GmLWjO6jTt/BqeYytSFkFSDtqm54vwaL8DJO3Ah2S7p0or2HAie/D6ij1nCudy2O02Td/0usbmRw4Sn4lt0kgzbiKfeFQ7wEVlZ0iGFJq+88hFc4YGovRv77KcEh7u2YtVzNb9Wmfp+g2cDNQV8= X-MS-TrafficTypeDiagnostic: AS8PR03MB6758: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4+TEIAWvN3yetNH7vJWpoIKqtxbFAtJ7aU+I8CxqikxNMLCxDLr/ww34YPwK7TfIFDiIgapULgURf22irni24pzEyOC/s0O/zbRIroVFZZK5kPQfT1TqgAeylCVe7FoSDlILIuObXC4uKIcni8XxPKO8H12PAN3Drkl1qZcxyPfJHoyM4mU+wh/6p8KjKQhLwPS1Jm+78qRP+b57MEpIq3prRUUyE2n8auuyOMJOKTagcxQtU9B6H3xXAqnkOrHAqoR8MTHVdUYUFux2Elr1BF84XHGXdLxLGouCG7XRne+ES26EUuDTlyWQSxpxmJxYV7RgslyyCfzijZnew/avcS3BCrVP7hljqMMe8wKn2eocCeMskNWM2dIKJkV4q2xje2Td2GvxrJczw+0miw1KtLiA5CvkSf5hR2v9cWY2FXIe6KfstefC6xx+cz76zqpn X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7RsZFmCspNJ4BsT+iE1yNdOrjo6EdhnRbzXZuQ6yBrYo1wHJvOi8yr1I0bGVvDSWQGZGpy2RcMwiUXbX59RxVEl00Y6npjVaOB8ease8RnQLnXTnb2J/xwtyA+f7pFYQmo9Tf1Z1KwEygH4RQg14Zg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4f70e7e7-33ac-4e45-3770-08d9798003ed X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2021 02:08:18.0389 (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: AS8PR03MB6758 Subject: [FFmpeg-devel] [PATCH 03/13] avcodec/elbg: Merge avpriv_init_elbg() into avpriv_do_elbg() 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: uha38k1ETLPP These functions are always called directly after another with the exact same arguments. This avoids exporting a symbol; it also avoids having to perform two calls for every caller. Signed-off-by: Andreas Rheinhardt --- libavcodec/a64multienc.c | 4 ---- libavcodec/cinepakenc.c | 1 - libavcodec/elbg.c | 29 +++++++++++++++++++++++++---- libavcodec/elbg.h | 12 ------------ libavcodec/msvideo1enc.c | 3 --- libavcodec/roqvideoenc.c | 4 ---- libavfilter/vf_elbg.c | 3 --- 7 files changed, 25 insertions(+), 31 deletions(-) diff --git a/libavcodec/a64multienc.c b/libavcodec/a64multienc.c index e2dd85b756..9ee0b07463 100644 --- a/libavcodec/a64multienc.c +++ b/libavcodec/a64multienc.c @@ -333,10 +333,6 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt, buf = pkt->data; /* calc optimal new charset + charmaps */ - ret = avpriv_init_elbg(meta, 32, 1000 * c->mc_lifetime, best_cb, - CHARSET_CHARS, 50, charmap, &c->randctx); - if (ret < 0) - return ret; ret = avpriv_do_elbg(meta, 32, 1000 * c->mc_lifetime, best_cb, CHARSET_CHARS, 50, charmap, &c->randctx); if (ret < 0) diff --git a/libavcodec/cinepakenc.c b/libavcodec/cinepakenc.c index 41da231dfb..8e8b73ce1d 100644 --- a/libavcodec/cinepakenc.c +++ b/libavcodec/cinepakenc.c @@ -761,7 +761,6 @@ static int quantize(CinepakEncContext *s, int h, uint8_t *data[4], if (i < size) size = i; - avpriv_init_elbg(s->codebook_input, entry_size, i, codebook, size, 1, s->codebook_closest, &s->randctx); avpriv_do_elbg(s->codebook_input, entry_size, i, codebook, size, 1, s->codebook_closest, &s->randctx); // set up vq_data, which contains a single MB diff --git a/libavcodec/elbg.c b/libavcodec/elbg.c index 3ca67b400c..b563254bbc 100644 --- a/libavcodec/elbg.c +++ b/libavcodec/elbg.c @@ -332,7 +332,7 @@ static void do_shiftings(elbg_data *elbg) } } -int avpriv_do_elbg(int *points, int dim, int numpoints, int *codebook, +static int do_elbg(int *points, int dim, int numpoints, int *codebook, int numCB, int max_steps, int *closest_cb, AVLFG *rand_state) { @@ -426,7 +426,14 @@ out: #define BIG_PRIME 433494437LL -int avpriv_init_elbg(int *points, int dim, int numpoints, int *codebook, +/** + * Initialize the codebook vector for the elbg algorithm. + * If numpoints < 8*numCB this function fills codebook with random numbers. + * If not, it calls do_elbg for a (smaller) random sample of the points in + * points. + * @return < 0 in case of error, 0 otherwise + */ +static int init_elbg(int *points, int dim, int numpoints, int *codebook, int num_cb, int max_steps, int *closest_cb, AVLFG *rand_state) { @@ -443,13 +450,13 @@ int avpriv_init_elbg(int *points, int dim, int numpoints, int *codebook, memcpy(temp_points + i*dim, points + k*dim, dim * sizeof(*temp_points)); } - ret = avpriv_init_elbg(temp_points, dim, numpoints / 8, codebook, + ret = init_elbg(temp_points, dim, numpoints / 8, codebook, num_cb, 2 * max_steps, closest_cb, rand_state); if (ret < 0) { av_freep(&temp_points); return ret; } - ret = avpriv_do_elbg(temp_points, dim, numpoints / 8, codebook, + ret = do_elbg (temp_points, dim, numpoints / 8, codebook, num_cb, 2 * max_steps, closest_cb, rand_state); av_free(temp_points); } else // If not, initialize the codebook with random positions @@ -458,3 +465,17 @@ int avpriv_init_elbg(int *points, int dim, int numpoints, int *codebook, dim * sizeof(*codebook)); return ret; } + +int avpriv_do_elbg(int *points, int dim, int numpoints, + int *codebook, int num_cb, int max_steps, + int *closest_cb, AVLFG *rand_state) +{ + int ret; + + ret = init_elbg(points, dim, numpoints, codebook, + num_cb, max_steps, closest_cb, rand_state); + if (ret < 0) + return ret; + return do_elbg (points, dim, numpoints, codebook, + num_cb, max_steps, closest_cb, rand_state); +} diff --git a/libavcodec/elbg.h b/libavcodec/elbg.h index f48aa3b443..3b9c2931f3 100644 --- a/libavcodec/elbg.h +++ b/libavcodec/elbg.h @@ -42,16 +42,4 @@ int avpriv_do_elbg(int *points, int dim, int numpoints, int *codebook, int numCB, int num_steps, int *closest_cb, AVLFG *rand_state); -/** - * Initialize the **codebook vector for the elbg algorithm. If you have already - * a codebook and you want to refine it, you shouldn't call this function. - * If numpoints < 8*numCB this function fills **codebook with random numbers. - * If not, it calls avpriv_do_elbg for a (smaller) random sample of the points in - * **points. Get the same parameters as avpriv_do_elbg. - * @return < 0 in case of error, 0 otherwise - */ -int avpriv_init_elbg(int *points, int dim, int numpoints, int *codebook, - int numCB, int num_steps, int *closest_cb, - AVLFG *rand_state); - #endif /* AVCODEC_ELBG_H */ diff --git a/libavcodec/msvideo1enc.c b/libavcodec/msvideo1enc.c index df621a6f48..fa65a2fbc4 100644 --- a/libavcodec/msvideo1enc.c +++ b/libavcodec/msvideo1enc.c @@ -117,7 +117,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, } // try to find optimal value to fill whole 4x4 block score = 0; - avpriv_init_elbg(c->block, 3, 16, c->avg, 1, 1, c->output, &c->rnd); avpriv_do_elbg (c->block, 3, 16, c->avg, 1, 1, c->output, &c->rnd); if(c->avg[0] == 1) // red component = 1 will be written as skip code c->avg[0] = 0; @@ -137,7 +136,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, } // search for optimal filling of 2-color block score = 0; - avpriv_init_elbg(c->block, 3, 16, c->codebook, 2, 1, c->output, &c->rnd); avpriv_do_elbg (c->block, 3, 16, c->codebook, 2, 1, c->output, &c->rnd); // last output value should be always 1, swap codebooks if needed if(!c->output[15]){ @@ -163,7 +161,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, // search for optimal filling of 2-color 2x2 subblocks score = 0; for(i = 0; i < 4; i++){ - avpriv_init_elbg(c->block2 + i*4*3, 3, 4, c->codebook2 + i*2*3, 2, 1, c->output2 + i*4, &c->rnd); avpriv_do_elbg (c->block2 + i*4*3, 3, 4, c->codebook2 + i*2*3, 2, 1, c->output2 + i*4, &c->rnd); } // last value should be always 1, swap codebooks if needed diff --git a/libavcodec/roqvideoenc.c b/libavcodec/roqvideoenc.c index f8e363ada7..167e6bc806 100644 --- a/libavcodec/roqvideoenc.c +++ b/libavcodec/roqvideoenc.c @@ -824,10 +824,6 @@ static int generate_codebook(RoqEncContext *enc, int *codebook = enc->tmp_codebook_buf; int *closest_cb = enc->closest_cb; - ret = avpriv_init_elbg(points, 6 * c_size, inputCount, codebook, - cbsize, 1, closest_cb, &enc->randctx); - if (ret < 0) - return ret; ret = avpriv_do_elbg(points, 6 * c_size, inputCount, codebook, cbsize, 1, closest_cb, &enc->randctx); if (ret < 0) diff --git a/libavfilter/vf_elbg.c b/libavfilter/vf_elbg.c index 8f97465f12..bf78030ffe 100644 --- a/libavfilter/vf_elbg.c +++ b/libavfilter/vf_elbg.c @@ -163,9 +163,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) } /* compute the codebook */ - avpriv_init_elbg(elbg->codeword, NB_COMPONENTS, elbg->codeword_length, - elbg->codebook, elbg->codebook_length, elbg->max_steps_nb, - elbg->codeword_closest_codebook_idxs, &elbg->lfg); avpriv_do_elbg(elbg->codeword, NB_COMPONENTS, elbg->codeword_length, elbg->codebook, elbg->codebook_length, elbg->max_steps_nb, elbg->codeword_closest_codebook_idxs, &elbg->lfg);