From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 901AD4D6AA for <ffmpegdev@gitmailbox.com>; Fri, 18 Apr 2025 08:39:51 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4600E68B792; Fri, 18 Apr 2025 11:39:46 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2067.outbound.protection.outlook.com [40.92.90.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5B3A168B154 for <ffmpeg-devel@ffmpeg.org>; Fri, 18 Apr 2025 11:39:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=N8ruV9yZJNXJhM8WD+UQN8C8KmqYtRHZshW7pAnfWa+NGiU6fBd+bD8NJxKO9kqrkUaBT4yuariinoQ6iSKfdfCGNUABs8iETSf/vNJagGtCQqHPXEY5lRW4ebDv/r6+1pvzE46Q5ch26sYUCPJFN4Pq9jBl2Kryy5LqJt+Hwy9LFkUKAVdd2CnlJwoZ8zZi7iaXwfKCxhb83nX2G8bGZIunUcIgFEcBUtvvJmBAvR8FTVARrnGmJKO/vX37GZVv3zEYuGzp2CXijIWrO9VBZrnHNsPuHV97LrnQzOO/lFIZwqj7XpfJly+uCHnCV1fIvEwkEPX0NT9CtqT3Z63iAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=lEi5gC2cAee6G5LUC1hLPJUATu9DCOJRroOuNPVMTYc=; b=snIv5zL6uRw98opczcxdyZiamPmiYUAKjmddudpjW0ILGtmo27TvkSbCow0KZ6KeY1NwO8zx9l7Hpf1a/JhTgJEwNWqivOMVCcwSfTkdWVZC4GrQJCcVqbtEWTZHq03CXdEBANGl6JTjmPSXPdikGZTejkhBupP/ZREjBhSo9Twq89+bG+0E4Llty3WEkFXlNZS5ruaREGRbBv+0xA+fKJ/b3Bj+4RpGEfqQFOvaY0Wewkndq8bYTerex4oYlLYdn62nVQ7CqgPiRFSiBcfemXQkHPRkaRRJuuOhZp646gkWyhjR20U4JXjSeVOnOGRbxhiQ5qAWe6T8QTWjqJuk7Q== 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=lEi5gC2cAee6G5LUC1hLPJUATu9DCOJRroOuNPVMTYc=; b=FHXR0uuaCuzAVPLVToM3LiXdFY7Yfk4XtZ/yJS4kaA4tI/jWbNZKP4VzPVdJ1n6E9//98N8V+mN5CG0+c/w/3gPsbNZjuFHnzcrHOaysJfsxGwGSsXZSPkJITM7WnwMBdJ1rM11hK1FzXq6ZsTbMRL1NJ2T+cVsLWcmDLMB/QRK5jlRoIxIdGgibKVWKh7TJuo/QnXdMVR+DyQ9PWYDL5Ji6DzRjVNxNd6PqUnH+3hjsfxvcRvPdifDgVUNoVMnSqM5P0tuRz3vAB1U7164hhXL7bfi8IYCShg/Jlj3gNkcGgGIdltnENG70eQ22eY+yk10GwWk+Z0vwNxPQLVoJZg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS1P250MB0555.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4a1::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.27; Fri, 18 Apr 2025 08:39:37 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%5]) with mapi id 15.20.8655.012; Fri, 18 Apr 2025 08:39:37 +0000 Message-ID: <GV1P250MB073757F03881718AE4FC44548FBF2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> Date: Fri, 18 Apr 2025 10:39:35 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250417235543.227108-1-47210458+raphaelthegreat@users.noreply.github.com> Content-Language: en-US From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> In-Reply-To: <20250417235543.227108-1-47210458+raphaelthegreat@users.noreply.github.com> X-ClientProxiedBy: FR4P281CA0090.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:cd::16) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <c8aa0aa8-27c0-4501-ad30-84e934ad8bd6@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS1P250MB0555:EE_ X-MS-Office365-Filtering-Correlation-Id: f77ba339-8222-476f-0eff-08dd7e548d58 X-Microsoft-Antispam: BCL:0; ARA:14566002|5072599009|7092599003|6090799003|461199028|8060799006|19110799003|15080799006|440099028|3412199025|12091999003|41001999003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VTQ4Y29vdU9kanhzdW9aSHBkclJpODljY2dwYlNNc0JrMW13N1RPWXRGL29p?= =?utf-8?B?TUQybUZObzd1c3NySkJWZmJNOTYxSFBBWUJzVDZLenoyREhtV294Z3BCai85?= =?utf-8?B?cU1GUE1VbUxjcTBZY000eVZ4aUlxc2NEQWhTL01wOXVJa213V0JyMTJQV08w?= =?utf-8?B?OC9ERTB1VUlMT0ZYMG15R1Z2S0pnc2hHZjVlZUNvV2RjcjhESnA5SDRMOVRq?= =?utf-8?B?WDRPd2svcXFGc3dnTG1sTHdxQVE1REIzWHRYbjQydUtlVnQvVmZwMEhCanV2?= =?utf-8?B?di9VdFp1cnRBTnZUWUdjNUttZjRzRnFEbTluM2dZeklvcGxON0lPVUVyTTZC?= =?utf-8?B?cHhUY3NZdCtIaHduQUw1QzhCMzd5MVUvSFpzbXovKzZGa2pCVmJLbXJ1QnJ3?= =?utf-8?B?cDNRTWRFL0JkckNqcGZKaTd1cXk3aHVtRVJaZWo0Vm1LaU12RVZrcE0rc2tH?= =?utf-8?B?Z0FrTDFOVVl4Q1NWQXE0WGpXQVg5Y1ppaEN0bERCNWZJUzBSSThpT2ZreEhV?= =?utf-8?B?dU9xV3ZkZWozbFk2cmk4VUdLNHIrQ3hybUNycnpmNnN2NVhablBLSCtpVkFI?= =?utf-8?B?eVhQK2JlRFl5c3VIVmFzZWJUQjNqV2t4eFB6dW5NL1ZjN24rRlNSTk53K3BG?= =?utf-8?B?S3lwKzhNUmhYd21rdEZaT0NUNXdPUzJtc1pmMVlCV2FHTENuOE1UcXJVZUp6?= =?utf-8?B?Q3J1Z0ZlVXFhZHVRNFJRYTFTM3h1clhrYXlzYVdZcWduU2htamI1WDFUWGZr?= =?utf-8?B?RUpOVjdSZXhtT0lwemUrMlMrTHdCQWhpZU5qaldFWmY0SEVEUERqVk9LU1BB?= =?utf-8?B?NlAzU015aElpckowUGdvTE5yTncwbkRaK1IzYUJ6TUFNd3VlU1dHNUtidnhk?= =?utf-8?B?bnN0N0NRNWZLQjVkTkZEYlExTnlHS25oWlZBRXNnTzBJZGxXS01NV2hzZ3hs?= =?utf-8?B?VEcvUTZlOHF5WFlvaUFTTVVEeWErd0RmWTNlUjRMdzVyRFN0OUVGV1Y2eUF3?= =?utf-8?B?L2duTGM3NHU5T1RrYzRQZjY3YTdJaVFsMjlVdXdWU1FVRWR0MXR3UjArM0FV?= =?utf-8?B?QnFUUERRV1M0bjFpTDBjd2kxM3NVWmNmMnJNZzZCNHorZkdjRUx4UXRqM2dk?= =?utf-8?B?SUhFTk40Z2hyMVRVTEJPOWtucGRqeHk5VDA1N3k1VXBQd1VMVEcvTWJ0VlJT?= =?utf-8?B?bXhuR1RPYzhyUDdEVFRscWVJb1ppQTJZNG1jZk9paTZ1N2wwVHVDbGVQeDll?= =?utf-8?B?d0kwU2dueGYxTGF4V1YzS1FXTXl1SjBBemcvb25tZHF3Unp2dDdabGR6QmZk?= =?utf-8?B?WVV0WlRGK0pDd24wcFAwYUgyUWNMYU4wYmxjMEFaUG85a2pNdktzdm1UalhZ?= =?utf-8?B?R1ZsR1dHQ09aVGRaK3BWbkRtcytqczVYV3lxWnowRlBBUUI3blpTMTM1SHZr?= =?utf-8?B?SlhiTDZYRGtvaktQQ2R6Q2JIKzJRcnFYcGtmZ0MzS3I3WVl0RHNhRzEvVVZT?= =?utf-8?B?S3BQeDdacmdOUnB2Z3l1aGpwSkhSeDhyOXhjMHQ4MWovcjQweFJIQjhZQy96?= =?utf-8?B?VFZsU2FIc2w2Qng3Y2YxTWNiSHVkdWIxSnp4Z2tVWjZBL2NDN0ZqTDBZdTdE?= =?utf-8?B?ckpsbjVKckErTXpxN1hqVXpFcVpwNUE9PQ==?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NmY1ek9DSFZhKytXekNDc0dLaU83b2Y5Q3VBN09lNXh0dkVpeno1WGs1S0RK?= =?utf-8?B?dUFuRTBjcVZmbFlNcFpOb0xBVlhIYnZZSnNFMXRaWDdidi9rNWJ1RndJSHRy?= =?utf-8?B?U0FJZ0M0ZDg2Sm50QWZ1QkZDQW5LdDVMS09GMFl6UEd1dlIvT3hoQ3REN1pS?= =?utf-8?B?RjFMZDVpWXlFTVRaandrd0MzcW0zN2JXWkhVaTVCVWIvcTgxNlV5RnJrMzNl?= =?utf-8?B?YnorUUF3UlVzWS91WEhyOC9XRW1jeGd3aXlIOG5NQkFQUDMrckxnR3JGV1Fr?= =?utf-8?B?allES1I3dEtVc2VaRmozMlJaLzlVNTZPR1RLQ0xyeU5NZXQzeUtOeG45d2VB?= =?utf-8?B?eVFMc0hJVmp0NWxTL2dpZVJ4YmU3UEk3YzZUdkJyanNnNFdsNm95NUNxV3dV?= =?utf-8?B?ekZRUTB5b25Fd3NVeXZIeHlBNXdSVlVJMGRjNFJhaU1LQWR4MWE5THZTaGV1?= =?utf-8?B?YmlPZDRJOVZRRHNzMSthVzZ3YzFEVVZnNVN5NURSU1RRMlQzeWFlcnVnRjkr?= =?utf-8?B?c2lDMFdaRERlaFVhR05nWmxjQk51aWNBcGdaRnlQb1lrclpFUTZDZStObm9J?= =?utf-8?B?YWFoM1YwbjA3bm5La0JiS0laVFRwOTNvRWtRRW1OaFNlUUVITy9nQ0lYL0RY?= =?utf-8?B?YjlsaEw2eEloLytCVTBSajdTakJ6NkUwUndkdkxsNC9vTTh6ZGlkZmVzUUd4?= =?utf-8?B?b0lPbVIyNHdGb3lWbDd3Z1dJbHdNRGJkYU9pS1lacjF3aXY3M3RMMGJCMEln?= =?utf-8?B?ZVB6UitBS0cxSjIzUWh6NVI5VUxGOHdKelpHKzRxV0psNkFmd21jSTl4Q0xw?= =?utf-8?B?T05HZGo4bDd0UEk2NHJjdXR6SnVxTDBpMUg5RzZTcG5acmVXbW4zQUxQMGxm?= =?utf-8?B?UktabWgveXFMTFBQVEQ4allRenZXZk1WTEZjVUhUait3cjhjTkJBUExEbnJa?= =?utf-8?B?K0JMc2FjUndTQit6M3lDS2hVcFBvWTZxT2ZlQURnMG9KRFBZbnZLY28rTW5w?= =?utf-8?B?MDJxdEIwbVJVVVlLalVzVVBWb2xZSmY0dTFFUEl4ekZaZDY0SzNsek13SVRE?= =?utf-8?B?NVNhbVlxVVhyQkRMMG1ERXlLb0l3ZEpNZXRiUnE0SWQzbFZ2UTg5dkw2V3Zl?= =?utf-8?B?MWtIaDFRNjBFKzBWSUtEY0RJVTYra2JSRSs1UXBMNzJMRGxNS0dPaFFubnhV?= =?utf-8?B?cEV2YnNpaFd4VjkyV280Yk5iZWhmNFNSdVB6eVA2anJNSlMrSS9BcDRvL1RP?= =?utf-8?B?endzSzdnM2Y4K0FaQWlOVVNsV3hXUUhlUDllZzBIS0lNcmlJTEdERTRORTl4?= =?utf-8?B?QWdHdTM3QzQyQW5tcy9SSG5NWkQ4cGJqcDhHaFA5Z0RQUWZLdVVXYW9WSmtR?= =?utf-8?B?T095d3VEN1JFWUpGei95NFNJRE92NTQ5ZEZNaU5SMFJIcHRwc2VWTlFJZFMv?= =?utf-8?B?YWtGN3MzcTg5clUvNDhCSTVJdG9Ic3p5dEFNVDFsNXF1M2pCbjh2TmczR3pQ?= =?utf-8?B?MGxEVXpMUGRiTUlMb1J1YTFXeU5Ld1VCRis4eGY5TVEwY3p4OUR1Ni8xdEph?= =?utf-8?B?TEtUMWRSbEkrT1ZJYkVBNVV6OXdaTTcrMHM3TlhFUjhpbUVaUVJPTms2Ukdh?= =?utf-8?B?MXdscEdSamYwK25yb0NibzZiVkVxMkhyOGFKbUNiUk1FcWkwbHpyODRhT3Bv?= =?utf-8?B?M3RiUUpmdXNQblA4Si8yUStCcW9VRGk4cDJzRVg2dEVyKzliU1UzQUNiYmNE?= =?utf-8?B?cHFDWnJ0QlhlWXZ4Q3BsYTBHSkcxR3c2czZ3NnllcXNSZjh2NHcwSk9POXZ1?= =?utf-8?B?alBVQTVzckQrUHdWNkJidz09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f77ba339-8222-476f-0eff-08dd7e548d58 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2025 08:39:37.5986 (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: AS1P250MB0555 Subject: Re: [FFmpeg-devel] [PATCH v3 1/5] libavcodec/vc2enc: Split out common functions between software and hardware encoders X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/GV1P250MB073757F03881718AE4FC44548FBF2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> IndecisiveTurtle: > From: IndecisiveTurtle <geoster3d@gmail.com> > > --- > libavcodec/Makefile | 2 +- > libavcodec/vc2enc.c | 513 +------------------------------------ > libavcodec/vc2enc_common.c | 376 +++++++++++++++++++++++++++ > libavcodec/vc2enc_common.h | 196 ++++++++++++++ > 4 files changed, 581 insertions(+), 506 deletions(-) > create mode 100644 libavcodec/vc2enc_common.c > create mode 100644 libavcodec/vc2enc_common.h > > diff --git a/libavcodec/Makefile b/libavcodec/Makefile > index 7bd1dbec9a..d4ebd86866 100644 > --- a/libavcodec/Makefile > +++ b/libavcodec/Makefile > @@ -769,7 +769,7 @@ OBJS-$(CONFIG_VC1_CUVID_DECODER) += cuviddec.o > OBJS-$(CONFIG_VC1_MMAL_DECODER) += mmaldec.o > OBJS-$(CONFIG_VC1_QSV_DECODER) += qsvdec.o > OBJS-$(CONFIG_VC1_V4L2M2M_DECODER) += v4l2_m2m_dec.o > -OBJS-$(CONFIG_VC2_ENCODER) += vc2enc.o vc2enc_dwt.o diractab.o > +OBJS-$(CONFIG_VC2_ENCODER) += vc2enc.o vc2enc_dwt.o vc2enc_common.o diractab.o Overlong line > OBJS-$(CONFIG_VCR1_DECODER) += vcr1.o > OBJS-$(CONFIG_VMDAUDIO_DECODER) += vmdaudio.o > OBJS-$(CONFIG_VMDVIDEO_DECODER) += vmdvideo.o > diff --git a/libavcodec/vc2enc_common.h b/libavcodec/vc2enc_common.h > new file mode 100644 > index 0000000000..eaaf5ac99c > --- /dev/null > +++ b/libavcodec/vc2enc_common.h > @@ -0,0 +1,196 @@ > +/* > + * Copyright (C) 2016 Open Broadcast Systems Ltd. > + * Author 2016 Rostislav Pehlivanov <atomnuker@gmail.com> > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#ifndef AVCODEC_VC2ENC_COMMON_H > +#define AVCODEC_VC2ENC_COMMON_H > + > +#include "avcodec.h" > +#include "dirac.h" > +#include "put_bits.h" > + > +#include "vc2enc_dwt.h" > +#include "diractab.h" > + > +/* The limited size resolution of each slice forces us to do this */ > +#define SSIZE_ROUND(b) (FFALIGN((b), s->size_scaler) + 4 + s->prefix_bytes) > + > +/* Decides the cutoff point in # of slices to distribute the leftover bytes */ > +#define SLICE_REDIST_TOTAL 150 Need not be put in a header. > + > +typedef struct VC2BaseVideoFormat { > + enum AVPixelFormat pix_fmt; > + AVRational time_base; > + int width, height; > + uint8_t interlaced, level; > + char name[13]; > +} VC2BaseVideoFormat; > + > +extern const VC2BaseVideoFormat base_video_fmts[]; > +extern const int base_video_fmts_len; > + > +enum VC2_QM { > + VC2_QM_DEF = 0, > + VC2_QM_COL, > + VC2_QM_FLAT, > + > + VC2_QM_NB > +}; > + > +typedef struct SubBand { > + dwtcoef *buf; > + ptrdiff_t stride; > + int width; > + int height; > + int shift; > +} SubBand; > + > +typedef struct Plane { > + SubBand band[MAX_DWT_LEVELS][4]; > + dwtcoef *coef_buf; > + int width; > + int height; > + int dwt_width; > + int dwt_height; > + ptrdiff_t coef_stride; > +} Plane; > + > +typedef struct SliceArgs { > + const struct VC2EncContext *ctx; > + union { > + int cache[DIRAC_MAX_QUANT_INDEX]; > + uint8_t *buf; > + }; > + int x; > + int y; > + int quant_idx; > + int bits_ceil; > + int bits_floor; > + int bytes; > +} SliceArgs; > + > +typedef struct TransformArgs { > + const struct VC2EncContext *ctx; > + Plane *plane; > + const void *idata; > + ptrdiff_t istride; > + int field; > + VC2TransformContext t; > +} TransformArgs; > + > +typedef struct VC2EncContext { > + AVClass *av_class; > + PutBitContext pb; > + Plane plane[3]; > + AVCodecContext *avctx; > + DiracVersionInfo ver; > + > + SliceArgs *slice_args; > + TransformArgs transform_args[3]; > + > + /* For conversion from unsigned pixel values to signed */ > + int diff_offset; > + int bpp; > + int bpp_idx; > + > + /* Picture number */ > + uint32_t picture_number; > + > + /* Base video format */ > + int base_vf; > + int level; > + int profile; > + > + /* Quantization matrix */ > + uint8_t quant[MAX_DWT_LEVELS][4]; > + int custom_quant_matrix; > + > + /* Division LUT */ > + uint32_t qmagic_lut[116][2]; > + > + int num_x; /* #slices horizontally */ > + int num_y; /* #slices vertically */ > + int prefix_bytes; > + int size_scaler; > + int chroma_x_shift; > + int chroma_y_shift; > + > + /* Rate control stuff */ > + int frame_max_bytes; > + int slice_max_bytes; > + int slice_min_bytes; > + int q_ceil; > + int q_avg; > + > + /* Options */ > + double tolerance; > + int wavelet_idx; > + int wavelet_depth; > + int strict_compliance; > + int slice_height; > + int slice_width; > + int interlaced; > + enum VC2_QM quant_matrix; > + > + /* Parse code state */ > + uint32_t next_parse_offset; > + enum DiracParseCodes last_parse_code; > +} VC2EncContext; > + > +extern uint16_t interleaved_ue_golomb_tab[256]; > +extern uint16_t top_interleaved_ue_golomb_tab[256]; > +extern uint8_t golomb_len_tab[256]; Missing hidden visibility for all of this. > + > +static inline void put_vc2_ue_uint_inline(PutBitContext *pb, uint32_t val) > +{ > + uint64_t pbits = 1; > + int bits = 1; > + > + ++val; > + > + while (val >> 8) { > + pbits |= (uint64_t)interleaved_ue_golomb_tab[val & 0xff] << bits; > + val >>= 8; > + bits += 16; > + } > + pbits |= (uint64_t)top_interleaved_ue_golomb_tab[val] << bits; > + bits += golomb_len_tab[val]; > + > + put_bits63(pb, bits, pbits); > +} > + > +static inline int count_vc2_ue_uint(uint32_t val) > +{ > + return 2 * av_log2(val + 1) + 1; > +} This need not be put in a header at all. > + > +av_cold void vc2_init_static_data(void); If you export such a function and not the corresponding AVOnce, then you are most likely adding a race. And indeed you do in patch 5/5. > + > +void put_vc2_ue_uint(PutBitContext *pb, uint32_t val); > + > +void vc2_init_quant_matrix(VC2EncContext *s); > + > +void vc2_encode_parse_info(VC2EncContext *s, enum DiracParseCodes pcode); > + > +void vc2_encode_seq_header(VC2EncContext *s); > + > +void vc2_encode_picture_start(VC2EncContext *s); 1. Missing ff_ prefix. 2. These functions should not be exported, they should be static in vc2enc_common.c and a new function that does what is currently being done in lines 932-950 of vc2enc.c should be created instead and called by both encoders. > + > +#endif _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".