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 BD3D940C29 for ; Wed, 29 Dec 2021 06:27:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 11DB568AE10; Wed, 29 Dec 2021 08:27:03 +0200 (EET) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6FE8C68A9AD for ; Wed, 29 Dec 2021 08:26:55 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1640759220; x=1672295220; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=M4p/bXF8lJ3ZWKCn59aTSQb5bPy1MkmWmkFEouy2qUk=; b=FKPSFBrUT641HzDy5rjMR9nXVFPiVGaYP+0ZbgKMbxMe8zO0bIbXzaHz DJBJ7IPZkpyyDIjNfCAn2dtCok5mF9HlSN+3taW/jk6NayAdvwhst7FRL V6lgz9rgrLF1sBoAWteoUxwnMvQVnhaIF8ULAy8L9B3KZXgsqsua0iPZ8 KVeUe/Hr3Sy9VZ8LrDzYIeHMcfDnZM0KnJ+3rQJFJLXRYaKSFHeq0MoIX T3kqzuulgwpk0Qp3Xb/N6NUS2Oe4U1V01kNn/zLZUdiWrk5L/+q9X1+ue GGWjGEZU/PvHUgicTUha+1PeDgb156vX0EBLnj3v+EWCtKWHQJxADwepU A==; X-IronPort-AV: E=McAfee;i="6200,9189,10211"; a="222143228" X-IronPort-AV: E=Sophos;i="5.88,244,1635231600"; d="scan'208";a="222143228" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Dec 2021 22:26:52 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,244,1635231600"; d="scan'208";a="666206728" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga001.fm.intel.com with ESMTP; 28 Dec 2021 22:26:52 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 28 Dec 2021 22:26:52 -0800 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 28 Dec 2021 22:26:51 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Tue, 28 Dec 2021 22:26:51 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.172) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Tue, 28 Dec 2021 22:26:51 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jvj42ydEFmmD5DcdN2Y1/xWgpBqmvd/r8PdjJiHbZoUPsq/ChicLKwfxL+H0bf1maRX4dO9dvVBogL3hOBi+Ipvr7iSnuA291yfPzoYxJ33UjXenKbQJiIqId62114FlHgWf0F3ghLk8pwgo4J670l1isJy5BsaUmt7MV8pQShqWG/guOHVTVvS3RMyCGX6qE/ffbYGi4c6bzK+sQrw0PJmMkGCAjXqoV4dscLT5cDAIgGUSSVY5z9aAm7eDLjifMFhTC0w9pWqJwoWTPG/FCHexTcXeim/18Gd9D/RAXhp6FUOLciDCz1IJjHD345FEEvx7nzqPB/Kj4P45lPorZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=M4p/bXF8lJ3ZWKCn59aTSQb5bPy1MkmWmkFEouy2qUk=; b=dAF/COANHkxjg2j9kJhucV3qBrlq0FdHNFUQ+D3goWlT0MSwDGUx7pt1edXr7NmqCwaVphPYhf7KDKRdW7eMWZr+MEahQQLsflsIcRDZwCkKC1Ci5BNj8yAyQn0LMQ6VCoVDnuSZeXORTlsDdzAqe2XI/M5CJ/3ekiGa2a9GLVbcDFy28j2y9g3rsGebYXKibvDi+qJNtFIQxt6SOsm9oq8RQ2MWBtaY/oHsiJUUdG31bDpe3vG9iINpe1yqbNBUOI0Ghh2GsVTULAY1PMgfVdr/j5LfpKvWt71OR5vfVbs7zjw49YTOcVNKKPiEzykI5Bhk5CytpyMfYESu3foJoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by BN9PR11MB5387.namprd11.prod.outlook.com (2603:10b6:408:11c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.18; Wed, 29 Dec 2021 06:26:45 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::bcfc:ceef:cd03:dd16]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::bcfc:ceef:cd03:dd16%3]) with mapi id 15.20.4823.023; Wed, 29 Dec 2021 06:26:45 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH 4/5] avcodec/qsvdec: Implement SEI parsing for QSV decoders Thread-Index: AQHX5VItL51I6lSqrUScM3lHJGTAKKxJL3QA Date: Wed, 29 Dec 2021 06:26:45 +0000 Message-ID: <7478edbdbf7bead784b011ebffed6a46ff7b0a83.camel@intel.com> References: <62b3a721e463650b46e527abcc9169ec1cc3e9f8.1638210102.git.softworkz@hotmail.com> <2362f84d0e53c691dbf248743c6640c91d83a491.1638210102.git.softworkz@hotmail.com> <5a3b242f9bedd7453a810eae1edf78918726d12c.1638210102.git.softworkz@hotmail.com> In-Reply-To: Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4d46290e-3478-4727-6151-08d9ca942fb6 x-ms-traffictypediagnostic: BN9PR11MB5387:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 3yTH9dYNt9p1BYdpvj/LvqWNHKov7IcokPPOspDAO7Zhn+SRGwcvvPt+q4Ug9Ia1Q7pD8GabOPUXiNBFl1GcgUeVYIGY5vz2FirfvjqZPceQ1KnpuO3q+1oILHUriYKfUS55JTyQIKUl82Rhs4UmIf75Hqmhoem6ZtJ2koDKKvvHktSS0jFHY8dYt3sldANkd6EfpQBAW04FHeCqbXcAoSeL+jX20F4ViGEMi1kNx/eb1Fm6BZSiBemgtF6NwIa7ei4O+8N5Sar9GJllCriQFCNRjyd/SGxbUlyzkkndvjPyvDPPUSG2c9Bc7qJNWJyNPAv0CZne+BPcwTiF3IzyjDxjpp07ARsBwpQA7Y4JDAnH6XipuvzzHC9AaDwZEgNsBdWApjr9L8IREFF53C6cwcbM+3QqDkAIYURoeNyfJFBEYTbI8KanSrMBaK+nZzc4QfjdZr8PUiJ5FbFUl3N3SWsSMcF+NfDHBB+Xqbaxb2nRXxk5VbHX3SWOrIJLihPnY8VrfPLccMQdX6Wn2UeembJCfjkIVcjzAXojXqBCQwyOgXtJbBYOgEurJLPul4Vz/uFmXJZENRoYxoy+L+IIBt41vNqdCVE1sGYZt4uhf2L0tPbrBApgN/JPhO9/4wZVnSkTSbFJ57mQUHIg7Yiy60lWchJ/2V5GBYNokNIgs/UyC7EDjhHcH/ejg62OO7w2ZB29QlTV3Y++zaVGtVVFGusIlLwp2yWRJuBHAMHdZb6v5PWBqgx4Mmt5kint/5qphtDD89LH9ETn3DSvR3HX9CwzQAWjdELI+vQ4CcZG5geZtxUcRCd9fNooKG7mQH9j x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(83380400001)(66946007)(5660300002)(66476007)(66556008)(64756008)(36756003)(38070700005)(6916009)(66446008)(316002)(122000001)(71200400001)(82960400001)(76116006)(38100700002)(86362001)(8936002)(6486002)(186003)(6512007)(2906002)(966005)(6506007)(4001150100001)(26005)(508600001)(8676002)(91956017)(2616005)(99106002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bFZBNkpSWXZsdnE1NWFoOS9rWTNrWkVzeWI5Y0VQZkpyZ1M5T2FVeHpKRXR4?= =?utf-8?B?dHFPeEJlV04vbWZtNkcrQ0RLT1Y0dzFaVnBwU0ZhT2c1RmNEUHdXWDhNUEdQ?= =?utf-8?B?cDdQaFN6VG8zWCtxNU1zNzlGWVZCdlY3ZFVPcVkvMVlreDJPUVVNUnlHVlQ1?= =?utf-8?B?YTlLVmR0cFJETkNSUlg3Z3AvNlg1azkweTBPdFlQdnZQVmdBRWFuQlRWQWcz?= =?utf-8?B?KzUyN3RtcUszM2xNcjVRZ1NvRkdDTUVZYjR0VzNiK3JVOVdqYi9FeVhiQURW?= =?utf-8?B?OUttSUhqOVdyd0NhSVQrcUFHRjdjTU5YRVNrSlJ2OUZlVCt6cTNZZ0RKTm81?= =?utf-8?B?K00xVW5XeW5ibFg4Y0VQcklwMS8zcDNBaE1wbXlCbkg2Y1E0U1c1aTM4NmNv?= =?utf-8?B?RDgrQnhoN0lZb1pCTFdGMHp0a2twSklLakRBaVdRU0pGNHF1Mmt0cWFxRElM?= =?utf-8?B?cGZRM1VqVXNVUS9WMGpXdDhxOVBCcEQrQTE3TURGbmttbTcwQ1MzTWtmWXg1?= =?utf-8?B?bmordnlKRTlFSzhBQ3J3Q0lzbzYxazFpbkhMbHJiN2FlYitHZ3d2ZFJwa2xC?= =?utf-8?B?K0U1d3BlUjVkdjE5dk5pbEliRnpjNVhyNXhBM21YZFE5d1p1cTZjYmJHYS9p?= =?utf-8?B?N0dKRkJoRkdhYnlXVnFBSmplYTkvcUFjYVZUMUtMclBsbnFVT1R4b2FjYzha?= =?utf-8?B?RXdIdS9SS2gyd0JNbEc1ZjJWYUxZdk5CUW8vRlZzbjIxdnk3VjBHM3NEOVRt?= =?utf-8?B?TFhHNjZGOFh5YjU0SWFwQUMwbHp4SzZVUjhlWnpqcDBzMHpXQWZBUTRNQ1pp?= =?utf-8?B?UTNXdDNCemUrOU5KQ2xjZktjaEVuaWhYMHhhQzZmYVpXOGRxRmtBaGh2Ym1n?= =?utf-8?B?ZTFMV1JoZW9tdWh3aG1iWDZiYmRlbVJqRFV6aEFlMGZEUk9nSE5kc0o0ejIy?= =?utf-8?B?VnBiTHBBTmZnS011Wis4b2pUR2drUWJHRlA3VGZPMUp5QklyRTkwNnBac3Nh?= =?utf-8?B?VHM2VldkWWFmOVlPeHIrMFlJdHpXdXdLZTJKMUN4SUxkVDNRTXh5WklGRUsz?= =?utf-8?B?YWVQdHpTdFRQdlRvTW9mdDRDUHUwSDZiUE1NbktEcm5LSy9VZUxLc1NPTHps?= =?utf-8?B?bTJ4QkRXdXlGTjR6K0JSQ1I2NzFOVnc2RWdQN1ZVVEhqbFZubGJneXFrTXVP?= =?utf-8?B?ajRIeC9TRE5sNEdvaGROMkozYktZZkwrTkpHTzNOVFlCRTZ6dlVSSFMzZTMy?= =?utf-8?B?cXZhazZqanhVS0U4d1VWdXZlSXpKSHQ1UnA1MWZTYm0zSkQ1TG5ZQkZlSUQ2?= =?utf-8?B?QlkyMnNHY2pVVUdRTHdFRnN3K2R6RHF6bGFPQmNoaWg4RHVQQUsycE8rdVQ3?= =?utf-8?B?ZWpDdjdPTkpZdFM2Q0lPTElzNEpvcWxCcDQ1RmVPOUREWUthbUE4ZDEzdUVt?= =?utf-8?B?dVBSSGVGQXZ6bGJobzdkZ09DWFF0UkdQVjJyczBlT0NhYmFteG41MWRQU3d4?= =?utf-8?B?R3NHMUdPQ0EvV3lzZWMxSDNlelJtdjIrVnVLZlU0ZXBHQkZMTk1hZ3BRVVl6?= =?utf-8?B?bG1YdExkeW9kZWIwZHJvenIyUm9jZEZOaDBpb25aakd0RmJtWjVsa1E5N1FI?= =?utf-8?B?V0YyWXdROVlYV0JpNWY5akFvZ1Y3Zkc5VWoyYTZUV2xTRWpNMjI4YUNCRHRR?= =?utf-8?B?Y3lWcFpwN3hURmNJaWhVT0p2RVZlaWlzRGwzck11R0pWOEd2a1BIM0VHTVZp?= =?utf-8?B?Mkhxbll6ZS8rNWlsS3R2ejZ4bm5mYi9rUUFNVDQvTGxjYzk0WDhoelVGT2JL?= =?utf-8?B?VUV3WnpUQXNOYkxnM3AwSXkxeTZkUStyVjhYS01maE03b1FlRW15bjBVMGlV?= =?utf-8?B?SWJSMmZPenRrZ25Sd2lQUVFwcFU1NE95SFJOa2lKMGVhVm8zVS9ua2x4K0Zl?= =?utf-8?B?NE8rTmh0aXhxRzdqRU5Fa2ltOGNQc0x0SFRGaEx6NVl2c0V1UHdRZW9EK1pY?= =?utf-8?B?bjYxVmwzTlpBY3g3UjRJYUZiK1BQQ2FMY0VOY0tmdnNEOWd1T0hCYmxSQ2M2?= =?utf-8?B?Vzh0SzZnL2lad0IyZXRJbEQ3OC9ncHMwTTRCRllITVIvSU9wdGgwK3RsL1E2?= =?utf-8?B?OTBqLzRyUnd3a1J0b2d6ejA3ZXRuMFVobFhJdG9SUWpXWVAzci96S2dPOHd0?= =?utf-8?Q?6/U0TnbhS2zqO3TbEy1/sYE84VWY4nOr8IzuqvsiSIPg?= Content-ID: <3850308C40134046ACAFD46A9C9162CD@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d46290e-3478-4727-6151-08d9ca942fb6 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Dec 2021 06:26:45.2525 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1ebkZc6Vnj/7NkL1fgZcccigYKDkM7pmtn2baf92s/CJwa15iSY4VMVSFO1+nvEBM01Ze5Z8aKckKu76pyyzZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR11MB5387 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH 4/5] avcodec/qsvdec: Implement SEI parsing for QSV decoders 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: On Mon, 2021-11-29 at 18:51 +0000, Soft Works wrote: > Signed-off-by: softworkz > --- > libavcodec/qsvdec.c | 210 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 210 insertions(+) > > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c > index 8bce9f2cf0..62f3e65455 100644 > --- a/libavcodec/qsvdec.c > +++ b/libavcodec/qsvdec.c > @@ -45,6 +45,12 @@ > #include "hwconfig.h" > #include "qsv.h" > #include "qsv_internal.h" > +#include "h264dec.h" > +#include "h264_sei.h" > +#include "hevcdec.h" > +#include "hevc_ps.h" > +#include "hevc_sei.h" > +#include "mpeg12.h" > > static const AVRational mfx_tb = { 1, 90000 }; > > @@ -92,6 +98,8 @@ typedef struct QSVContext { > > mfxExtBuffer **ext_buffers; > int nb_ext_buffers; > + > + Mpeg1Context mpeg_ctx; > } QSVContext; > > static const AVCodecHWConfigInternal *const qsv_hw_configs[] = { > @@ -498,6 +506,185 @@ static QSVFrame *find_frame(QSVContext *q, > mfxFrameSurface1 *surf) > return NULL; > } > > +static int find_start_offset(mfxU8 data[1024]) > +{ > + if (data[0] == 0 && data[1] == 0 && data[2] == 1) > + return 3; > + > + if (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] == 1) > + return 4; > + > + return 0; > +} > + > +static int parse_sei_h264(AVCodecContext* avctx, QSVContext* q, AVFrame* out) > +{ > + H264SEIContext sei = { 0 }; > + GetBitContext gb = { 0 }; > + mfxU8 data[1024] = { 0 }; > + mfxPayload payload = { 0, .Data = &data[0], .BufSize = sizeof(data) }; > + mfxU64 ts; > + int ret; > + > + while (1) { > + int start; > + memset(&data[0], 0, sizeof(data)); > + > + ret = MFXVideoDECODE_GetPayload(q->session, &ts, &payload); The *out* frame returned from MFXVideoDECODE_DecodeFrameAsync is in display order. Does MFXVideoDECODE_GetPayload get payload in display order too ? I didn't see such description in https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md Thanks Haihao > + if (ret != MFX_ERR_NONE) { > + av_log(avctx, AV_LOG_WARNING, "error getting SEI payload: %d \n", > ret); > + return ret; > + } > + > + if (payload.NumBit == 0 || payload.NumBit >= sizeof(data) * 8) { > + break; > + } > + > + start = find_start_offset(data); > + > + switch (payload.Type) { > + case SEI_TYPE_BUFFERING_PERIOD: > + case SEI_TYPE_PIC_TIMING: > + continue; > + } > + > + if (init_get_bits(&gb, &data[start], payload.NumBit - start * 8) < 0) > + av_log(avctx, AV_LOG_ERROR, "Error initializing bitstream > reader"); > + else > + ret = ff_h264_sei_decode(&sei, &gb, NULL, avctx); > + > + if (ret < 0) > + av_log(avctx, AV_LOG_WARNING, "Error parsing SEI type: > %d Numbits %d error: %d\n", payload.Type, payload.NumBit, ret); > + else > + av_log(avctx, AV_LOG_DEBUG, "mfxPayload Type: %d Numbits %d\n", > payload.Type, payload.NumBit); > + } > + > + if (out) > + return ff_h264_export_frame_props(avctx, &sei, NULL, out); > + > + return 0; > +} > + > +static int parse_sei_hevc(AVCodecContext* avctx, QSVContext* q, AVFrame* out) > +{ > + HEVCSEI sei = { 0 }; > + HEVCParamSets ps = { 0 }; > + GetBitContext gb = { 0 }; > + mfxU8 data[1024] = { 0 }; > + mfxPayload payload = { 0, .Data = &data[0], .BufSize = sizeof(data) }; > + mfxU64 ts; > + int ret; > + > + while (1) { > + int start; > + memset(&data[0], 0, sizeof(data)); > + > + ret = MFXVideoDECODE_GetPayload(q->session, &ts, &payload); > + if (ret != MFX_ERR_NONE) { > + av_log(avctx, AV_LOG_WARNING, "error getting SEI payload: %d \n", > ret); > + return ret; > + } > + > + if (payload.NumBit == 0 || payload.NumBit >= sizeof(data) * 8) { > + break; > + } > + > + start = find_start_offset(data); > + > + switch (payload.Type) { > + case SEI_TYPE_BUFFERING_PERIOD: > + case SEI_TYPE_PIC_TIMING: > + continue; > + case SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME: > + case SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO: > + // There seems to be a bug in MSDK for these > + payload.NumBit -= 8; > + break; > + } > + > + if (init_get_bits(&gb, &data[start], payload.NumBit - start * 8) < 0) > + av_log(avctx, AV_LOG_ERROR, "Error initializing bitstream > reader"); > + else > + ret = ff_hevc_decode_nal_sei(&gb, avctx, &sei, &ps, > HEVC_NAL_SEI_PREFIX); > + > + if (ret < 0) > + av_log(avctx, AV_LOG_WARNING, "error parsing SEI type: > %d Numbits %d error: %d\n", payload.Type, payload.NumBit, ret); > + else > + av_log(avctx, AV_LOG_DEBUG, "mfxPayload Type: %d Numbits %d\n", > payload.Type, payload.NumBit); > + } > + > + if (out) > + return ff_set_side_data(avctx, &sei, NULL, out); > + > + return 0; > +} > + > +static int parse_sei_mpeg12(AVCodecContext* avctx, QSVContext* q, AVFrame* > out) > +{ > + Mpeg1Context *mpeg_ctx = &q->mpeg_ctx; > + mfxU8 data[1024] = { 0 }; > + mfxPayload payload = { 0, .Data = &data[0], .BufSize = sizeof(data) }; > + mfxU64 ts; > + int ret; > + > + while (1) { > + int start; > + > + memset(&data[0], 0, sizeof(data)); > + ret = MFXVideoDECODE_GetPayload(q->session, &ts, &payload); > + if (ret != MFX_ERR_NONE) { > + av_log(avctx, AV_LOG_WARNING, "error getting SEI payload: %d \n", > ret); > + return ret; > + } > + > + if (payload.NumBit == 0 || payload.NumBit >= sizeof(data) * 8) { > + break; > + } > + > + start = find_start_offset(data); > + > + start++; > + > + ff_mpeg_decode_user_data(avctx, mpeg_ctx, &data[start], > (int)((payload.NumBit + 7) / 8) - start); > + > + if (ret < 0) > + av_log(avctx, AV_LOG_WARNING, "error parsing SEI type: > %d Numbits %d error: %d\n", payload.Type, payload.NumBit, ret); > + else > + av_log(avctx, AV_LOG_DEBUG, "mfxPayload Type: %d Numbits %d > start %d -> %.s\n", payload.Type, payload.NumBit, start, (char > *)(&data[start])); > + } > + > + if (!out) > + return 0; > + > + if (mpeg_ctx->a53_buf_ref) { > + > + AVFrameSideData *sd = av_frame_new_side_data_from_buf(out, > AV_FRAME_DATA_A53_CC, mpeg_ctx->a53_buf_ref); > + if (!sd) > + av_buffer_unref(&mpeg_ctx->a53_buf_ref); > + mpeg_ctx->a53_buf_ref = NULL; > + } > + > + if (mpeg_ctx->has_stereo3d) { > + AVStereo3D *stereo = av_stereo3d_create_side_data(out); > + if (!stereo) > + return AVERROR(ENOMEM); > + > + *stereo = mpeg_ctx->stereo3d; > + mpeg_ctx->has_stereo3d = 0; > + } > + > + if (mpeg_ctx->has_afd) { > + AVFrameSideData *sd = av_frame_new_side_data(out, AV_FRAME_DATA_AFD, > 1); > + if (!sd) > + return AVERROR(ENOMEM); > + > + *sd->data = mpeg_ctx->afd; > + mpeg_ctx->has_afd = 0; > + } > + > + return 0; > +} > + > static int qsv_decode(AVCodecContext *avctx, QSVContext *q, > AVFrame *frame, int *got_frame, > const AVPacket *avpkt) > @@ -535,6 +722,8 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext > *q, > insurf, &outsurf, sync); > if (ret == MFX_WRN_DEVICE_BUSY) > av_usleep(500); > + else if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO || avctx->codec_id > == AV_CODEC_ID_MPEG2VIDEO) > + parse_sei_mpeg12(avctx, q, NULL); > > } while (ret == MFX_WRN_DEVICE_BUSY || ret == MFX_ERR_MORE_SURFACE); > > @@ -570,6 +759,27 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext > *q, > return AVERROR_BUG; > } > > + switch (avctx->codec_id) { > + case AV_CODEC_ID_MPEG1VIDEO: > + case AV_CODEC_ID_MPEG2VIDEO: > + ret = parse_sei_mpeg12(avctx, q, out_frame->frame); > + break; > + case AV_CODEC_ID_H264: > + ret = parse_sei_h264(avctx, q, out_frame->frame); > + break; > + case AV_CODEC_ID_HEVC: > + ret = parse_sei_hevc(avctx, q, out_frame->frame); > + break; > + default: > + ret = 0; > + } > + > + if (ret < 0) { > + av_log(avctx, AV_LOG_ERROR, "Error parsing SEI data\n"); > + av_freep(&sync); > + return ret; > + } > +# > out_frame->queued = 1; > av_fifo_generic_write(q->async_fifo, &out_frame, sizeof(out_frame), > NULL); > av_fifo_generic_write(q->async_fifo, > &sync, sizeof(sync), NULL); _______________________________________________ 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".