From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 080904F02D for ; Sun, 15 Jun 2025 03:44:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 2A2A168D0E8; Sun, 15 Jun 2025 06:44:53 +0300 (EEST) Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2023.outbound.protection.outlook.com [40.92.50.23]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id B32B668B172 for ; Sun, 15 Jun 2025 06:44:46 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=J6y1Bmy1DSBwCt6nsSFEDfvVzIojhQPTNdC+bjyHcDpBMssQsyzLkMtXJZQ7HMtLDWZOGN9byK0C8N+mHvhqv45pR9tXxDHcQdXyOsyOjXk4yMLPj/ryUGUKG57uS8FGM0q7wm7/3juMVThjwBUdK9Lrv/Qzz6jJ6hk3a4OIYgc1mnADXsItTCeuv2P1aPbnLmYkrgCwKGdesr+FsS+WLw7xcLIsuLKVtzhrq+lo9A+Qwz+QwKHN4GCIr3BoUZPksBYNUTxHFdZIG/2/T936qQmxJV2oTaurO6IMYyfXRVGH1Cr4Z0tzuQFokkbVPfa4YDqrkmpCa4qZygsZDoDwhw== 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=KolJk4kwfBGxxiPIy3yve1Fo6QLrnlebsWv1Vv0+O8E=; b=KBwu3He1QXFFAFdLccV19cSoFBnN8o+07z3wEF6vx/RaJAwBYM365AOw2Umz6k0T0AoMWQGgui81oRuw/mKPBERUG3oOz2cI1rlTQZo5J53B0qfoS6PSX/T3Kzs1eHM5a5n9+zUplh+nlBVmf0NPR/HSq/MP7H+F+4/uGofZrX8QE87axOxKBV+GwO6//umqRgOZBcs554GWWOzqGVYb47vvuIinBPKhXsN0TEU8pZq/8KadtTG4v75xTZpTMAv+5O2mLOhZGT1h8JO5kgm2Ss+Ng3cJzPHk3YqgAwf7oK2rSUJVwAs9UyQPsGANj4FlDMlFS8r943EvX9wNkzUmrg== 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=KolJk4kwfBGxxiPIy3yve1Fo6QLrnlebsWv1Vv0+O8E=; b=qPxVSl67ACFtcc8l1icefI8+1/32dfiM2rKKLigjgbkr0nYyHY+P6RvYgm2ZE8tM8SJBpu9ArAgNqCW7h4SpOEAfiAADIz7VXdv7NM+PPkpQwTzR090MR5ohnkSz1mUVoqNgEy0k15EQo9Eoeoyak6CdCpkbFplPy8DCijOi5tdWJu1WrESoCeBUPpTrb5gF35c+VYVlmOuAcZVWJ+bb8nP30rHA2jOOg2S8hpX/DIy3cfWzELFayXLKHESJXkAdahmnTJJ83ptdeh81aD7pMkctkMpWIP4PBTzEIHdx16s+o+TaAennmPJtqUJQPAQJ1yrbjNA+j837EDrRlgJ9OQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2PPFA5BC39076.EURP250.PROD.OUTLOOK.COM (2603:10a6:18:3::b25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.22; Sun, 15 Jun 2025 03:44:45 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9%4]) with mapi id 15.20.8835.019; Sun, 15 Jun 2025 03:44:45 +0000 Message-ID: Date: Sun, 15 Jun 2025 05:44:43 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250612144730.112089-1-ffmpeg@haasn.xyz> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20250612144730.112089-1-ffmpeg@haasn.xyz> X-ClientProxiedBy: FR2P281CA0048.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:92::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <57a2988e-83b9-44a5-ad2f-a2a868390bf3@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2PPFA5BC39076:EE_ X-MS-Office365-Filtering-Correlation-Id: 1b354fa5-f59f-4524-b243-08ddabbef7d8 X-Microsoft-Antispam: BCL:0; ARA:14566002|6090799003|461199028|41001999006|5072599009|15080799009|19110799006|7092599006|8060799009|40105399003|440099028|3412199025; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VDJ1dStraEpERmZhYjFndHAxaFN2T2F1UVdqZXpGd2s3dGhieWF1VDJTU1pC?= =?utf-8?B?NTdpdHFQS0Y0elJSWEorUCtMWkluMGFRNnNuelpGN2NNcGNMMUJ3S2NiTVp1?= =?utf-8?B?TDdiTCsya09vMzFrNzVJRk5mWnlNYTBML1BobVQ1SG53UElRYkI3S1FPM0Vr?= =?utf-8?B?Q0U2UExtSU05ZWkwZmNNRDF0Mndjam51Z0lzd1NFNDZqV0xrOVNkdzlwdnJh?= =?utf-8?B?R3RldHBOSHNtM3V6ZlladVZSeTZydks3WWJib1NhRll1dm9Ta2V1VDFPZ0FH?= =?utf-8?B?UW8yZ3N3OVYrclQwajdtMEdhb0F1R3cwU1lWeFVDelczMDMrVFBrQ3cwYXha?= =?utf-8?B?aG9iYy93QklNMVJDY3AzMTNpZGhBSUxSM2cwQjl0c2FsQW8rcG9MVmlBbUxn?= =?utf-8?B?QUlKNFkyaVJwc09pTVhWZGNYNHczeDdQR0dCNUJ2b3FweTZMc3NDV0NGLzFr?= =?utf-8?B?WjJFWUFyYkxXanBvV0gzeEFUcFl3bG84c0RIamJ1N0JRRFVLeXlHSEVnQWZH?= =?utf-8?B?NkQ2S1dXQzlGRlVlcHkzYXVQUDIxWDRtd005bzlBdjhyUTV3WFcwbFB1L29G?= =?utf-8?B?V1pSWkhPVWRDNDRyZFk0Y0x1NFExUWZxTDhWVFo1U3I3dERiMmExYlNwUVZi?= =?utf-8?B?Nml2NUh6L0tWcEpQVmZEWFo4ODJ6MC8xa0kxamZwUXkwTHlIeStYVWRUR0Nw?= =?utf-8?B?a3pCNlNzZi9mRjRJcnBNQitXUGtTT3Vpam9jSkJlamQ2Y21TOStNY3Nielgw?= =?utf-8?B?aFlFWGZZVXVpTXExTEdkYlNJN0VFTXdzVWpmUndnYkRRR2RWakNoQmg1TkM1?= =?utf-8?B?ZFpEcEhTSVV1Q0g3MnE0QmdXWVUrSy93RkZnckoxSkMxTGFnMVFnSlVNdmRx?= =?utf-8?B?MXJRMEFKbGFCTy9YWTl3cjJhT1hwQ3ZCeHdQNnZ1aFJiNXRtblhiZkJmcmhk?= =?utf-8?B?NUNTcnNJbzM4TU1xam5pMzBEYWJLcDJVbjg2M2lwVlUwVnZ4QkVLQktLSlh0?= =?utf-8?B?SGovaWtvNlVaOGRUVDRPdXA4M3p4eUVpbHJyUFArQ0JTT2x5NTlHTm54b05M?= =?utf-8?B?VndJeWs2SzJqL0N1TFVXMGM2VForaHJYS3o5NjBleUQrNWFGb21pVDlCQnhh?= =?utf-8?B?ZjliQU9oSVB5dU5RTWtDVFY0MGd2VjVVNWZVbk9ST3JESkpmdEFVYWNRNjdV?= =?utf-8?B?ZFBnZjVOa0dqUWNHbG9wZkFaYjhDL203N0E5Z0NIbVNqSDZ3dE11NVFKNmVk?= =?utf-8?B?eWdKSEp1ME0zZVd6emhkdTEzNUlYRkxSVkRqdjBtSHQvbXdNY3N5YVcxMUor?= =?utf-8?B?TlhNYklTMDdoeEk3MFJySm5HTWxoTW5vRE5xcGJ5QWtqTDV4ZUNOM01tamlD?= =?utf-8?B?VFFjSnBiSnk4UmIwOEZLQWdSV1prajFMa2p1WWMyY28yY3FTMzd2MTdlZVZS?= =?utf-8?B?NnM2SzY0SGJZOVV1MHExNWhBcXIvSVpWQVZuL1daeTVYQVcvSERBY3VhNmtE?= =?utf-8?B?QzRlazZHVGo5NTl0dHlkWDVJSEY0RXoxdVhoTUdEM0hnRytESlRFbWJtN1Vx?= =?utf-8?B?OWxFaWdhc092Y2R3RzdEUXlhT2tTYTdZYmtqUlgwa1c5ays2SzBWQjVGSEt5?= =?utf-8?B?dkhxS2VDZkk0V1dXTUIzMWloQ0dFd0E9PQ==?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WXRmK3kyd3dIeDllb1dhdXZkWWJRSEo5WmU2ZkJIeEt6dmEvNHNLSmsvQzRO?= =?utf-8?B?cXpuWGQ3THY3cThWNzBldDI1aDIwdHFLalk2Mjc4b2ZrSFo1RTh0alczZ2FB?= =?utf-8?B?dTF3QmJzRHQwbC92Qk02TTFtM0QxVFdZUGxOTHhGOThlbFN5ZnQ0bGtSaEFY?= =?utf-8?B?V2FJOWJwd0xoenNnMFpMTkJMV0dWWlNoNzNxTnNOSGY3bTVSbDA3Skh4bk5m?= =?utf-8?B?dVFqSGFaSEU2ZHBaTmVpdXE5UGpMY0FSTUVPdmgxd0JlcEl6VUhWZ0w3MG1N?= =?utf-8?B?eUZmcWt5SHBrVUJVSXJEMGFJdmJZZHgrUTY2ZE9KdTFLaUk0RHBySXpyWVJQ?= =?utf-8?B?elFTc2xSSURJUGpWOVFuVVA1Z21JYVkzNGJQSHQvcDVyVFNCMW56YWJwMkV0?= =?utf-8?B?cStjN3U5V3dRcjRGOGhuMkF2dHRyeE5uRzN3VmZEUWFxVXBTaVBxNDNHREh2?= =?utf-8?B?bnYvdmp2Q3A2dGt1UDV5VndZSXVsSk80RGRQaFVCQW1oaXQ3ZDJzL3F2c0tS?= =?utf-8?B?Sk45Y2RjQ2c1MGRwM0owS2xoM3lZaURmTXloUzRjbVBlU01VQVFIdGpSWEZX?= =?utf-8?B?eWJmN01EODBMMjR3L2tEOUlVVkcwZVBlK1BPc21VZkc4Vm5Ga2w0WHNveWVV?= =?utf-8?B?N3YydUw2K01yVTRKQ0djZWRXZGpLOSt4Zi9wNWV1bGVpRGpweElvSStzS2s5?= =?utf-8?B?SlVPYW9Xcm8zcE1uREpIbTJWYmdaWm54Ky8zUEc2M1c2cXd0Z3RrQ0MzbElm?= =?utf-8?B?NjVIekpTcmhsYXI2cEVWWGI2dTZ1Uk50VTR4Z2lzQzhVcHFKSTFwVVF6ZzQ0?= =?utf-8?B?S09XVlJ4VUpHMmtiTHU1TU1ZRzRralEzM05uYkdUY0YrL2gzRTNFbG9qdk5X?= =?utf-8?B?R2IwaCtvaXBCWE51NEp6R0pTUE9aMFJhMGhWSDN5Mi92TWltY2xyeEZxLzNB?= =?utf-8?B?UHEzZDVRTFY4Tzd6VlNHVmJka3JOR3NCZTNnckhkQmoySGJ6YzUwZEJ0dDZ5?= =?utf-8?B?RDdRSjQzUlcvTEFrU09KZGM5M3ZVQlJlZ2tHSkcvTm9FMXZLbjB3VjJhbDQ3?= =?utf-8?B?b0Z4ekoyVDZTL3NJS3g2RlE5VERmclByeVJmTmIwWDNzNGI0OUhzSWRKalM0?= =?utf-8?B?UEM2TExlNjgySERyWWtna1JpaVBXN2tvbkM5aVFqbVp0Sk92aDk2QVd0UjJt?= =?utf-8?B?OGx5bHFoOWp2anU4cHZENC80aWl1eGwydVVjaStmSW5yRm9QZ0k0ek9Tc1lj?= =?utf-8?B?Yk1xdElONjBCWTg1ZUpGV0FwcjNSREtxanNadTFpSHhBblBwVERhaGpBcFda?= =?utf-8?B?c1V2dGx2TGJZZHZVci91OVlOVitabUhwZWJkbFljZU5VdEZ1QjdyTjQxZ1B5?= =?utf-8?B?NG5EZXJJVjc3cG02L29tcE02dlJLSUd2bzlRMDZ2OUtqOXdqTzRKc1NEZmdR?= =?utf-8?B?S3IweFhHcklqd3ZyeFVrS3ZkaXdJemdPWGl1TzBZQTZieUhqVHhhdDdmZnJR?= =?utf-8?B?cEhlczNLUHJ2UEJmUm5namE4bHNIMk9FUmhEY2JOZHdxa2Jxb3R4ckRTQkR2?= =?utf-8?B?M25mNEpzRzN2VDl6bnhTUCtNbVpWcVlVUkdubUNxenNoQjVMYlIzcUZFSkFU?= =?utf-8?B?RS9za3J1d2U3NXM4OUdnU2dobnM4bVpGRzdnSVdiZm5sczBYWU1jeWtnclZ2?= =?utf-8?B?S1BndjhaT2NZSy81MmdLVFNlSnUxNVJUTGJoUDA2OVg0SVBweE9jcDV1dHBF?= =?utf-8?B?cFl1WlJkMkNzbWNKa0wxRmZUUWd1QVlXOHRhNW95TXlrbytDNkhXbTZrTTJs?= =?utf-8?B?NFU4b2VHS1VPM2tOdzhOQT09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b354fa5-f59f-4524-b243-08ddabbef7d8 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2025 03:44:44.9748 (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: DU2PPFA5BC39076 Subject: Re: [FFmpeg-devel] [PATCH] avfilter/vf_thumbnail: support high bit depth formats 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Niklas Haas: > From: Niklas Haas > > Implementation is the same as 8 bit formats, just right shifted to 8 bits. > > It's worth pointing out that this also works for HDR formats (and even DV), > because the underlying implementation is just trying to minimize the histogram > difference. If anything, using a HDR format will result in a *more* accurate > detection, because HDR formats tend to be more perceptually uniform. > --- > libavfilter/vf_thumbnail.c | 54 +++++++++++++++++++++++++++++++++++++- > 1 file changed, 53 insertions(+), 1 deletion(-) > > diff --git a/libavfilter/vf_thumbnail.c b/libavfilter/vf_thumbnail.c > index 90125a879c..f353f0495c 100644 > --- a/libavfilter/vf_thumbnail.c > +++ b/libavfilter/vf_thumbnail.c > @@ -53,6 +53,7 @@ typedef struct ThumbContext { > > int planewidth[4]; > int planeheight[4]; > + int bitdepth; > } ThumbContext; > > #define OFFSET(x) offsetof(ThumbContext, x) > @@ -193,7 +194,23 @@ static int do_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) > p += frame->linesize[0]; > } > break; > - default: > + > + case AV_PIX_FMT_YUV410P: > + case AV_PIX_FMT_YUV411P: > + case AV_PIX_FMT_YUV420P: > + case AV_PIX_FMT_YUV422P: > + case AV_PIX_FMT_YUV440P: > + case AV_PIX_FMT_YUV444P: > + case AV_PIX_FMT_YUVJ420P: > + case AV_PIX_FMT_YUVJ422P: > + case AV_PIX_FMT_YUVJ440P: > + case AV_PIX_FMT_YUVJ444P: > + case AV_PIX_FMT_YUVJ411P: > + case AV_PIX_FMT_YUVA420P: > + case AV_PIX_FMT_YUVA422P: > + case AV_PIX_FMT_YUVA444P: > + case AV_PIX_FMT_GBRP: > + case AV_PIX_FMT_GBRAP: > for (int plane = 0; plane < 3; plane++) { > const int slice_start = (s->planeheight[plane] * jobnr) / nb_jobs; > const int slice_end = (s->planeheight[plane] * (jobnr+1)) / nb_jobs; > @@ -209,6 +226,25 @@ static int do_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) > } > } > break; > + > + default: > + for (int plane = 0; plane < 3; plane++) { > + const int slice_start = (s->planeheight[plane] * jobnr) / nb_jobs; > + const int slice_end = (s->planeheight[plane] * (jobnr+1)) / nb_jobs; > + const int slice_offset = slice_start * frame->linesize[plane]; > + const uint16_t *p = (const uint16_t *) (frame->data[plane] + slice_offset); > + const ptrdiff_t linesize = frame->linesize[plane] >> 1; > + const int planewidth = s->planewidth[plane]; > + const int shift = s->bitdepth - 8; > + int *hhist = hist + 256 * plane; > + > + for (int j = slice_start; j < slice_end; j++) { > + for (int i = 0; i < planewidth; i++) > + hhist[(p[i] >> shift) & 0xFF]++; > + p += linesize; > + } > + } > + break; > } > > return 0; > @@ -286,6 +322,7 @@ static int config_props(AVFilterLink *inlink) > s->planewidth[0] = s->planewidth[3] = inlink->w; > s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h); > s->planeheight[0] = s->planeheight[3] = inlink->h; > + s->bitdepth = desc->comp[0].depth; > > return 0; > } > @@ -304,6 +341,21 @@ static const enum AVPixelFormat pix_fmts[] = { > AV_PIX_FMT_YUVJ411P, > AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P, > AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, > + > + /* High bit depth formats */ > + AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9, > + AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10, > + AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, > + AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV444P14, > + AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16, > + AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9, > + AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA444P10, > + AV_PIX_FMT_YUVA422P12, AV_PIX_FMT_YUVA444P12, > + AV_PIX_FMT_YUVA420P16, AV_PIX_FMT_YUVA422P16, AV_PIX_FMT_YUVA444P16, > + AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRP12, > + AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRAP14, > + AV_PIX_FMT_GBRP16, AV_PIX_FMT_GBRAP16, > + > AV_PIX_FMT_NONE > }; > Can't you use some AVPixFmtDescriptor magic to replace this huge list with a query formats function? - Andreas _______________________________________________ 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".