From patchwork Fri Sep 17 02:08:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 30294 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp1784317iov; Thu, 16 Sep 2021 19:08:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwJ+q2/KlIrPM2SWPAg4T34Nu5pzaiD7blgmhkb6il1s7fdtffzelejYcA4f7XECOmx2k6X X-Received: by 2002:a17:906:2ed1:: with SMTP id s17mr9874805eji.261.1631844519675; Thu, 16 Sep 2021 19:08:39 -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 q24si578892edi.86.2021.09.16.19.08.39; Thu, 16 Sep 2021 19:08:39 -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=C5Vqypw2; 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 081D868B0FB; Fri, 17 Sep 2021 05:08:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075092.outbound.protection.outlook.com [40.92.75.92]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2A4FF68B0EA for ; Fri, 17 Sep 2021 05:08:23 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=itYJ9+d/6m1i9wm5HTn97Qnz0BDqN2f3qxHQ/FmR4uBKb9zH5BLfvSuq5rYXMHc+gH4xk3Scrxdlzylymf+7XYtETHSle3Hz3r0o8HLFQM+Nf/yFes1D8Rth+LQ8fhbf0EMeHT6o1SxZu7UdPwwwyBWbB3kJBUwBBdydPvBZUw5VW2bzqC+YSpj6myUkX6eXReEHFqsW2c31+jeljn+yY/ZXqToG6Xmmu8Nyk2bozGyW/O0mbRBCSxRKrhHN02W6Qw/XV+Xk5+vWYOdOAhYF3+mOwufoNJNPNeGer8nsHdkSWLCpqSmf0UbbdouzuyeiXgChjZkKG9Hxbq0krO93Bw== 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=UJaFR5Mjk85PWBvOPGlW5MJbrCU9xewZqqJVr3MMU9k=; b=dcP8QyegP/zfm7UtsKGdfiCQgK5d1I0KzzaQQIEKOV9k0Xwlj8AGl7DSnjKT4zJSRTFOOn0waFVHL/j2rEHUws5VA26AtprP5rFf18kpyvq+4LW3g535eO8ll/f65YomkLTksgXgOqg/ynXgZKxa6xynrxD7MCV+i+9++9RKDZQmQXTHPkUem1JjP8OKiIizcQo+zW7+15OwXiIWeWwTtpUR/0hbuC6GI1LOO2vXpeu3cwvl+kufI9pszpWkw9s79M7w+4R4DK8pJsU6CtpsklBWljXqJ/dH5qkQrQEEwL4HssvkmI+59MtiKBAv3fZznBT6gI8CK20698az7bmCeQ== 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=UJaFR5Mjk85PWBvOPGlW5MJbrCU9xewZqqJVr3MMU9k=; b=C5Vqypw2z5frbz3McRpnMGVrKAKbJnXDQ/Z0vwqcZEL433nInBjy/pcuu7PsPInoZkxbF6PCrGGWefO0bvti21c8mT2ZUT1AQabfeLOkyCqogOPtrlEqR7qmtv/qQTSvRTP1/4MQcEnLFjFHHfuBFx7lOs4EG3Q0RS+xZPJql8CcJ0ePx31C+kXt1ZTGiQ28xWHJg1HgqvNmV6w6v3SRTJgEOM625FnfWVkSQ+Gi4bQgjp2UDfP0u4vsZma1oUyHqt/WWYnzmOZAKUM1OHntrAUTEEaqF96cf0NboeRjWa6si5AoKajrrJ2DM1eXo7+qGQPhLPKqdLndj+GUjfjUoQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5297.eurprd03.prod.outlook.com (2603:10a6:20b:c5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.16; Fri, 17 Sep 2021 02:08:21 +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:21 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 17 Sep 2021 04:08:00 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 In-Reply-To: References: X-TMN: [AsI/uRDMAv7cvmOy0FmsegckODQ15dYD] 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-4-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:21 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ce84a1da-c756-4021-1528-08d97980062e X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNWDyOY6I9mBNa2F8wdSMbXW/Ich1FXHTnspS8kvEEVz+Xg9yOSus9w5d2L2u7uPQjLzMG64ASkbTsvxUmUYFWi4XsTPLYwRF22CnThuXFjG9MAyokJ0jHN9Ppjjkqo+2PZpx1nMGGcMmKs5viWA1Lj9ICxsyt1R1WpuZJ7Zw/Z2CvAFbFQeM1IvkWeuEVgZ6t30IIr/V+2gQYMfse0EnxDlCP6Hu/tU2/wANa1fbfe4vdbFCz9CuebBpCRIRTHruj0RD5yh02qVsNSFy9bkx9YXBx+m1rJIbX/u5oNicvtAlv2R2jnat4YNiqZzAXWWQ482qLdZiEHdBfOfMpa7AuqhGohALdICymC7drSBy494u3Ib7zRahePzY3Sw9/2D4SOb8lXwcEW4syvD0+4VfvL5ZuRONqdGjWIugKFPyaURlBZ1K5KT+dCWiVfGflliXxcqWVPReQOmqyec5FJ93EO9IolprOUSchwEG2nw7pw800hFXPzSPuDsWd8odqHHhAo3OQ4H/BNh+e+Ynz647OYNLZda3rLCYHXqlhRDdABfO0FdLBjf9bfX54CzF5YNpITje/sJtpNxVvqo63PXhcmU5AA6CVsNCj1BNA78mN9lf68dKJ+gJ6BCFbtvgUTvICcfXPc1JlJeH/v7dPpgL+2SjVmi57vhuJZjN29qzNJToRhQwl484KaiEPh5YXflHB9mXpjCHjLoRI1kZmLAPpsMLvCnYTY5e7k= X-MS-TrafficTypeDiagnostic: AM6PR03MB5297: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gr+AaVhiqdp6ly0vW33iddpohFWbACHIRPyiFIUpezDk1X8n/VFwr7QYeoGJY30amj9DYFNAI392uYO211LDLjtC14PAqm+iwg+wkE559QP8AnfOztd/H2/xkdZVVchla8V+p8peIqCaPZKWfaSkGHFH4N7YiHAP2idvSTxroWF6DZo5mIk7wEoDBvxyd7fG0KWScdeTRw0uyXnFLN3UXHgMPEJjm4nhkEoMd0IP9nBDB4T3xbiY1+OkSmMNeIdPvUoLTyzX5pSae5UoPR4ub1JCkoJWYIMZAOCbHIN0P3SgLpH+7doi6MOBEP01W6qfohWpI1f+fNnrl17LpdYx54b4jMAThXsLeFgXnPBOcQRmQDCJIsA0RYVwFWkScu48VjXodWDf13stdt/JlhUMckfey6gRUTkkvGiHtxxHMG3xO2UjbaH7JMLjKWW/uB3j X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tvAezcwxG9hFaB48hfENdYCs3aBDJZYxeWnR/ySp38f+vANB4QNgo2p0WxPhRcVnB9oVbVRHJCV4WWFGfcE6WtxdqnF/sNfKU1uD8jEl9N+/ukZqCrW7L536HTQ78rkVtK1onaSK2w+LTvkO9MuH8g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce84a1da-c756-4021-1528-08d97980062e 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:21.8145 (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: AM6PR03MB5297 Subject: [FFmpeg-devel] [PATCH 05/13] avcodec/elbg: Rename elbg_data to ELBGContext 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: VVIH1jwhFO+h It is in line with our naming conventions for types. Also change numCB to num_cb for the same reason. Signed-off-by: Andreas Rheinhardt --- libavcodec/elbg.c | 84 +++++++++++++++++++++++------------------------ libavcodec/elbg.h | 4 +-- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/libavcodec/elbg.c b/libavcodec/elbg.c index b563254bbc..ac5c53161d 100644 --- a/libavcodec/elbg.c +++ b/libavcodec/elbg.c @@ -43,10 +43,10 @@ typedef struct cell_s { /** * ELBG internal data */ -typedef struct elbg_data { +typedef struct ELBGContext { int64_t error; int dim; - int numCB; + int num_cb; int *codebook; cell **cells; int64_t *utility; @@ -55,7 +55,7 @@ typedef struct elbg_data { int *points; AVLFG *rand_state; int *scratchbuf; -} elbg_data; +} ELBGContext; static inline int distance_limited(int *a, int *b, int dim, int limit) { @@ -80,7 +80,7 @@ static inline void vect_division(int *res, int *vect, int div, int dim) } -static int eval_error_cell(elbg_data *elbg, int *centroid, cell *cells) +static int eval_error_cell(ELBGContext *elbg, int *centroid, cell *cells) { int error=0; for (; cells; cells=cells->next) @@ -89,11 +89,12 @@ static int eval_error_cell(elbg_data *elbg, int *centroid, cell *cells) return error; } -static int get_closest_codebook(elbg_data *elbg, int index) +static int get_closest_codebook(ELBGContext *elbg, int index) { - int i, pick=0, diff, diff_min = INT_MAX; - for (i=0; inumCB; i++) + int pick = 0; + for (int i = 0, diff_min = INT_MAX; i < elbg->num_cb; i++) if (i != index) { + int diff; diff = distance_limited(elbg->codebook + i*elbg->dim, elbg->codebook + index*elbg->dim, elbg->dim, diff_min); if (diff < diff_min) { pick = i; @@ -103,17 +104,17 @@ static int get_closest_codebook(elbg_data *elbg, int index) return pick; } -static int get_high_utility_cell(elbg_data *elbg) +static int get_high_utility_cell(ELBGContext *elbg) { int i=0; /* Using linear search, do binary if it ever turns to be speed critical */ uint64_t r; - if (elbg->utility_inc[elbg->numCB-1] < INT_MAX) { - r = av_lfg_get(elbg->rand_state) % (unsigned int)elbg->utility_inc[elbg->numCB-1] + 1; + if (elbg->utility_inc[elbg->num_cb - 1] < INT_MAX) { + r = av_lfg_get(elbg->rand_state) % (unsigned int)elbg->utility_inc[elbg->num_cb - 1] + 1; } else { r = av_lfg_get(elbg->rand_state); - r = (av_lfg_get(elbg->rand_state) + (r<<32)) % elbg->utility_inc[elbg->numCB-1] + 1; + r = (av_lfg_get(elbg->rand_state) + (r<<32)) % elbg->utility_inc[elbg->num_cb - 1] + 1; } while (elbg->utility_inc[i] < r) { @@ -128,7 +129,7 @@ static int get_high_utility_cell(elbg_data *elbg) /** * Implementation of the simple LBG algorithm for just two codebooks */ -static int simple_lbg(elbg_data *elbg, +static int simple_lbg(ELBGContext *elbg, int dim, int *centroid[3], int newutility[3], @@ -169,7 +170,7 @@ static int simple_lbg(elbg_data *elbg, return newutility[0] + newutility[1]; } -static void get_new_centroids(elbg_data *elbg, int huc, int *newcentroid_i, +static void get_new_centroids(ELBGContext *elbg, int huc, int *newcentroid_i, int *newcentroid_p) { cell *tempcell; @@ -205,7 +206,7 @@ static void get_new_centroids(elbg_data *elbg, int huc, int *newcentroid_i, * @param indexes {luc, huc, cluc} * @param newcentroid A vector with the position of the new centroids */ -static void shift_codebook(elbg_data *elbg, int *indexes, +static void shift_codebook(ELBGContext *elbg, int *indexes, int *newcentroid[3]) { cell *tempdata; @@ -233,20 +234,19 @@ static void shift_codebook(elbg_data *elbg, int *indexes, } } -static void evaluate_utility_inc(elbg_data *elbg) +static void evaluate_utility_inc(ELBGContext *elbg) { - int i; int64_t inc=0; - for (i=0; i < elbg->numCB; i++) { - if (elbg->numCB*elbg->utility[i] > elbg->error) + for (int i = 0; i < elbg->num_cb; i++) { + if (elbg->num_cb * elbg->utility[i] > elbg->error) inc += elbg->utility[i]; elbg->utility_inc[i] = inc; } } -static void update_utility_and_n_cb(elbg_data *elbg, int idx, int newutility) +static void update_utility_and_n_cb(ELBGContext *elbg, int idx, int newutility) { cell *tempcell; @@ -262,7 +262,7 @@ static void update_utility_and_n_cb(elbg_data *elbg, int idx, int newutility) * @param elbg Internal elbg data * @param idx {luc (low utility cell, huc (high utility cell), cluc (closest cell to low utility cell)} */ -static void try_shift_candidate(elbg_data *elbg, int idx[3]) +static void try_shift_candidate(ELBGContext *elbg, int idx[3]) { int j, k, cont=0; int64_t olderror=0, newerror; @@ -313,15 +313,15 @@ static void try_shift_candidate(elbg_data *elbg, int idx[3]) /** * Implementation of the ELBG block */ -static void do_shiftings(elbg_data *elbg) +static void do_shiftings(ELBGContext *elbg) { int idx[3]; evaluate_utility_inc(elbg); - for (idx[0]=0; idx[0] < elbg->numCB; idx[0]++) - if (elbg->numCB*elbg->utility[idx[0]] < elbg->error) { - if (elbg->utility_inc[elbg->numCB-1] == 0) + for (idx[0]=0; idx[0] < elbg->num_cb; idx[0]++) + if (elbg->num_cb * elbg->utility[idx[0]] < elbg->error) { + if (elbg->utility_inc[elbg->num_cb - 1] == 0) return; idx[1] = get_high_utility_cell(elbg); @@ -333,14 +333,14 @@ static void do_shiftings(elbg_data *elbg) } static int do_elbg(int *points, int dim, int numpoints, int *codebook, - int numCB, int max_steps, int *closest_cb, + int num_cb, int max_steps, int *closest_cb, AVLFG *rand_state) { int dist; - elbg_data elbg_d; - elbg_data *elbg = &elbg_d; - int i, j, k, steps = 0, ret = 0; - int *size_part = av_malloc_array(numCB, sizeof(int)); + ELBGContext elbg_d; + ELBGContext *elbg = &elbg_d; + int i, j, steps = 0, ret = 0; + int *size_part = av_malloc_array(num_cb, sizeof(int)); cell *list_buffer = av_malloc_array(numpoints, sizeof(cell)); cell *free_cells; int best_dist, best_idx = 0; @@ -348,13 +348,13 @@ static int do_elbg(int *points, int dim, int numpoints, int *codebook, elbg->error = INT64_MAX; elbg->dim = dim; - elbg->numCB = numCB; + elbg->num_cb = num_cb; elbg->codebook = codebook; - elbg->cells = av_malloc_array(numCB, sizeof(cell *)); - elbg->utility = av_malloc_array(numCB, sizeof(*elbg->utility)); + elbg->cells = av_malloc_array(num_cb, sizeof(cell *)); + elbg->utility = av_malloc_array(num_cb, sizeof(*elbg->utility)); elbg->nearest_cb = closest_cb; elbg->points = points; - elbg->utility_inc = av_malloc_array(numCB, sizeof(*elbg->utility_inc)); + elbg->utility_inc = av_malloc_array(num_cb, sizeof(*elbg->utility_inc)); elbg->scratchbuf = av_malloc_array(5*dim, sizeof(int)); if (!size_part || !list_buffer || !elbg->cells || @@ -369,8 +369,8 @@ static int do_elbg(int *points, int dim, int numpoints, int *codebook, free_cells = list_buffer; last_error = elbg->error; steps++; - memset(elbg->utility, 0, numCB*sizeof(*elbg->utility)); - memset(elbg->cells, 0, numCB*sizeof(cell *)); + memset(elbg->utility, 0, num_cb * sizeof(*elbg->utility)); + memset(elbg->cells, 0, num_cb * sizeof(*elbg->cells)); elbg->error = 0; @@ -378,7 +378,7 @@ static int do_elbg(int *points, int dim, int numpoints, int *codebook, costly part of the algorithm. */ for (i=0; i < numpoints; i++) { best_dist = distance_limited(elbg->points + i*elbg->dim, elbg->codebook + best_idx*elbg->dim, dim, INT_MAX); - for (k=0; k < elbg->numCB; k++) { + for (int k = 0; k < elbg->num_cb; k++) { dist = distance_limited(elbg->points + i*elbg->dim, elbg->codebook + k*elbg->dim, dim, best_dist); if (dist < best_dist) { best_dist = dist; @@ -396,9 +396,9 @@ static int do_elbg(int *points, int dim, int numpoints, int *codebook, do_shiftings(elbg); - memset(size_part, 0, numCB*sizeof(int)); + memset(size_part, 0, num_cb * sizeof(*size_part)); - memset(elbg->codebook, 0, elbg->numCB*dim*sizeof(int)); + memset(elbg->codebook, 0, elbg->num_cb * dim * sizeof(*elbg->codebook)); for (i=0; i < numpoints; i++) { size_part[elbg->nearest_cb[i]]++; @@ -407,7 +407,7 @@ static int do_elbg(int *points, int dim, int numpoints, int *codebook, elbg->points[i*elbg->dim + j]; } - for (i=0; i < elbg->numCB; i++) + for (int i = 0; i < elbg->num_cb; i++) vect_division(elbg->codebook + i*elbg->dim, elbg->codebook + i*elbg->dim, size_part[i], elbg->dim); @@ -428,7 +428,7 @@ out: /** * Initialize the codebook vector for the elbg algorithm. - * If numpoints < 8*numCB this function fills codebook with random numbers. + * If numpoints <= 24 * num_cb 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 @@ -451,13 +451,13 @@ static int init_elbg(int *points, int dim, int numpoints, int *codebook, } ret = init_elbg(temp_points, dim, numpoints / 8, codebook, - num_cb, 2 * max_steps, closest_cb, rand_state); + num_cb, 2 * max_steps, closest_cb, rand_state); if (ret < 0) { av_freep(&temp_points); return ret; } ret = do_elbg (temp_points, dim, numpoints / 8, codebook, - num_cb, 2 * max_steps, closest_cb, rand_state); + num_cb, 2 * max_steps, closest_cb, rand_state); av_free(temp_points); } else // If not, initialize the codebook with random positions for (int i = 0; i < num_cb; i++) diff --git a/libavcodec/elbg.h b/libavcodec/elbg.h index 3b9c2931f3..a9a19aa5e4 100644 --- a/libavcodec/elbg.h +++ b/libavcodec/elbg.h @@ -32,14 +32,14 @@ * @param dim Dimension of the points. * @param numpoints Num of points in **points. * @param codebook Pointer to the output codebook. Must be allocated. - * @param numCB Number of points in the codebook. + * @param num_cb Number of points in the codebook. * @param num_steps The maximum number of steps. One step is already a good compromise between time and quality. * @param closest_cb Return the closest codebook to each point. Must be allocated. * @param rand_state A random number generator state. Should be already initialized by av_lfg_init(). * @return < 0 in case of error, 0 otherwise */ int avpriv_do_elbg(int *points, int dim, int numpoints, int *codebook, - int numCB, int num_steps, int *closest_cb, + int num_cb, int num_steps, int *closest_cb, AVLFG *rand_state); #endif /* AVCODEC_ELBG_H */