From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id AC9744BA6D for ; Sat, 13 Jul 2024 10:32:09 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E31868DA6F; Sat, 13 Jul 2024 13:32:05 +0300 (EEST) Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020109.outbound.protection.outlook.com [52.101.229.109]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E83168D723 for ; Sat, 13 Jul 2024 13:31:56 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R8tV7i2KoUIDPcLxMC9HTI9VcstJ5o5DSpRqIWybWjYEJtB2JgUyCsf1wnf9A/+LZ7H04p5XzJHVbTmzMrC9CClZ74krlVxeG6vM0kfvWgoLvzW5n1MCL5+r/OrH7qUOEYyzAlwEjsN0JHmWy2yyd67DyG2LjHACU8+eVSmfd8TGFGfdP+b/UGR0AcqP7e5Sh8y0ZULgjY/E+5UBpQwuRPxAz0GXMqR3KEsG/jUweWI64VqhPWonjsJd4PYEW+jvnficZGX3FJ6n+KHiAIn6LVn21QJ339asvDKB973nEgmKNwld1cmkQBgBcvgDCJc0eEunR8r5CLKHXyaNjI5cIw== 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=tWl4TBSNVx5flg7SBsD12+w4AswdnKCMt5Qb0ZRndFU=; b=Bk+vJXGoLsv0IsvB2V0osUjGdwSCjKluYtoUK2RAlO8lWSpCb8xfnTJ971lK2RfN4M8PNQ4ckjINTwO1pywzJghtJMWWmXleSIq+GCM/cPw+X2tUNvXiknMdhsw801iIABMptdDP0j64lS8aX7L335GS64yzgE38eyUe8yHxnMnFDV4EQPEc7dCylzymqcurJe5BfuvIDpaSI/XLkdwjMDzH+XWAGNKbRJksxtIJ0F1eTdZc99dxyujnbD9rYlMemKMEhGgShKXqpnaDhkJEUwFTU3vZmJ65T6VYIwFB+2Gbx97tbfwZIUSDLtS6RNWMG7oo4pePgXh/cYDwKeXG7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=es.takushoku-u.ac.jp; dmarc=pass action=none header.from=es.takushoku-u.ac.jp; dkim=pass header.d=es.takushoku-u.ac.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=takushoku.onmicrosoft.com; s=selector2-takushoku-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tWl4TBSNVx5flg7SBsD12+w4AswdnKCMt5Qb0ZRndFU=; b=tl2bTMHncWbr01priNGsEMJwH0gITDxVBcyceJ50hNrXjGnkAOfIHaH1ERXrNzumuxYAb5pZwezrLXYe1rvaC91Ss7i9o1jvimtvMLWrv2GxJ7KlEctxzbX/hsD5mJKZAMxKriADQSemJXujH+7FE+Rp//4P0ldstX/w7hH0Oeg= Received: from OS0PR01MB6001.jpnprd01.prod.outlook.com (2603:1096:604:b7::12) by OSZPR01MB7052.jpnprd01.prod.outlook.com (2603:1096:604:118::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7762.25; Sat, 13 Jul 2024 10:31:50 +0000 Received: from OS0PR01MB6001.jpnprd01.prod.outlook.com ([fe80::181c:c1f4:9b58:f6cc]) by OS0PR01MB6001.jpnprd01.prod.outlook.com ([fe80::181c:c1f4:9b58:f6cc%7]) with mapi id 15.20.7762.024; Sat, 13 Jul 2024 10:31:50 +0000 From: WATANABE Osamu To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH v4 1/3] avcodec/jpeg2000dec: Add support for CAP and CPF markers Thread-Index: AQHaxjuuDZyLEAx1QUaZDOVU3TJnPrHyo6cAgAHvj4A= Date: Sat, 13 Jul 2024 10:31:50 +0000 Message-ID: References: <20240624133734.3032409-1-owatanab@es.takushoku-u.ac.jp> In-Reply-To: Accept-Language: en-US, ja-JP Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=es.takushoku-u.ac.jp; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS0PR01MB6001:EE_|OSZPR01MB7052:EE_ x-ms-office365-filtering-correlation-id: 38f26ed0-688b-48f0-74cf-08dca3270182 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|4022899009|366016|41320700013|376014|38070700018; x-microsoft-antispam-message-info: =?iso-2022-jp?B?ME1GUWxLSzJnWXhMS1F2U0pUejlwZW5LQnUwazJTN0RXQTdXTy9UQTlm?= =?iso-2022-jp?B?N3Z0amh3bC9McWNRamFQUUJncFdia2dQdCs0UXBTazZ5WExXUTBmLy9Y?= =?iso-2022-jp?B?QjMrNko5VXgvaklMdGhXa3IyL0FkYWQrYUxnQTNISmY3L1UyOFVwcktU?= =?iso-2022-jp?B?OVNrRFFDdjNoeG9lMWNpc3J3Y2RmbVFKSHdCUURNSjdGWC9PbmZ5UWJh?= =?iso-2022-jp?B?S1REYSt2RVM2NXYwaFZ1M1BtTmJwaDJndVVqMWN4YWxzSWxqemxlSFBy?= =?iso-2022-jp?B?SlMxczFzTkp2UHA3YW5naFM0NnBFOVBZUHY0RTJuMDRteVR4djJNNFZM?= =?iso-2022-jp?B?YWYySTdzZ2tmbVhzRnN0WWlNK0ZXRlRzc0NlRjNpNGhEOVR4QjZGVllN?= =?iso-2022-jp?B?bkNsYlhRTkRuTUxCZHdkKzV3VHVDN0lBNWI1MytRK0xySW43RC9ZVnEz?= =?iso-2022-jp?B?RTJmS1hDczFqVzROMlZ6dUNqQm5zemZONFFtU0FyTHFYaGp0cG9ESEJk?= =?iso-2022-jp?B?KzBNdWpsdXo0aS9ZTWNPc2xGdThhNnFMVDFqWkJKbDV0SWRWbzh5ZnRs?= =?iso-2022-jp?B?VCthK1dtbWhudnQrak1zNTIrMXd0YkVKWUcvZ2dFdU8rTjdFZnEvYmlj?= =?iso-2022-jp?B?a0pGaWJUd1REWHdUVnM3aVdNK3dCOUc0SEw2SlExSk4yaVVCdnNkWXo2?= =?iso-2022-jp?B?WHlYaWhNM1c5TTZKT1AwaGcvVWxOYUx1TnJva1A1QzVJYnRVV3J5Y25h?= =?iso-2022-jp?B?T3J4bUZtZng2MHNPOERPN21qOVZwVlBxODA2eFEvNVhVZll2cTFwQWl5?= =?iso-2022-jp?B?eElVZ2hrS0dyRDE1TjN0Y084aGlJVzc4Tmc2TGZYSzN4NEkwR05nRldZ?= =?iso-2022-jp?B?Tk9TelV4SFc0dUdMVVBKWndvMlBMVC9aK1pqalA1QW1ZeHhwSHcvNHk0?= =?iso-2022-jp?B?WTBvYy82Q201UHJRamtDNmtYYUQyUW5qWEsydHA0eEFWMXltQjRhTVVE?= =?iso-2022-jp?B?TnlsaEQ2RyswL1k0Q1pYdlprVld1cnMwVE95ZTlNVzJxVnd6dldzQUU0?= =?iso-2022-jp?B?QkE2MklJangyOHp3WVVzaVdhZmxSU2FqOVkzOEdtZnZtS2x6QTczRzVW?= =?iso-2022-jp?B?UnJCbXUwaURkUTlvODJqLzMrSGVnTjVXRktUbGd5a0FkTjVQK1BGLzFk?= =?iso-2022-jp?B?U1FjaklIVmVqSFdYSGxoN2NEMm1UZzVnazQya0k0OFIxSjVWUmZpcEkx?= =?iso-2022-jp?B?eHNzQm9mTGZrejdiMC96Zi94cGNFN081dFEyRU9KTkxPdDZXbXJrcith?= =?iso-2022-jp?B?WUsyb2o5cnFCOCtCWmZMREUwcDlsaXowZzBDT2FwWVpsNWJYcmV2OUMx?= =?iso-2022-jp?B?MUY0NDFoaHdhRlJKemlwV0p5L0thU0F2YnNGeFhlYWdaSGljOHQ0Sjd5?= =?iso-2022-jp?B?VkZRQUIrS2M3aUszY245dTByQUNhM0xNalZ1SHhMUjRucjIwM241QlVI?= =?iso-2022-jp?B?VGFseWNCRXpUQ3MyK09aRjQ1YUpsa2dPeWlXLzA5dEZGWk9EM29VWnRK?= =?iso-2022-jp?B?aFpJRzN6dHZWRStWd2gxYlNxb2FEbm4zcU1VVlRXd0YrU1kxTmxUWGZL?= =?iso-2022-jp?B?bmF1ZzhKY2YzQkRXVEFneDFwM25RUDBJc3VwL2hSeXllblRmV2VoeE11?= =?iso-2022-jp?B?WHlPd0VEZmZWbHBuRjV1b1BRSWEwOGVGWGlFRDc4bmpjK0pBQUgwVFVj?= =?iso-2022-jp?B?VVh6WTBRWWRFMlJ5cUptOStSQlBUSXRsUHlCZ2pPUjZHUkRjMXZsY2RW?= =?iso-2022-jp?B?cnZEY3FVdm83QnRDY3U3c2VUNVUra2ttQVBFSUdObXFwSHBmRjRaRnVw?= =?iso-2022-jp?B?bVMxcFFaUG9QTExXMks2M21yZ0NkUThPYzFFbk5XV3UyNkxjL1lpMFV6?= =?iso-2022-jp?B?VWd1YnpKNUJrZmNoVTVuL1FIaEo3QT09?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:OS0PR01MB6001.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(4022899009)(366016)(41320700013)(376014)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-2022-jp?B?U2tNaG9xWVdGQzEyaVQvekZtRE9McXFDU0lrNHJvYVN5KzkwYzJJUWdm?= =?iso-2022-jp?B?bEpuejE0c1FYTUFRRlpibFVweTNCYjZBUGExRE1jMFFaREc2WTZkclJI?= =?iso-2022-jp?B?SGd3d1lhS3NaZWkyUEdHTUMwVmpaQ0ZZeDNYcVh5cWRNakdiZUZqTTk3?= =?iso-2022-jp?B?ckxIdWFidjUzVitxeWZnSFRvZDZBZjM4ZUdtMGhPNWUyTjhCTytmMmI1?= =?iso-2022-jp?B?UXNKRmowZU5wUW9OTzVuTHFldVFvcU14Q2xFc2F4STdveFFTNmdsdmh0?= =?iso-2022-jp?B?azlpN3ZrQ1p1Tk5rYm9HLzY3cUlkc1E5SDVmcVJnc2Rpemo0MkJKWXJj?= =?iso-2022-jp?B?VXQyRGlZRWlsaFZsOTUvUGs3OXFmZFA4VjJieTF0TFY4cWNYa0ZkUjBV?= =?iso-2022-jp?B?UEtJVmJOT0VoNHIyTkIwK2VPcllVZ2NnaUxlUmJhdyt1SzJYdGJTbUls?= =?iso-2022-jp?B?VDRPdzlBeUxRcm1lclIyVjl0Ky9TV05MaDBoNkpOTUQ1T2hCbURFVE1p?= =?iso-2022-jp?B?bVZiRElTR09qNUc0Rkp4YzIvNlFlVDRaNWtIVGV2Q0xOZ1g2cElJVjVO?= =?iso-2022-jp?B?ZE1sYk5NNzNnUVdSVVNzNWQvVVFzZW9qbWN5dWN6eHpnOW13QmNUenkv?= =?iso-2022-jp?B?NXZsa1prSmp3M0syYjNGSnYzb3pVRlJZNW01aGxWb2oxYTkySTlxbmRK?= =?iso-2022-jp?B?RjlVeFJMVGJlYkEra3lnTXBCcXZqeXc5L05kc20xU1lSTlpLME1IQ2Nq?= =?iso-2022-jp?B?NkR2ZEhPM0MyMWZ3OU0wUVdKWDNreitsYTUzY1RZbjF6SnVVWUNIandR?= =?iso-2022-jp?B?QmtaSUI1VFFpYVJjWkxYclBMSVZUbEttR1MrQXBSeU9NV1JRbEpTdHNL?= =?iso-2022-jp?B?endOcGFEdjd3bFNWWHhtTVBwdUljd28zVU1kT1p6VFBrOVlNVHhtUGpT?= =?iso-2022-jp?B?M25LK1pWajh2MjB4R1lBRGN3aEtNTldNZEJUcWhJb2VuSFJoVE9KS2g3?= =?iso-2022-jp?B?YytCUHJiTmFXV1dhSzQwcDUzUXZ0K3dYN3NyUGp4M0k5SU9IY203a2E3?= =?iso-2022-jp?B?NUdFbVZJK0czSG56TnJ0bk1qRGhTcGdJYjlnSGJwbFc2UW1JYmZjOE05?= =?iso-2022-jp?B?ZU43cFlSaVIwcmtGcUQ1cFZyRm9jVFNYQ2VNY0xtc1B4ZE1RSDg5UXIr?= =?iso-2022-jp?B?YksycWw1eW0wY2VUTmR4M3U0bzFyeVFVVXYxQXdCS2dGUnNPTS9Ib1do?= =?iso-2022-jp?B?SmFWcS9VZFdkTVRuUFR1TTFreTVwNnQxUEhGcDFEMitWYllKN2ZMRVZ2?= =?iso-2022-jp?B?UHhQcHNNVTVUSHJQSUNTQi9TTnM5WUhHY2N1UXFBckF3a2ZIZnE0WDBE?= =?iso-2022-jp?B?L2tBR3hJYzlTVHVOWi93Rll2aVEzVk5YVlBieWpBT0NpM3NuaXNuNjMv?= =?iso-2022-jp?B?bTFFdThobmcrdENiSU93ODdXQUJ2dG9SY0tadXg0VWNCOEpodTFIQ2dr?= =?iso-2022-jp?B?dm50MGZUWmUyU1JieGE5ckp1RnBzQUp1aVQrUmlnVk45cEc1L3dMRzJS?= =?iso-2022-jp?B?Zk1HcWRXYW4zNnQ4anJnalJpVExCclM5Zzc0aHd6V0NaeVovWUpyTTZM?= =?iso-2022-jp?B?SytUK3crSnk4M2R0a1JVNnJTaURsdzVnT0oyeWpFY3Urb2l4WjNjWWlS?= =?iso-2022-jp?B?cC8zZnFYWi82WkhtWmNhcm1WUXFtSUQ3TnNXcHFCc05ETGt4eXF5RG9D?= =?iso-2022-jp?B?TVppc2gxQ3J6bUZJdVZWcHNnbHRjSlRmaXhzZ0tFOVE3aWc4UURFMytC?= =?iso-2022-jp?B?Vm5TdXpESFBTOG9UZitNRlhlcU9sS2d4TlQ4K1JwVW51MG85QkpYZGRk?= =?iso-2022-jp?B?Sk1XY1ZNdGtZS3A3ZUNzelVna3E1Rk5NWTNIVEl0ZVVQYWtYaE9FbmVn?= =?iso-2022-jp?B?a3RDclBrTk9kZ0ljV1E4UkhLdXNyemVZRjQ2TThBZ2wzV2svQXVNa1Bk?= =?iso-2022-jp?B?WmtHVnVJS21QOXZkRXZhVlg2RlZrOUN3M0Zid3Q5YjZ4eDAzNXVaVHF1?= =?iso-2022-jp?B?ZWJHdHBhZUNxU0E3OHJNQUtsRGVZdDRxaGRweUhuMW9WTDZidnJRUjQy?= =?iso-2022-jp?B?anNmRGlzWHV6SU9vS2JQSVR1emtrYTdYRzdqQmJLOTVyOTVKVjZIZXg0?= =?iso-2022-jp?B?R1hwYlZWbWw1ZHRPOG41VzlRNnBBUFFXVDJlU2dDL0Q4RG9ScDBHMFJF?= =?iso-2022-jp?B?aWd3NXBIYndzV2FxZXVuTG0xUnQxNkgxTWtaVHo2TjZRY243YWVtbFlV?= =?iso-2022-jp?B?MXVOTU5hbVozNUJuYm9lbzBEa0ZTMk05TUN3Uk52R2Q4azhHYUZEbmdR?= =?iso-2022-jp?B?SC9NclVZMzJkbTd4clhzNDFFLzUwSS9mTEZsVjhYUm91STk5ZlhadG1m?= =?iso-2022-jp?B?UE9ydFRZb3FBbUJCSFZBZ2drTFR6Q3NvM00wPQ==?= Content-ID: <8163512A2CE78B4891B457357FBDE6CA@jpnprd01.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: es.takushoku-u.ac.jp X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB6001.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38f26ed0-688b-48f0-74cf-08dca3270182 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jul 2024 10:31:50.4030 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 853333e5-13b1-4738-ae04-bfb589cf2665 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: EtWOZITd+gR1Rv7csVEY1RRhpBQQiVpw9I8qwwgE8+Ppg20Qbkmb0NLY2GB+oHeJzA9ca3XuappYjuGkSAcnJd14fqFF7ZAOplbMe6HhZ0k= X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSZPR01MB7052 Subject: Re: [FFmpeg-devel] [PATCH v4 1/3] avcodec/jpeg2000dec: Add support for CAP and CPF markers 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: > @Osamu, did you check if the decoded images fall within the tolerances > specified in 15444-4? Yes, I did. It has been confirmed that the decoder passes all the test cases defined in 15444-4. The errors (PAE and MSE) in the reconstructed images are within the allowable tolerances. > On Jul 12, 2024, at 13:57, Pierre-Anthony Lemieux wrote: > > I checked that the patch results in FFMPEG decoding without error the > additional conformance codestreams at [1]. > > [1] https://ffmpeg.org/pipermail/ffmpeg-devel/2024-June/329727.html > > @Osamu, did you check if the decoded images fall within the tolerances > specified in 15444-4? > > There is an errant space character at the end of four lines for some > reason. I can fix that before merging. > > Any other comments? If not, I plan to merge sometime this week, and > plan to then submit a patch to add the conformance codestream to FATE. > > On Mon, Jun 24, 2024 at 6:37?AM Osamu Watanabe > wrote: >> >> This commit adds support for CAP and CPF markers. >> >> The previous version >> (v3, https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=12246) >> was wrongly separated. I have fixed the way to separation. >> >> The changes are essentially the same as v2 >> (https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=12199). >> The suggested modifications have been made according to the discussion >> on this mailing list. >> >> Signed-off-by: Osamu Watanabe >> --- >> libavcodec/jpeg2000.h | 8 +++ >> libavcodec/jpeg2000dec.c | 112 ++++++++++++++++++++++++++++++++++++++- >> libavcodec/jpeg2000dec.h | 7 +++ >> 3 files changed, 126 insertions(+), 1 deletion(-) >> >> diff --git a/libavcodec/jpeg2000.h b/libavcodec/jpeg2000.h >> index d004c08f10..4bdc38df7c 100644 >> --- a/libavcodec/jpeg2000.h >> +++ b/libavcodec/jpeg2000.h >> @@ -37,12 +37,14 @@ >> >> enum Jpeg2000Markers { >> JPEG2000_SOC = 0xff4f, // start of codestream >> + JPEG2000_CAP = 0xff50, // extended capabilities >> JPEG2000_SIZ = 0xff51, // image and tile size >> JPEG2000_COD, // coding style default >> JPEG2000_COC, // coding style component >> JPEG2000_TLM = 0xff55, // tile-part length, main header >> JPEG2000_PLM = 0xff57, // packet length, main header >> JPEG2000_PLT, // packet length, tile-part header >> + JPEG2000_CPF, // corresponding profile >> JPEG2000_QCD = 0xff5c, // quantization default >> JPEG2000_QCC, // quantization component >> JPEG2000_RGN, // region of interest >> @@ -58,6 +60,12 @@ enum Jpeg2000Markers { >> JPEG2000_EOC = 0xffd9, // end of codestream >> }; >> >> +enum JPEG2000_Ccap15_b14_15_params { >> + HTJ2K_HTONLY = 0, // HTONLY, bit 14 and 15 are 0 >> + HTJ2K_HTDECLARED, // HTDECLARED, bit 14 = 1 and bit 15 = 0 >> + HTJ2K_MIXED = 3, // MIXED, bit 14 and 15 are 1 >> +}; >> + >> #define JPEG2000_SOP_FIXED_BYTES 0xFF910004 >> #define JPEG2000_SOP_BYTE_LENGTH 6 >> >> diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c >> index 091931b1ff..d1046661c4 100644 >> --- a/libavcodec/jpeg2000dec.c >> +++ b/libavcodec/jpeg2000dec.c >> @@ -408,6 +408,73 @@ static int get_siz(Jpeg2000DecoderContext *s) >> s->avctx->bits_per_raw_sample = s->precision; >> return 0; >> } >> +/* get extended capabilities (CAP) marker segment */ >> +static int get_cap(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c) >> +{ >> + uint32_t Pcap; >> + uint16_t Ccap_i[32] = { 0 }; >> + uint16_t Ccap_15; >> + uint8_t P; >> + >> + if (bytestream2_get_bytes_left(&s->g) < 6) { >> + av_log(s->avctx, AV_LOG_ERROR, "Insufficient space for CAP\n"); >> + return AVERROR_INVALIDDATA; >> + } >> + >> + Pcap = bytestream2_get_be32u(&s->g); >> + s->isHT = (Pcap >> (31 - (15 - 1))) & 1; >> + for (int i = 0; i < 32; i++) { >> + if ((Pcap >> (31 - i)) & 1) >> + Ccap_i[i] = bytestream2_get_be16u(&s->g); >> + } >> + Ccap_15 = Ccap_i[14]; >> + if (s->isHT == 1) { >> + av_log(s->avctx, AV_LOG_INFO, "This is an HTJ2K codestream.\n"); >> + // Bits 14-15 >> + switch ((Ccap_15 >> 14) & 0x3) { >> + case 0x3: >> + s->Ccap15_b14_15 = HTJ2K_MIXED; >> + break; >> + case 0x1: >> + s->Ccap15_b14_15 = HTJ2K_HTDECLARED; >> + break; >> + case 0x0: >> + s->Ccap15_b14_15 = HTJ2K_HTONLY; >> + break; >> + default: >> + av_log(s->avctx, AV_LOG_ERROR, "Unknown CCap value.\n"); >> + return AVERROR(EINVAL); >> + break; >> + } >> + // Bit 13 >> + if ((Ccap_15 >> 13) & 1) { >> + av_log(s->avctx, AV_LOG_ERROR, "MULTIHT set is not supported.\n"); >> + return AVERROR_PATCHWELCOME; >> + } >> + // Bit 12 >> + s->Ccap15_b12 = (Ccap_15 >> 12) & 1; >> + // Bit 11 >> + s->Ccap15_b11 = (Ccap_15 >> 11) & 1; >> + // Bit 5 >> + s->Ccap15_b05 = (Ccap_15 >> 5) & 1; >> + // Bit 0-4 >> + P = Ccap_15 & 0x1F; >> + if (!P) >> + s->HT_MAGB = 8; >> + else if (P < 20) >> + s->HT_MAGB = P + 8; >> + else if (P < 31) >> + s->HT_MAGB = 4 * (P - 19) + 27; >> + else >> + s->HT_MAGB = 74; >> + >> + if (s->HT_MAGB > 31) { >> + av_log(s->avctx, AV_LOG_ERROR, "Available internal precision is exceeded (MAGB> 31).\n"); >> + return AVERROR_PATCHWELCOME; >> + } >> + } >> + return 0; >> +} >> >> /* get common part for COD and COC segments */ >> static int get_cox(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c) >> @@ -802,6 +869,15 @@ static int read_crg(Jpeg2000DecoderContext *s, int n) >> bytestream2_skip(&s->g, n - 2); >> return 0; >> } >> + >> +static int read_cpf(Jpeg2000DecoderContext *s, int n) >> +{ >> + if (bytestream2_get_bytes_left(&s->g) < (n - 2)) >> + return AVERROR_INVALIDDATA; >> + bytestream2_skip(&s->g, n - 2); >> + return 0; >> +} >> + >> /* Tile-part lengths: see ISO 15444-1:2002, section A.7.1 >> * Used to know the number of tile parts and lengths. >> * There may be multiple TLMs in the header. >> @@ -965,6 +1041,14 @@ static int init_tile(Jpeg2000DecoderContext *s, int tileno) >> comp->roi_shift = s->roi_shift[compno]; >> if (!codsty->init) >> return AVERROR_INVALIDDATA; >> + if (s->isHT && (!s->Ccap15_b05) && (!codsty->transform)) { >> + av_log(s->avctx, AV_LOG_ERROR, "Transformation = 0 (lossy DWT) is found in HTREV HT set\n"); >> + return AVERROR_INVALIDDATA; >> + } >> + if (s->isHT && s->Ccap15_b14_15 != (codsty->cblk_style >> 6) && s->Ccap15_b14_15 != HTJ2K_HTONLY) { >> + av_log(s->avctx, AV_LOG_ERROR, "SPcod/SPcoc value does not match bit 14-15 values of Ccap15\n"); >> + return AVERROR_INVALIDDATA; >> + } >> if (ret = ff_jpeg2000_init_component(comp, codsty, qntsty, >> s->cbps[compno], s->cdx[compno], >> s->cdy[compno], s->avctx)) >> @@ -2187,22 +2271,43 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s) >> if (!s->tile) >> s->numXtiles = s->numYtiles = 0; >> break; >> + case JPEG2000_CAP: >> + if (!s->ncomponents) { >> + av_log(s->avctx, AV_LOG_ERROR, "CAP marker segment shall come after SIZ\n"); >> + return AVERROR_INVALIDDATA; >> + } >> + ret = get_cap(s, codsty); >> + break; >> case JPEG2000_COC: >> + if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) >> + av_log(s->avctx, AV_LOG_WARNING, "COC marker is found in HOMOGENEOUS HT set\n"); >> ret = get_coc(s, codsty, properties); >> break; >> case JPEG2000_COD: >> + if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) >> + av_log(s->avctx, AV_LOG_WARNING, "COD marker is found in HOMOGENEOUS HT set\n"); >> ret = get_cod(s, codsty, properties); >> break; >> case JPEG2000_RGN: >> + if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) >> + av_log(s->avctx, AV_LOG_WARNING, "RGB marker is found in HOMOGENEOUS HT set\n"); >> ret = get_rgn(s, len); >> + if ((!s->Ccap15_b12) && s->isHT) >> + av_log(s->avctx, AV_LOG_WARNING, "RGN marker is found in RGNFREE HT set\n"); >> break; >> case JPEG2000_QCC: >> + if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) >> + av_log(s->avctx, AV_LOG_WARNING, "QCC marker is found in HOMOGENEOUS HT set\n"); >> ret = get_qcc(s, len, qntsty, properties); >> break; >> case JPEG2000_QCD: >> + if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) >> + av_log(s->avctx, AV_LOG_WARNING, "QCD marker is found in HOMOGENEOUS HT set\n"); >> ret = get_qcd(s, len, qntsty, properties); >> break; >> case JPEG2000_POC: >> + if (s->in_tile_headers == 1 && s->isHT && (!s->Ccap15_b11)) >> + av_log(s->avctx, AV_LOG_WARNING, "POC marker is found in HOMOGENEOUS HT set\n"); >> ret = get_poc(s, len, poc); >> break; >> case JPEG2000_SOT: >> @@ -2252,9 +2357,14 @@ static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s) >> "Cannot have both PPT and PPM marker.\n"); >> return AVERROR_INVALIDDATA; >> } >> - >> + if ((!s->Ccap15_b11) && s->isHT) >> + av_log(s->avctx, AV_LOG_WARNING, "PPT marker is found in HOMOGENEOUS HT set\n"); >> ret = get_ppt(s, len); >> break; >> + case JPEG2000_CPF: >> + // Corresponding profile marker >> + ret = read_cpf(s, len); >> + break; >> default: >> av_log(s->avctx, AV_LOG_ERROR, >> "unsupported marker 0x%.4"PRIX16" at pos 0x%X\n", >> diff --git a/libavcodec/jpeg2000dec.h b/libavcodec/jpeg2000dec.h >> index d0ca6e7a79..326a572722 100644 >> --- a/libavcodec/jpeg2000dec.h >> +++ b/libavcodec/jpeg2000dec.h >> @@ -112,6 +112,13 @@ typedef struct Jpeg2000DecoderContext { >> Jpeg2000Tile *tile; >> Jpeg2000DSPContext dsp; >> >> + uint8_t isHT; // HTJ2K? >> + uint8_t Ccap15_b14_15; // HTONLY(= 0) or HTDECLARED(= 1) or MIXED(= 3) ? >> + uint8_t Ccap15_b12; // RGNFREE(= 0) or RGN(= 1)? >> + uint8_t Ccap15_b11; // HOMOGENEOUS(= 0) or HETEROGENEOUS(= 1) ? >> + uint8_t Ccap15_b05; // HTREV(= 0) or HTIRV(= 1) ? >> + uint8_t HT_MAGB; // MAGB value >> + >> /*options parameters*/ >> int reduction_factor; >> } Jpeg2000DecoderContext; >> -- >> 2.34.1 >> > _______________________________________________ > 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". _______________________________________________ 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".