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 2FE414C659 for <ffmpegdev@gitmailbox.com>; Thu, 8 May 2025 18:37:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AF32768C0D9; Thu, 8 May 2025 21:36:59 +0300 (EEST) Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazolkn19011039.outbound.protection.outlook.com [52.103.66.39]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6619B68B9CA for <ffmpeg-devel@ffmpeg.org>; Thu, 8 May 2025 21:36:52 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SB+zkfNjYr+qMHvK9v1KU3dDuwg5eXckZ11DEXN17SMpdfaybkeyBFs/cTq88sZFQA+565FkYlQ+5lnkxX4hlhbqGL+sCtfm0eDmhaYw/rPWVQvzlG/+RTlBT3W64ES7P41ba9NdWDiNraZcdqz5Uzqg6oS6qm65ZWmKFt6Ho64DqBTIYgvnvbah4Y4bnJ/gw1kn6YJn+ReSp4JRpg1xmxhdenDkyQBxRXwlzNEyCJu9/Nt7s262QbezstjYqzvIby9i1u/ntuhArVI959kjt1wWdnUenSIn4PxcDkwfzj8346sMDyJrB6VN+4Z5D1JfN3pgu9K5GxsEIsheJpva2g== 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=N7o2yUsR0Jl16tRZwaM8SzZSlX3TykuhPJFwD4QytVg=; b=NtAciZIoXllXWSh6dZl1mEPzlfHDYRgF9IwZ+7jIJ/+xdNqN3xTvOKrnLVaTOY7ZLlgNpOc2AfzU8+RDYyVvI7u4wm43WL6Ljqec0MLd+GAcInCh0fCz5RfrY7WTJitdNDHz5OuKlMrKrOh8VH0GFETeN8HTY//6mLTeghRIubNKna1Qm2EOp3DCocxXGANiEiN0YwG2rEpf7fmQbgHHEVP+S1AZyGM9jruCEDjd8tCRrJrqr9WDQteXp8Xv+Rry2cJEcq+EDzr3RbKO2dDkx4AX85UqINdN5/WNMz+TRf+KCGfHXNR6EIwUCe/BuoGwkGiaoh0IPLj2lGvTYeBjNg== 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=N7o2yUsR0Jl16tRZwaM8SzZSlX3TykuhPJFwD4QytVg=; b=Rw6q4bolxr1UCvQYepe75RABUVnlHeH1PND230sPZjnMB37QmglcvVUyekCawHMl3NxXxOHB5Igo/2nH/Y5q5qk2H0+CDrWIc0ygI92gJyL8ysfwUC+ey7iodhtdWLU7chL2FynRnZT7elipBcgMPyIgfPS+w2IRISASHUzgtFPawBB3JydYl7Q1t/pafTMcZTg/DZa1sSroqr5P8WXl2511LYFcqv8VxoRKRb04gl0H9Sx8kVLhBtBFZo3dmSQwU0MyCdzBRG+vAyPTfSgQiLA75ygSHlEJRStsJD6xW0ISktjtgWSMf2z+U0Hftj7FCW61L1PBLihKEfT+vwSUJw== Received: from OS3PR01MB9944.jpnprd01.prod.outlook.com (2603:1096:604:1e0::10) by OSZPR01MB8718.jpnprd01.prod.outlook.com (2603:1096:604:157::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.24; Thu, 8 May 2025 18:36:47 +0000 Received: from OS3PR01MB9944.jpnprd01.prod.outlook.com ([fe80::7b06:78cc:adb3:903c]) by OS3PR01MB9944.jpnprd01.prod.outlook.com ([fe80::7b06:78cc:adb3:903c%6]) with mapi id 15.20.8722.020; Thu, 8 May 2025 18:36:47 +0000 From: Wu Jianhua <toqsxw@outlook.com> To: "ffmpeg-devel@ffmpeg.org" <ffmpeg-devel@ffmpeg.org> Thread-Topic: [FFmpeg-devel] [PATCH v1 09/19] avcodec/h274: add ff_h274_hash functions Thread-Index: AQHbti2XXOAInpiqiUyfj24I6ZmTrLPJIrCu Date: Thu, 8 May 2025 18:36:47 +0000 Message-ID: <OS3PR01MB994461E64E1FC1F2B27AAA56CA8BA@OS3PR01MB9944.jpnprd01.prod.outlook.com> References: <20250401171616.1378-1-toqsxw@outlook.com> <20250401171616.1378-9-toqsxw@outlook.com> <GV1P250MB0737CFBC80EC0133D4B1CE718F842@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> In-Reply-To: <GV1P250MB0737CFBC80EC0133D4B1CE718F842@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS3PR01MB9944:EE_|OSZPR01MB8718:EE_ x-ms-office365-filtering-correlation-id: f01d92f6-f259-4c3c-0ca7-08dd8e5f4a61 x-ms-exchange-slblob-mailprops: Cq7lScuPrnoSu68Y5FdRDlCPOBk43FEtdBBGQtT9EEeLHrMDbbSr6JnFoRMtV8Up+fvQ05eDh3hPc5XRhyxZwGvjvpTP9rJjxaOIPrdM3+T2y1/8cdbN0BpGin4Rl/z/U8RElogSEW+tGYV8lG4Zuffadwq+jM7yOdIdE9+0z2CxvNouZx1PWAzaWAaKkLK3OaAia3o+VrB0SDJUtzvilfD2jKLXdlqqoGGIgKSDztzWKQ9nvurpT3m/fuo04DkKc2Bl/eDiZg8u6TevnJdBLdGMVGB+HCrA+CEvDjwIO3utA5xnNy2FYE9M8yznCCLTfGDhsq0yo6DK/uCPZvC27pbJUX/SoPmZUj+GYnbFmy13Ul3Dwg4QpYuFlo8ptEFPM0XT2gpqFI2Z0SmAO5CCfZatsA2h1HBmx0szHA5H5mcAaO8Rw91UuNxUuF4qaZpTYvPF4mrw6lgBy+boHXvb1k9kBjrzYudCudm69jzqmVfgWMwpbBcpQjZviStYlMFvIHy8BUpVtNqIRJGMh/lTnM0XjdC8G61k5i2vjaOx62SspPEE5rOQ2NG5cgOUZ8f6Ey82sltgZYc/zwQ7Okn0Cf1gA/eKb8hmsQE7dovJUhH0xm7IEVr7+fm+mhOeGcV32/pL8jxUgAlPk4VMQwoweDOBB+JIX5WolkbHSg3rBmx8Rk6W04+I70d6CQ7BkVTl/xU1iiCsfZpxtLp1JlbfYAx9woblSt5e4Oqc3bW1k5LWNDlJZpdVU62ffzQ2LTqkyZtnjM+ztIo= x-microsoft-antispam: BCL:0; ARA:14566002|41001999006|461199028|8062599006|8060799009|19110799006|15080799009|7092599006|15030799003|440099028|3412199025|102099032|12091999003; x-microsoft-antispam-message-info: =?gb2312?B?azlrOGN4RERhTWRUb1FuUm1OSWVlRXA0L3FFc20xcDh4Z29HcGR4UDFJNzE1?= =?gb2312?B?djVrSlRKUlJqek5XMWhoY2ZRRW1nOHFKMXJSVU9yMXV4MjE2ZW5jY0tLQ1pK?= =?gb2312?B?bWYrT2RLekNlTDNPRmNsWVNETGhvSS93V2N3RXhXb2ZrTzgvc1ZIYTRHcUdj?= =?gb2312?B?NjM2TVRTSGNLQXV0NFl3RUgyaHQ2R3FxaEhVSi92dnUzNU8wNjc4ZnZxdkhj?= =?gb2312?B?SnkzZHdac2p5OXpXSnc5SzNndnp6a3VBREZFZERsdzFFS091YXQ5eWxRWFlQ?= =?gb2312?B?c3JhQi96TmN2VlRoS2YyN3FLT200ejUwZUFVdWhBZ2FkUzl2Q2V3UWhiZC92?= =?gb2312?B?QmNMRW9HZ1YvSEs5UTBkZGlRcFhxUzZpcVNVMVJPU09hdVp0SDd3NzhFZ3Zo?= =?gb2312?B?N1FyRmNJTFJTaW54VUNGWG1SaGhPVWhPUkh4Ynk0UHJiYk93VG5md09hTVh0?= =?gb2312?B?YXRrMElqNFJHRjJ4eElUSU1FMUtrNWtLcHAzYW5RUkE2NkpPdXNpeUQ1R29j?= =?gb2312?B?Q2JQazBEaUluR3d6ajVZOFE3dVBTakNkYlF3d2FGTWkzKzBiempxMkgxUUlE?= =?gb2312?B?ZzlHT3p1dDM0Z25OVEgwOHd5L1lzRkNLVXkrVVFvblRmSStDa1BpYklDRTl4?= =?gb2312?B?bE53RE5hWTloMGt0NkdDRjd1SW1lNDcvdEFmNzE4QjBhY0JOU1JMcmRLZGJB?= =?gb2312?B?S2dTQ2U2Vkx1cWZ2UVl5cDE2cnBRclVVQzdrQm94L1lESVpYU2ZzbGtPNzZy?= =?gb2312?B?SkQ5cURjc0VTdkZyejBkc0lIeHk5TzRWOXlkZ0lJZWZqOExEdGtIRGEwdkdp?= =?gb2312?B?N3NCcURJaVgwYmJHYUtUVlR5U2prOG1VMmRlMlFzUlBlUzZ2cVdnZGhpeHFw?= =?gb2312?B?dEFIeTJMTnZHY2tlVnNNdmVhU2RMWjBtdVFvYUE4RVlxTUdKa2drQzVScjdD?= =?gb2312?B?QTdBSkdhdkJtWWhRZHBGSEhGTERidVRVbWZKdUpWdEZzRlBqU2VoUEtPQncr?= =?gb2312?B?MG9TRzBWN2Q2STVIUElWcytiWXBQcjQwWitHVUlLdUwvZlJOZXM2ZVlCcFVF?= =?gb2312?B?cTBvUGFJaklFdDJ0NklEcW5TMDA4WE0xUjRoaXpXdDZQZzlha1Z1T2JacUVr?= =?gb2312?B?ME5SNmtlSDRhbElNeUt6S0ZDTkFkdTVPTjVValpmWTJpWlAyR2ZPdWhGa3NH?= =?gb2312?B?VUpNWkhlcjlENlg3Y1JHempZaC85VUlZczRxdVVzQncxbXRFSWVmR3FVaWVN?= =?gb2312?B?MEFSeHJYSjJ1RlQzZCtIdTcwV3loaTNDaDZ3MUxVMWRLVVkzcGlOekpZTDFn?= =?gb2312?B?Y2dRUFZhNnNOUlBKTmM4dkNoRW1xOW16bnNuSU0vRnJqRGFQMXZPdGZJZWJ2?= =?gb2312?B?NkxkeDhlK08vclBvOHZ3aFRGT09SbysrSlFRWEZrWUMrYWxNZWdFUk1GVkRQ?= =?gb2312?B?Q0VRR0JpR3dJS2RWZWMxa0dGU2FCUlVGYXA4Z1dRYTNMWDkyUUdTdkh4aU0v?= =?gb2312?B?ank5bEFranY0cjNFNVl0dTVSNlpBZ2h0SCtoUUhxQzJ6ZnhjeDl6Z3RSMDRS?= =?gb2312?B?akZ4RkhwT1FRMjV6dDdnN2NyQzlEalBtdGNRK2J3N1dOYlhNQzBwcEdaaVFI?= =?gb2312?B?U0xpQVNLVlFPd3M3dlRPMnRQU1pGUkE9PQ==?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?N3JKVU1KR0E3bGtEMWxXbTRLVzNZelRHNzFSc2owRnVtSnprRkdOd0VDd2hh?= =?gb2312?B?OW1ocFhMelNualRYQkNnM08wNVgxY3RJNFhYbFFSWEF5SHFlOHNMNGZFb3pK?= =?gb2312?B?bXZhbkZmaXN4cThPTmtxWG56ZGVJcXFsd0lSRzUySzEwbFg4TFdnSTRRbmRn?= =?gb2312?B?ZXhTYmFvcXNQOG1PejJyeXE1cmZtR2FJcEp0clZpODBMN1QwSWlDMFY1NFpX?= =?gb2312?B?WXZUYllFcUdPbHloNlJVbm9ERThPRERhMU41cWFpM1NBb09xeTdPSitZeXJU?= =?gb2312?B?TWd0dENLK0dWbUZxVkd3ekg1djhyUFFWSFl4Szc1aHBWMFdQUVdPYUlSNVpv?= =?gb2312?B?WFJqRTkzNU1ETkxYc1R4bVFRd2RzZTZpc0dOa0hYM3F2WTA0cFNyWUhtR0w3?= =?gb2312?B?SGY0cUh3UDBxbUFJeUM1SSt2ak9RVVlnSzRmUDdaVjN6ZXdmd2ZhUEpaUjg5?= =?gb2312?B?WGlXYmtydTJoeUg4RWIveWVSWEtKQytCUThxR2tESlY5b0tnVWluYld3dWVY?= =?gb2312?B?MHdIZDhORS9ZRXYwTlIvNU1hNjhuQjFWUDlFdVM5RUEvSk96ODhUb2xjZUd3?= =?gb2312?B?TUk2ZWlPZFFaUDk3Ly94VDRrdDVNeHZIa1M5cFQvejJZcUhwT3M4ZFNJNkJo?= =?gb2312?B?UVIvNHhjVVE2MlpTV0xKL1g1MDlLK1BZRFRyRCtNb0NwK2VDMHRXbFNYalFi?= =?gb2312?B?VkdPa3FQbUVGUXlPOFZET1Y2WU5GMGlnOFVGSnZBZ1pPRUtmMjVXUWpSTTVL?= =?gb2312?B?anlNeXkvLzAyTHNuRlV3WWs4SkV3YlRaa016ZlQzRWVvemhDLy93S3p5S0p5?= =?gb2312?B?WVM2UEtDRXEzK1gyU3hxWExwdy9RVVpvUDdlZWs3TkhUYmFSZTRIQ2pHZ1hx?= =?gb2312?B?aTFOa3NrM3llQWJBY0tNd0dvVjdDNTFwKzdYTWlVMmdHZDg2Zi9QTStDT3Nu?= =?gb2312?B?U3Q2c1ZCaCs0cE5EeFZSTk93Uk5JSEFOWGZMRjUyVFZJTmpOclV0bXNrYWov?= =?gb2312?B?WHdkMk05cnBYaTkwYmR5am9NMnBrMTJjZlgrUjZCQTM2cjBOcVU3aUp1UmJr?= =?gb2312?B?NWNxaGw3Z2ZlTmttWHNJZ3hjcDlMa1VXQldyL1FuQkZXSXNXZWlwOTh5VCt4?= =?gb2312?B?OVF6OUk5K280ck1mMURZaXRURGRPM1htdDNzMTRMQ2RVTnZidDFwT0NxMXBj?= =?gb2312?B?QVJrUUdkMW5NSk5LelBSUVFCdkk1NnRGbVVwOUs2QUpoSVFuQ1BabHpTdE1B?= =?gb2312?B?QnI0L1lBVWNrTFZyR05WUlc1WlhhYzV1U280WmtadjltRmZ4N201NVFVVXYz?= =?gb2312?B?Qk41WmE0ZFV0dC9LM2xtemRUK2VCbE5qSGQ5M05BRy9ySElIRlVqUEMwKzNR?= =?gb2312?B?dUZsbEFGVGIyeUNJUytzZzUrMm0rVmo4QWtpYzd3T1c3b1JVczBHaGREQXJy?= =?gb2312?B?K3RpdXNlQ2RJTWNoS2w0R2NqckV5Q0JPMTR6Z2I0SVVVQVNDeDZOVUUrWmxR?= =?gb2312?B?ak91SXQza2Q4TGoydklqbDFJVUVGS0NLVnlIQXpaNXlreDF4cURxdUl3Qk11?= =?gb2312?B?M2JlelJkTHF3Um00TE5ndXQyUFpxaThrSzNJenZZVjlSZE5wSzlPSFVka2Zw?= =?gb2312?B?Z3ZFNk9pbnBUM2xKRE5UU2htNysvN0E9PQ==?= MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS3PR01MB9944.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: f01d92f6-f259-4c3c-0ca7-08dd8e5f4a61 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 May 2025 18:36:47.7167 (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: OSZPR01MB8718 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] =?gb2312?b?u9i4tDogIFtQQVRDSCB2MSAwOS8xOV0gYXZj?= =?gb2312?b?b2RlYy9oMjc0OiBhZGQgZmZfaDI3NF9oYXNoIGZ1bmN0aW9ucw==?= 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/OS3PR01MB994461E64E1FC1F2B27AAA56CA8BA@OS3PR01MB9944.jpnprd01.prod.outlook.com/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> Andreas Rheinhardt: > toqsxw@gmail.com: >> From: Wu Jianhua <toqsxw@outlook.com> >> >> Signed-off-by: Wu Jianhua <toqsxw@outlook.com> >> --- >> libavcodec/h274.c | 163 ++++++++++++++++++++++++++++++++++++++++++++++ >> libavcodec/h274.h | 7 ++ >> 2 files changed, 170 insertions(+) >> >> diff --git a/libavcodec/h274.c b/libavcodec/h274.c >> index 5709200322..9edc705042 100644 >> --- a/libavcodec/h274.c >> +++ b/libavcodec/h274.c >> @@ -26,7 +26,11 @@ >> */ >> >> #include "libavutil/avassert.h" >> +#include "libavutil/bswap.h" >> +#include "libavutil/crc.h" >> #include "libavutil/imgutils.h" >> +#include "libavutil/md5.h" >> +#include "libavutil/mem.h" >> >> #include "h274.h" >> >> @@ -790,3 +794,162 @@ static const int8_t R64T[64][64] = { >> 17, -16, 15, -14, 13, -12, 11, -10, 9, -8, 7, -6, 4, -3, 2, -1, >> } >> }; >> + >> +static int verify_plane_md5(struct AVMD5 *ctx, >> + const uint8_t *src, const int w, const int h, const int stride, >> + const uint8_t *expected) >> +{ >> +#define MD5_SIZE 16 >> + uint8_t md5[MD5_SIZE]; >> + av_md5_init(ctx); >> + for (int j = 0; j < h; j++) { >> + av_md5_update(ctx, src, w); >> + src += stride; >> + } >> + av_md5_final(ctx, md5); >> + >> + if (memcmp(md5, expected, MD5_SIZE)) >> + return AVERROR_INVALIDDATA; >> + >> + return 0; >> +} >> + >> +static int verify_plane_crc(const uint8_t *src, const int w, const int h, const int stride, >> + const uint8_t *expected) >> +{ >> + uint32_t crc = 0x0F1D; // CRC-16-CCITT-AUG >> + const AVCRC *ctx = av_crc_get_table(AV_CRC_16_CCITT); >> + >> + for (int j = 0; j < h; j++) { >> + crc = av_crc(ctx, crc, src, w); >> + src += stride; >> + } >> + crc = av_bswap16(crc); >> + >> + if (memcmp(&crc, expected, sizeof(uint16_t))) > > This seems endian-dependent (as are the other checks). Why don't you > simply pass the proper CRC as uint16_t/uint32_t parameter? > >> + return AVERROR_INVALIDDATA; >> + >> + return 0; >> +} >> + >> +#define CAL_CHECKSUM(pixel) (checksum + ((pixel) ^ xor_mask)) >> +static int verify_plane_checksum(const uint8_t *src, const int w, const int h, const int stride, const int ps, >> + const uint8_t *expected) >> +{ >> + uint32_t checksum = 0; >> + >> + for (int y = 0; y < h; y++) { >> + for (int x = 0; x < w; x++) { >> + const int xor_mask = (x & 0xFF) ^ (y & 0xFF) ^ (x >> 8) ^ (y >> 8); >> + checksum = CAL_CHECKSUM(src[x << ps]); >> + if (ps) >> + checksum = CAL_CHECKSUM(src[(x << ps) + 1]); > > Why don't you use checksum += instead of using checksum in the > CAL_CHECKSUM macro in a hardcoded manner? > >> + } >> + src += stride; >> + } >> + >> + if (checksum != *(uint32_t*)expected) >> + return AVERROR_INVALIDDATA; >> + >> + return 0; >> +} >> + >> +static const uint8_t *get_plane_hash(const H274SEIPictureHash *h, const int plane) >> +{ >> + if (!h->hash_type) >> + return h->md5[plane]; >> + if (h->hash_type == 1) >> + return (uint8_t*)&h->crc[plane]; >> + return (uint8_t*)&h->checksum[plane]; >> +} > > This function seems completely useless; you should better pass the > proper expected value to the functions directly (by value for non-md5). > >> + >> +enum { >> + HASH_MD5SUM, >> + HASH_CRC, >> + HASH_CHECKSUM, >> + HASH_LAST = HASH_CHECKSUM, >> +}; >> + >> +struct H274HashContext { >> + int type; >> + struct AVMD5 *ctx; >> +}; >> + >> +int ff_h274_hash_freep(H274HashContext **ctx) >> +{ >> + if (ctx && *ctx) { > > Don't check for ctx. Passing a NULL to a freep-function is insane. > >> + H274HashContext *c = *ctx; >> + if (c->ctx) >> + av_free(c->ctx); >> + av_freep(ctx); >> + } >> + return 0; > > Why is this function returning anything? > >> +} >> + >> +int ff_h274_hash_init(H274HashContext **ctx, const int type) >> +{ >> + H274HashContext *c; >> + >> + if (type > HASH_LAST || !ctx) >> + return AVERROR(EINVAL); >> + >> + c = *ctx; >> + if (c) { >> + if (c->type != type) { >> + if (c->type == HASH_MD5SUM) >> + av_freep(&c->ctx); >> + c->type = type; >> + } >> + } else { >> + *ctx = c = av_mallocz(sizeof(H274HashContext)); > > Why is this separately allocated? > >> + if (!c) >> + return AVERROR(ENOMEM); >> + c->type = type; >> + } >> + >> + if (type == HASH_MD5SUM && !c->ctx) { >> + c->ctx = av_md5_alloc(); >> + if (!c->ctx) >> + return AVERROR(ENOMEM); >> + } >> + >> + return 0; >> +} >> + >> +int ff_h274_hash_verify(H274HashContext *c, const H274SEIPictureHash *hash, >> + const AVFrame *frame, const int coded_width, const int coded_height) >> +{ >> + const AVPixFmtDescriptor *desc; >> + int err = 0; >> + >> + if (!c || !hash || !frame) >> + return AVERROR(EINVAL); >> + >> + if (c->type != hash->hash_type) >> + return AVERROR(EINVAL); >> + >> + desc = av_pix_fmt_desc_get(frame->format); >> + if (!desc) >> + return AVERROR(EINVAL); >> + >> + for (int i = 0; i < desc->nb_components; i++) { >> + const int w = i ? (coded_width >> desc->log2_chroma_w) : coded_width; >> + const int h = i ? (coded_height >> desc->log2_chroma_h) : coded_height; >> + const int ps = desc->comp[i].step - 1; >> + const uint8_t *expected = get_plane_hash(hash, i); >> + const uint8_t *src = frame->data[i]; >> + const int stride = frame->linesize[i]; >> + >> + if (c->type == HASH_MD5SUM) >> + err = verify_plane_md5(c->ctx, src, w << ps, h, stride, expected); >> + else if (c->type == HASH_CRC) >> + err = verify_plane_crc(src, w << ps, h, stride, expected); >> + else if (c->type == HASH_CHECKSUM) >> + err = verify_plane_checksum(src, w, h, stride, ps, expected); >> + if (err < 0) >> + goto fail; >> + } >> + >> +fail: >> + return err; >> +} >> diff --git a/libavcodec/h274.h b/libavcodec/h274.h >> index e1803edaf3..e2bb1aec55 100644 >> --- a/libavcodec/h274.h >> +++ b/libavcodec/h274.h >> @@ -64,6 +64,8 @@ int ff_h274_apply_film_grain(AVFrame *out, const AVFrame *in, >> H274FilmGrainDatabase *db, >> const AVFilmGrainParams *params); >> >> +typedef struct H274HashContext H274HashContext; >> + >> typedef struct H274SEIPictureHash { >> int present; >> union { >> @@ -74,4 +76,9 @@ typedef struct H274SEIPictureHash { >> uint8_t hash_type; >> } H274SEIPictureHash; >> >> +int ff_h274_hash_init(H274HashContext **c, int type); >> +int ff_h274_hash_verify(H274HashContext *c, const H274SEIPictureHash *hash, >> + const AVFrame *frame, int coded_width, int coded_height); >> +int ff_h274_hash_freep(H274HashContext **c); >> + >> #endif /* AVCODEC_H274_H */ Hi Andreas, Thanks for your reviews! They help a lot. I've updated the v2 patchset based on your comments. Would you help to review the v2 patches? Thanks, Jianhua _______________________________________________ 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".