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 362F1405C6 for ; Wed, 27 Apr 2022 09:41:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 209D268B3B2; Wed, 27 Apr 2022 12:41:39 +0300 (EEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD16768B056 for ; Wed, 27 Apr 2022 12:41:31 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651052496; x=1682588496; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=Z9eNaq2+/tEzQdFZ3KWIalJ4GPsTdetI7RI6Df956Qg=; b=ja+2pVPHqSVFee64HIcvbrOZwYQ1355s5nQObeDNbISbBU9SgfXaY7se xDBAI0nlZ7IASHvTLDiCyVMGTHgjumVuIq5XCqk0eO3bvwfGqUpJOftE3 vFzuxk9g3A7wOQ6qq5b7Y00Z346K/TDIWlWLFyZTEO10tZ4flPM6pco6R 92ps4zJjlR3NiNEDAhpcyiYlEoH17q9oF1tXBT9hshm1DInlxUG7glIPn 5HbfR8EEXWUUs/GXD2sF9RUXg7oA2dCGpNncmPAKIYcbss8k3CD9W4Yp6 jsQnzkbkcw0o3BqTpNux1L3I5f0z44oobsr2ccYdJsqkD/bhWvNkW5J4p w==; X-IronPort-AV: E=McAfee;i="6400,9594,10329"; a="328820336" X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="328820336" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2022 02:41:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="539788596" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by orsmga002.jf.intel.com with ESMTP; 27 Apr 2022 02:41:28 -0700 Received: from fmsmsx606.amr.corp.intel.com (10.18.126.86) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 27 Apr 2022 02:41:28 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Wed, 27 Apr 2022 02:41:28 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.108) 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.27; Wed, 27 Apr 2022 02:41:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h3ypqPtYaAKVEXbdY+WMMQziOnoNUJtE1/+GtIyobyVNjS3HgsEV0rp6vTLngLFHeaXXGqvxWbrxrFjManS8RKSh1Mftcwevc2+TMLmpLcaiq1MlTdnH5o7ODez+InKKvpo+qh3QwEoUwHeY6yEbow/XvbNi/2BqTD7ryUCo/IB8qYcf2j9gvGpB3pNHjb+FVnRo1Gx9WHYxvg41yibVPdEzw1ShwfY77Y9JdqhV0/qRi+qefScKIi9fT5CCM3mHoBXs/Rbb1bsXh0y9z+1zdOGTLKz6rLxQtCaaawCEW8eCGYO2ua942jtgXCKG+CIOsog40XHHW9rDHQyFcPWIJA== 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=Z9eNaq2+/tEzQdFZ3KWIalJ4GPsTdetI7RI6Df956Qg=; b=VD93JaBuZSBIDZGd2UTvx5xvKpTJrot6UgBOvDi5xcU+j9+i9YibxK8+jqcUDuWIaYpoXLrPSzLr8GDvGIeBnEenCQpun6b0RuhUjGmbqAMUO8aazXrvdrSt9hPYrb+QqdrxY5bKEUrm9HXxdwGXIddboI1zkOYT9sxGPpqlFjK3VTazjouhRHMDjd4Txf/gZQSnWvVJQTynGmEuXE6IGgBlrZUOcB55cTdTYvSiOy5LJnMq3+sheIBmDSQrEWRpZVwE2RaD+yGL+CAWWuy4afySjS7GSIwVfsUvJqyD9hjyrC+tzux4z0bfzIiYa7HlzhBElxqWcqDUYcevpxeqUg== 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 MW5PR11MB5809.namprd11.prod.outlook.com (2603:10b6:303:197::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Wed, 27 Apr 2022 09:41:26 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::6534:444c:a75d:4bf2]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::6534:444c:a75d:4bf2%9]) with mapi id 15.20.5186.021; Wed, 27 Apr 2022 09:41:26 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH] libavcodec/qsvdec.c: extract frame packing arrangement data Thread-Index: AQHYWVSW/KfWmVY9SEyf2nrmrB23gq0Dg0EA Date: Wed, 27 Apr 2022 09:41:26 +0000 Message-ID: <476dd14561291180337ae4135c4d0d224b9fe4a3.camel@intel.com> References: <20220426100035.2026406-1-wenbin.chen@intel.com> In-Reply-To: <20220426100035.2026406-1-wenbin.chen@intel.com> 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: 849016d2-5ed6-4004-0d6a-08da2832194c x-ms-traffictypediagnostic: MW5PR11MB5809:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: u7MW4k1YcvPnTDu1P/xogR50Yb9g1Pcu/NBSdKkLoyKUNpbLbZdPT/FME1Eaz7n2CyosJUY8Zf5r582rv0uWmvzVDE/ZMFBY8QUhrCq8FBm/ySRCj5h7wjJOO0kbs2rvCgrZD8tBCnRvCYWb25cd63nTlyRGalPwzzCpTaYVzG0IIrINC3T6VZ9Ho9WMVKfrtTAA7JS0MiSZR/zbtdXIPOCyCaGniqjwr92VLSlw1PQ9EEw9srS+WXcaNVujipP2Q7923obhf9yoEx2IBWMOyq8/azxe57KkndtxGZKfgL5dOAWTp7oeSjvv6ak+UlXtBixfueeWmqg+eTTkqMc70r/K4G1mJlYCZ8NZE942SM+lJc5u1dBvDHrFha4cmqqwxBGlHy0jumBZ+KLoW9GUHMyY8HvnGdw+4vj6svpVALUr1NVXurYU8gde0CIH9gtzP6JOGbA23bR1KDLq12W6AiMnu/dYHa1KFdU8kS5PHeJI8r3HUHHHwQbJosSrPayIACdLsugmjCXwv3TN1v/B99CgPFkQsxdnLUvugIGwSJ34in84nXV6kSj/EIwXheE22mCP7M7b92rOfx6/fuI+eavK2WgNc0cMOyFs6LyONP7sZH51aTob0AwnCDe62+Jm2x3LjLQ2XyOgMf0Q/RtHQXVnikBKt2OcOqtqoXY46XWv9jk3Icd443U7aezcxoK00e/O41Ft4mj03MZIxE/kzX0aCa6d1bL6Rp21kcGtLaHPDqJnsWmR8Oo8fJzpaHd2PPzelGX4OejXGT91uEq6FxK1bQ8xs8w+3IMR62oGF7sEznC9a9qjCJ54XGg/T5bfGv/GCaH9Vv5s/2vJBIsWk3TRjqUFa++W+33PLrrkBF4= 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:(13230001)(366004)(38100700002)(966005)(6486002)(316002)(19627235002)(66556008)(86362001)(508600001)(64756008)(66446008)(66476007)(8676002)(38070700005)(2616005)(26005)(6512007)(6916009)(71200400001)(76116006)(91956017)(66946007)(82960400001)(122000001)(5660300002)(8936002)(6506007)(36756003)(83380400001)(2906002)(186003)(99106002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VGR1eFJPUnpTQ3FuN3VzSTVFZjl6OXAwdXFpSFJWZGE2bCt6dy91VVliTWpv?= =?utf-8?B?eGtzWlBqUW5Ceitpc0hRTExhL2pEelFBNnZvYzRrTUhDRVlaYW5mNWtlTTls?= =?utf-8?B?VUdTWW5YMHppZndoUlFNRy84K2hrQmw1OFhaemZwZVVoeEUxYTV6R1hVZ1BM?= =?utf-8?B?cFMzVFNML0xOZ2QxejhYeDRlOTVNYjZ5R0NvOXB1bmNrTzNmczRPOUxRSTAz?= =?utf-8?B?V3N4eW9YOEZNdzN4VFJhV3BjdVRubXRKS3BRTlFkVlVUTVRGSndXSHNtUW5t?= =?utf-8?B?UmRLeGFQYlBPc2pEanQ5SklTazV5ZXFSL2IxS2plbzRVc3p6ckhnUHcwS3R4?= =?utf-8?B?Ri81SVBRZ2hyb3gzemVqNW9yeitrSmpHYk0wcDMxRkVmMVVIRWFQUDRYVnpC?= =?utf-8?B?OEo1QmRZTUZka3JCOFhLWnBNbC9HREtWWmpKRmxYQlJtRVJlQ1p1K0Y4NVor?= =?utf-8?B?R0dJazZtWlRkb0t2cE90VVZUcDNURzhXSUxFS0kvcXZYVTRqcXpwOUpnUUdP?= =?utf-8?B?L3dRdDlwL1laekZGZ1VGMUEwZXVwbzdNemt4Smw5VGw0ajJLcnNwSWljcmFk?= =?utf-8?B?am1OeGY0ZUFwMllNdEs3UEN5aGV6N211TXMzQUwvaHdTWjY2VkJsNEhxT20w?= =?utf-8?B?SWYvVTlLY245bWV1a2Y1bTU1SUdXaTU0d2F5Zk9WQW55c2pCcXVrbEQrbTVS?= =?utf-8?B?d1BiRlhoVW9sNVovMnJlTE5FWlpNUldvTGFwNG9PQTk3bmVoOTNYVEpJUU9K?= =?utf-8?B?ZXRSYUVta09ZTldhUHFSa0REVjlSVXNIOTRiOUJUTGIyUXkrSitDQ2tlY3do?= =?utf-8?B?V1NHb3BrNExUWHZWbnJxc1RSQ2c1bmhlTDZhbmdzWEdta0V2bXJ1ZnJ1Tm0y?= =?utf-8?B?d3dhZ3JjRXRtaER5L2NVL2cvRmZBd1N3VTUvZU1PYU1kS1NRTTlrclNZTGhw?= =?utf-8?B?dDB6QmIzRUxhNklzWHJicGtZeHRLemU1RmFJL0J4TElEWW81cUg5cHZGeUQ1?= =?utf-8?B?UElGenByTTlRR0xTZGUrNGFRbDR5SnY4RHQzZ3lLYnI1VDRleXQyV3JzaTR1?= =?utf-8?B?ejJhS25MUTJTTUphdlA1WW1PdERuSzlWcU1jMUJORkwyY0QxVlBNZXk3clc4?= =?utf-8?B?VS9IT2lUa0VJK2RZdW5oSyt1aWRQbk15USswQUhFTWUxbFJWeGMrYjd3Y1dV?= =?utf-8?B?a25rOVV5ZXQwTXZWbncvcGRDNEhLNHl0OFV1c0hMY051M3d1SVhzQWdlakJw?= =?utf-8?B?dzFQbnpKdnRvVlhmYUFxOGR4ZnBDZDM1TnNJNjJjOEVtYXRhZG5Ycmo0ekZi?= =?utf-8?B?eDI3dmtRajVXdTVzRGVnM0oxUjVuN1FMRGZjNVRPbmFUVUNpYlhzUVVXNUts?= =?utf-8?B?U21mMjl3OFhteG5rcEgycTRERnJsdWFEYXFVbVdYeWpGK2drVThCdkVrMFNS?= =?utf-8?B?VkpFTXR0R0ZjQlgxejlNb3p1M0dpanVSNE1sdC9vZ3hkUTlReFoyOCtNY1Mv?= =?utf-8?B?Um5jY2RHazRhWU1rSGdhNjB0dURBcHNXV0Q4VEwrMHRMS0JSVzFVc3hyY1hM?= =?utf-8?B?Um4yK3FkYWlITW1KeGo4Ky9kN0g2TytLWEYxSU03dlhHcmxVdzhwazRFdjJN?= =?utf-8?B?QXJEdks4SlA4QlB6MllDaFVZMmRIa2VvWDVPZUpXN0pSVXlMaDM0bXo0bW8y?= =?utf-8?B?V1VMZzQvZkVaR1BETTduL1dueGZKa2hrVUs3WWxLdzYwZlZWZXZCTERJUEY3?= =?utf-8?B?OVQvdG8yb2cvN0p5MUNQOVB3RHpMbUQwNVJJVnNsd1Y4bmV6OGJCbEpmZm5Z?= =?utf-8?B?Mjh0Vm9SSDh6dzBrNUJOZ0tQKytTeHpYNTA4TklFeUt6bjc0dUhaejFtc0FN?= =?utf-8?B?MGh1bHlBRFYrWlh5a0FPSFlVcFhkL2FCbUd2SVJ6Y3JEQWdsRUxJeWxKdXJh?= =?utf-8?B?dzh0dWNtMmNNMDI3eE5UQmdoWmN4MDR5UW84TC96SFQ2bzJ2Y24raGJRalB4?= =?utf-8?B?Wk9xSHhVakZMbU01TEduZ2FkS0htOUZocSt6T0tMK0RZT0FGcWo0UWR3R0ZP?= =?utf-8?B?ZXlHZWRzOUx5RmEwZzZraU53OEpKZHlHeHdOc2tIZHUvRzNvY3diN0taRHRw?= =?utf-8?B?cDdaVXFCd3pvTGR1SEZuY21qMkVLNE9vb0R0SUQrVUc1bXA3ekQwM2xaMkQx?= =?utf-8?B?anMyS3hHUVVZaDc0Z2NwcVk3U09hMHVHeU9ic3pwZW5CbndMVUs0QTRmUDM0?= =?utf-8?B?d2ZzTzQxUStjZW4vaHJzWll5UEo5ZERvNEV0ZnhoZDUxUjRqN3Y2RTkzZ2h0?= =?utf-8?B?Sjlza01PSjBuekhFeWpIUTVSSEk0VVRycG96Y0E4dXdKTVlaWGdabEpWOFMz?= =?utf-8?Q?aROxDND1JEq3FFXc=3D?= Content-ID: <02F56011096C0843A792460795E541FE@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: 849016d2-5ed6-4004-0d6a-08da2832194c X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Apr 2022 09:41:26.3912 (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: ky8V0Zxus6tIZ/Xcqgx0VXXXgl5/+IC1b0X8WDbdOV3znSZ7rFxK4f+MacNKld38C012kzQ+7V/XBx9PHcIAzQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5809 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/qsvdec.c: extract frame packing arrangement data 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 Tue, 2022-04-26 at 18:00 +0800, Wenbin Chen wrote: > Use h264_sei to parse SEI data got from MediaSDK. Extract frame > packing arrangement information from SEI data and config AVStereo3D > side data for decoded frame. > > Signed-off-by: Wenbin Chen > Signed-off-by: Tong Wu > --- > libavcodec/qsv_internal.h | 2 + > libavcodec/qsvdec.c | 160 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 162 insertions(+) > > diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h > index e2aecdcbd6..a804c392c1 100644 > --- a/libavcodec/qsv_internal.h > +++ b/libavcodec/qsv_internal.h > @@ -54,6 +54,8 @@ > > #define QSV_MAX_FRAME_EXT_PARAMS 4 > > +#define QSV_PAYLOAD_SIZE 1024 > + > #define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ > (MFX_VERSION_MAJOR > (MAJOR) || \ > MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR)) > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c > index 5fc5bed4c8..26fa178b4d 100644 > --- a/libavcodec/qsvdec.c > +++ b/libavcodec/qsvdec.c > @@ -41,13 +41,16 @@ > #include "libavutil/time.h" > #include "libavutil/imgutils.h" > #include "libavutil/film_grain_params.h" > +#include "libavutil/stereo3d.h" > > #include "avcodec.h" > #include "codec_internal.h" > #include "internal.h" > #include "decode.h" > #include "hwconfig.h" > +#include "get_bits.h" > #include "qsv.h" > +#include "h264_sei.h" > #include "qsv_internal.h" > > static const AVRational mfx_tb = { 1, 90000 }; > @@ -101,6 +104,10 @@ typedef struct QSVContext { > > mfxExtBuffer **ext_buffers; > int nb_ext_buffers; > + > + mfxPayload payload; > + H264SEIContext sei; > + H264ParamSets ps; > } QSVContext; > > static const AVCodecHWConfigInternal *const qsv_hw_configs[] = { > @@ -600,6 +607,150 @@ static int qsv_export_film_grain(AVCodecContext *avctx, > mfxExtAV1FilmGrainParam > } > #endif > > +static int h264_decode_fpa(H264SEIFramePacking *fpa, AVFrame *frame) > +{ > + if (!fpa || !frame) > + return AVERROR(EINVAL); > + > + if (!fpa->arrangement_cancel_flag && > + fpa->arrangement_type <= 6 && > + fpa->content_interpretation_type > 0 && > + fpa->content_interpretation_type < 3) { > + AVStereo3D *stereo = av_stereo3d_create_side_data(frame); > + if (stereo) { > + switch (fpa->arrangement_type) { > + case 0: > + stereo->type = AV_STEREO3D_CHECKERBOARD; > + break; > + case 1: > + stereo->type = AV_STEREO3D_COLUMNS; > + break; > + case 2: > + stereo->type = AV_STEREO3D_LINES; > + break; > + case 3: > + if (fpa->quincunx_sampling_flag) > + stereo->type = AV_STEREO3D_SIDEBYSIDE_QUINCUNX; > + else > + stereo->type = AV_STEREO3D_SIDEBYSIDE; > + break; > + case 4: > + stereo->type = AV_STEREO3D_TOPBOTTOM; > + break; > + case 5: > + stereo->type = AV_STEREO3D_FRAMESEQUENCE; > + if (fpa->current_frame_is_frame0_flag) > + stereo->view = AV_STEREO3D_VIEW_LEFT; > + else > + stereo->view = AV_STEREO3D_VIEW_RIGHT; > + break; > + case 6: > + stereo->type = AV_STEREO3D_2D; > + break; > + } > + > + if (fpa->content_interpretation_type == 2) > + stereo->flags = AV_STEREO3D_FLAG_INVERT; > + } > + } > + return 0; > +} > + > +static int h264_parse_side_data(AVCodecContext *avctx, QSVContext *q, AVFrame > *frame) > +{ > + GetBitContext gb_payload; > + uint8_t *sei_buffer; > + int sei_buffer_index; > + int ret; > + > + if (q->payload.Type != SEI_TYPE_FRAME_PACKING_ARRANGEMENT) > + return 0; > + > + sei_buffer = (uint8_t *)av_mallocz(q->payload.NumBit / 8); > + if (!sei_buffer) { > + av_freep(&sei_buffer); > + return AVERROR(ENOMEM); > + } > + /* remove emulation prevention bytes */ > + sei_buffer_index = 0; > + for (int i = 0; i < q->payload.NumBit / 8; i++) { > + if (q->payload.Data[i] == 3) > + i++; > + sei_buffer[sei_buffer_index] = q->payload.Data[i]; > + sei_buffer_index += 1; > + } > + > + ret = init_get_bits8(&gb_payload, sei_buffer, sei_buffer_index+1); > + if (ret < 0) { > + av_freep(&sei_buffer); > + return ret; > + } > + > + ret = ff_h264_sei_decode(&q->sei, &gb_payload, &q->ps, avctx); > + if (ret < 0) { > + av_freep(&sei_buffer); > + return ret; > + } > + > + switch (q->payload.Type) { > + case SEI_TYPE_FRAME_PACKING_ARRANGEMENT: > + ret = h264_decode_fpa(&q->sei.frame_packing, frame); > + break; > + default: > + break; > + } > + > + av_freep(&sei_buffer); > + return ret; > +} > + > +static int extract_frame_side_data(AVCodecContext *avctx, QSVContext *q, > AVFrame *frame) > +{ > + mfxU64 ts; > + mfxStatus sts; > + int ret = 0; > + > + if (q->payload.BufSize == 0) { > + q->payload.Data = av_mallocz(QSV_PAYLOAD_SIZE); > + if (!q->payload.Data) > + return AVERROR(ENOMEM); > + q->payload.BufSize = QSV_PAYLOAD_SIZE; > + } > + > + sts = MFX_ERR_NONE; > + while (sts == MFX_ERR_NONE) { > + > + sts = MFXVideoDECODE_GetPayload(q->session, &ts, &q->payload); > + if (sts == MFX_ERR_NOT_ENOUGH_BUFFER) { > + av_log(avctx, AV_LOG_WARNING, "Space for SEI is not enough." > + "Realloc buffer\n"); > + if (q->payload.BufSize >= INT16_MAX / 2) > + return AVERROR(ENOMEM); > + q->payload.BufSize = q->payload.BufSize * 2; > + av_freep(&q->payload.Data); > + q->payload.Data = av_mallocz(q->payload.BufSize); > + if (!q->payload.Data) > + return AVERROR(ENOMEM); > + continue; > + } else if (sts != MFX_ERR_NONE || q->payload.NumBit == 0) { > + break; > + } > + > + switch (avctx->codec_id) { > + case AV_CODEC_ID_H264: > + ret = h264_parse_side_data(avctx, q, frame); > + break; > + default: > + break; > + } > + if (ret < 0) { > + av_log(avctx, AV_LOG_WARNING, "parse side data failed\n"); > + break; > + } > + } > + return ret; > +} > + > static int qsv_decode(AVCodecContext *avctx, QSVContext *q, > AVFrame *frame, int *got_frame, > const AVPacket *avpkt) > @@ -709,6 +860,14 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext > *q, > > outsurf = &aframe.frame->surface; > > + ret = extract_frame_side_data(avctx, q, frame); > + if (ret == AVERROR_INVALIDDATA) > + av_log(avctx, AV_LOG_WARNING, "Side data is invalid\n"); > + else if (ret < 0) { > + av_log(avctx, AV_LOG_ERROR, "Error extracting side data from > packet\n"); > + return ret; > + } > + The payload got from the SDK is in encoding order, however the frame returned from MFXVideoDECODE_DecodeFrameAsync() is in display order, see the discussion about MFXVideoDECODE_GetPayload() in https://github.com/Intel-Media-SDK/MediaSDK/issues/2597 . I think it would be better to ask the SDK returns the corresponding info, like what they did in https://github.com/Intel-Media-SDK/MediaSDK/pull/2726 . Thanks Haihao > frame->pts = MFX_PTS_TO_PTS(outsurf->Data.TimeStamp, avctx- > >pkt_timebase); > #if QSV_VERSION_ATLEAST(1, 34) > if ((avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && > @@ -770,6 +929,7 @@ static void qsv_decode_close_qsvcontext(QSVContext *q) > av_buffer_unref(&q->frames_ctx.hw_frames_ctx); > av_buffer_unref(&q->frames_ctx.mids_buf); > av_buffer_pool_uninit(&q->pool); > + av_freep(&q->payload.Data); > } > > static int qsv_process_data(AVCodecContext *avctx, QSVContext *q, _______________________________________________ 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".