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".