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 AFD6B407E9 for ; Thu, 23 Dec 2021 08:38:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 99E6C68B13B; Thu, 23 Dec 2021 10:37:59 +0200 (EET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C54C668A962 for ; Thu, 23 Dec 2021 10:37:52 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1640248678; x=1671784678; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=Npl+sL6YcQ22NdxzLKLt9cbni0JSBZZdmudFMeZG5+M=; b=aLfG5+xOMprasdzHXzTP22DBBawH41ehoxxqnNLB0eJ5NvLWBK+atZj8 rac4anmGV7V8rTGQGdrcqVEZcwpxWlI/mch67OpxVx2b8SnmuAlKzJJpo MRWuNK0IeN6E1v3r4h7oAxNZWW1IaPfHrkJS9/272paXeUapIz3EN/vID /CvxdIyH0zAH5aE2ukRctq0JhbUrFhybTwL3gomZ2axPgId3M1rkfMCiR ttYrTf9b2chq83D86sVLzrFRSSECXI4HgpoHtLUUg9ABekuOy7tNmLvH/ pe354NQxlIPRFX0An/4m/cxsOPKfpSwKQ6KGn4qIMQ05x70e+664+CY06 Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10206"; a="239539399" X-IronPort-AV: E=Sophos;i="5.88,228,1635231600"; d="scan'208";a="239539399" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Dec 2021 00:37:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,228,1635231600"; d="scan'208";a="617425184" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by orsmga004.jf.intel.com with ESMTP; 23 Dec 2021 00:37:45 -0800 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) 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.20; Thu, 23 Dec 2021 00:37:37 -0800 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 23 Dec 2021 00:37:37 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Thu, 23 Dec 2021 00:37:37 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.171) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Thu, 23 Dec 2021 00:37:37 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c1NB3cnQhULU0mmEBdjpMrwSpdWeKsmkBGJX3M3xeyfFWNKhEJQBiFqh4n/dsKGmH4UT7m7fHKD9cwJyjGgVANYRgg4+xoXy0KB3SGH5ATrosjQ0ZaVhnq+efKs/nyYX7pit4aek4g9fkHBvNWHHVqiETlPZ5B7FYKn7Ow7E91A+Mz5sykZbYIBWQA1QgOye2UhIly78HBcG5bBizlKtTMFecJ9hWTUvUQOhKhqjocu1bSyk5sU6NvCvgwOXWsI2vfqw+EAgZ9vWOQJrFc1qUa9J0ItKuQtN3ktlvh6NRGjRBkwQk+C60tsZZ5YQEW0FCltJhAQ9z31IVmCYR+iHnQ== 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=Npl+sL6YcQ22NdxzLKLt9cbni0JSBZZdmudFMeZG5+M=; b=eqqZjDntMfLMUfMWSNa6yvLEH/eObsQnPgtrYja1jdRFWGrQyXNgJ8srhPrt7FciTWYunzhB2s+dqfo58WYgzL/FTGtJ+M6lfYE5qt63X0KyAoC8sYqtySYv9wWGBboIsorymK/vtWmi42PpBqJ055gpdNGotD1woplS/mv2nFEy9lNfUx/gwesWqwDGzwxQA36BxOYrwHn57KR25ovHAMMoq0faoC+aSPesWX8x1NQlZEai+nM4gAlaAjL5gYf+yzmu7oUqv/TWJ76fR0WUQ/pjfk+5WRbfUe6kc5Kizbf4Ca74QGepZ5bjf9P5Sg9C0kD9WuocTZge02+VgCiAxg== 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 BN7PR11MB2819.namprd11.prod.outlook.com (2603:10b6:406:b4::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.19; Thu, 23 Dec 2021 08:37:35 +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.4801.023; Thu, 23 Dec 2021 08:37:35 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH V2] libavutil/hwcontext_qsv: clean padding when upload qsv frames Thread-Index: AQHX96SZMK2LXjsHvkG4Y8FFuf7Pzqw/wWAA Date: Thu, 23 Dec 2021 08:37:35 +0000 Message-ID: References: <20211223022637.1290934-1-wenbin.chen@intel.com> In-Reply-To: <20211223022637.1290934-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: 842f22d0-296f-4d5c-abef-08d9c5ef7858 x-ms-traffictypediagnostic: BN7PR11MB2819:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2276; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Q6ajI3biGksZWeo/sbQwMjN04IBea7JNoLOtFOlX3ODoM5jlwEDsqx9zTpzGN9rb6CM/NgCVafweELbK0ddfj+UL0b+XK9Vut5hJ5QnwxTsvCnjongN99u6UCfvg5gaKLx8URKtrXx+0cx/szuk7gribPmwHprL10oRk5S4h9WHcGi0MfQDska0yaTZinN4PHTeabxQ0JtNa8fWjiZ0y2EGc/co/vH0Y0kiapgk7hGVx5qjCSmCRzS4NTMsLObHtldh8MOlOfsyyAB1Qnj32Jrjc5jmjd7HLD9gbUyxjBNViX1a7mjrHTkqArJU15Nwtr+WfxkphxcWhhHGyIKDvZH6vEz1VXG1bcb/NtV2aayA7htF5pbZb9qkjZhkSPnHaYsUQfLJW4JfV5XA7wLEa/c8qOXjAmQ+1c+Arx2jHUft672SUl12zxUdFNJCNfDqf1vPHTFEPverAh6+i5DMqmrhlmVJHSUl50G2KonEMlrjZmnD2krRrtGJTkw0MyWO3P/8NAwZQjUHLxLFHuwkyj0GDEZBnKgy56SJ/TLd8lcq/cQZbke1IEbHdRen/0FedAPSX0mq4voTjdQStnND0s6X4yk0tyAPYL7GFQlTFqX8Y9zstOjSjNMk7I4nv7MRS4tJPQ8QGo/zrDaMvG/1zXk3qvPa19M17v+kT3SL0fGMIxcANFY4/pEmdho8ZOwo+/Fj6KTEneSdLE9SMOfAQx0vI+6y+CxF8vA2WEBDbt2HBLJjm9t0R8qA2lFTUvgM+JFYxXH62M9kYlR8B7r9YjzDJd2O2UqE9MX+h7tl4yMM7ZCZB2q5ZxaipjvA2YgLQ 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)(186003)(6916009)(6486002)(36756003)(76116006)(966005)(8676002)(5660300002)(64756008)(38100700002)(83380400001)(91956017)(4326008)(71200400001)(2616005)(8936002)(66476007)(6506007)(508600001)(66556008)(107886003)(82960400001)(66446008)(4001150100001)(26005)(86362001)(38070700005)(316002)(2906002)(122000001)(66946007)(6512007)(99106002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TDZaNUFEUlRzdG9UZUJ2aVVhbXF1NjJkNnJaLzVpRi9zUHpsM0UrU3EvWnJo?= =?utf-8?B?bG1IZFkyR0cvMXVzcEFFcUlrQ3hGaVl4V3MyenpEaTZ2Wk5HM1ZHWjZ0MHRa?= =?utf-8?B?bE1XVTZvQUczYWpBOW5wMGZoNk9uU05PUUY1SGlTRUJBTGVnVDgvbDllSDFN?= =?utf-8?B?ckQ3cDc3MFNCUnhweG9mMEZmcGZrTXAzdWhOSjM5algvVDVzcUsvVHFYYzln?= =?utf-8?B?TFBsNFBYdXZUM2djNkxHelNUZno0ZndBSXRMd2liSmxCTVNUVXpxVkk0emlo?= =?utf-8?B?ZlA1cUxQYW45WTcwMTF0cWxldUN4bC9BUUNNQkhOV1A0TUJ4NEVTaUNac1NO?= =?utf-8?B?WFNnS0VrelpOUlNyRzQ1R2E0OXVQUUN4NWVGS2xXVFF4ZlFsWWUyczJrZzZq?= =?utf-8?B?YlJhSmZwZU90ZlB3bndsMm1QSllKclRNWTl4NVJmV0ZVanNzSFVDOGJOdDBN?= =?utf-8?B?VmtBVE5rYjlQZTFRWUVvT0RaR1BuZncxWk9zQUJPU0cxZnJHYlFldk9DSzlN?= =?utf-8?B?OVRmR1ozZnJTZjVSUmF6Tm40bFphUWJNQVFkWExJS2pyQTgraEpFLzJ6b3JK?= =?utf-8?B?bWp1eWcyWVA0U2l3YzhJRlN1bHF2TWgxbDdvNnZKQlVJdXlaY1NlcDRrb1M4?= =?utf-8?B?cThRcXpkZ0ZWVFJjRE5nc051bElJd2VKTUNDQTZleVFYdXBEUEhNWFhLTnFF?= =?utf-8?B?SlFTYWtQWlFoSW1nQWlMRzZqQ3E0S3dMbXYxcTlGWXJHL3h5M0RLc2JCZVhY?= =?utf-8?B?SW9UajJYaGlRNXhadEI2NWFkczV5eXVPQ2ZhVXh6WThIWmE2cUVzM0RjajN2?= =?utf-8?B?cExHKy8vY2NRUzc2Rzhzb1FVSnFlREVlSzVFNjZKNkJ1aXFlOHBMSWtXYUhS?= =?utf-8?B?TXl5OTh2ZVBhUzBTTmlGbHpEZkp5QnRHUWpaT2x1ZVp6UW9Xenp0bVF1V0Q0?= =?utf-8?B?WTliQ0orWW5yb3l3NUZNQnE3elh3Tmw0M3NaSHlKT2w0eU00YmUyWlA2Mk5N?= =?utf-8?B?YUVqdVorS282QzRWYVdUY2tNOWd3RGk5VDZxOUczTFU3K0hTN0NnQWZQUDIz?= =?utf-8?B?OHJtdmo1eVFmVmZyZWJEUXFaQkpBUExNdWNnd3VUWTN3ZzBDTTJMZ2NaWlVZ?= =?utf-8?B?dk9JTE1aOWJHN0EzTTZXWVZqTnNDM0ZYTWFiVnFQdGJGOGkwVlV4R1JMSHB5?= =?utf-8?B?S0NFSXhmLytCV0FMR2pPakNEYTdFVDRvMmRpdlhwaDlPakMreEJrUzhLQTFV?= =?utf-8?B?V1BvdVNBeHhWaUVuSWY0dTZEMEF4aERMYUNEU011MldGL3EwaEFvSjF2VVA4?= =?utf-8?B?S0czTHlSWlFFSWNkTm1Hb1pNUHYxTmYydkdrWktDRHhES3RSR3VHenBCbXhL?= =?utf-8?B?dy9xRCt0QVZTV1ROc1h1d0J0WmJwekdqdDNwREJJQnNtZ1lSaVhsenVNdEVU?= =?utf-8?B?VlVZekNPRitHdXUyWk50Vm1Qb1VxdFJ3YUkzdENuc01jbElNUGh2enNjVVBw?= =?utf-8?B?c2VFdVJUQVZtSVVCN2lXM211OGRid2hRTFpLaWFINnk0Y1lZTVZ3dnAzOFBp?= =?utf-8?B?VkFaOUZFdlVJMyswVUhlaExDUk1GY2FKeE5xRjJWR2x1TWNUVHQ5a0MrWEdM?= =?utf-8?B?Z2l3aUViTlpJQWNiMG1WdFJNUituRWJuMkgrSDZVMmo4YUJaN202UGIwVC9V?= =?utf-8?B?ei9kNy9FVXBLakU0Z20rNmlmV1JjdWpNVkhJRGlXVDNxNWpVMHhSRzhXYnp6?= =?utf-8?B?cFFmZkpUWEIzaFBmVlYzUlF2My9aa1VwbFNqdUVDYmt1STBsNWpxT2Z1Nk8y?= =?utf-8?B?TEx1ZXJsc1JncE9KWmVzY0lXR09ESXNSRUhnS1FIandkNmp2ZnZmSmFqWUZF?= =?utf-8?B?Z0hkRFhSdzVPSkxUNEZUd1g2WUcxcURrOWNOTG5YdnBXN2NmY3RWSFplaDBU?= =?utf-8?B?TUErd3VjK2xPSGZ5cFJ4SkhDUEdpR1I4UUVIZFpuMmF4SXNROW5ORkNYcmVJ?= =?utf-8?B?MmRYOFN4Yitad1dMbFpmd2xUZ0t1UDF3TWxyOVNvQ0NZWWZ5YTI1TngyL3hw?= =?utf-8?B?UWZueGVyTERLbXg2VEQrcllKeU9mUDBzRDBrWXRBNzVNMk0vTzRCZytqZzJj?= =?utf-8?B?SUNWeVU0azNIRUtPbWFGM0dwTHdYSVlYSm5LZDNRQUhrT1lwOGNINEVOdXZi?= =?utf-8?Q?uQAFCfyeI15Es6z4gfM+8sI=3D?= Content-ID: <5AD5DB506E618845BC21B1C2B7921768@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: 842f22d0-296f-4d5c-abef-08d9c5ef7858 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Dec 2021 08:37:35.5318 (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: m21BhWd146Al+90XFqMGUGqsMSGcxrPaFEUWkgNd1sS8QWLMafwxmkJDAB7bebpMNxMfNI7K9MWw/gSD40G2AQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR11MB2819 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH V2] libavutil/hwcontext_qsv: clean padding when upload qsv frames 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 Cc: "Chen, Wenbin" 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 Thu, 2021-12-23 at 10:26 +0800, Wenbin Chen wrote: > Fix #7830 > When we upload a frame that is not padded as MSDK requires, we create a > new AVFrame to copy data. The frame's padding data is uninitialized so > it brings run to run problem. For example, If we run the following > command serveral times we will get different outputs. > > ffmpeg -init_hw_device qsv=qsv:hw -qsv_device /dev/dri/renderD128 \ > -filter_hw_device qsv -f rawvideo -s 192x200 -pix_fmt p010 \ > -i 192x200_P010.yuv -vf "format=nv12,hwupload=extra_hw_frames=16" \ > -c:v hevc_qsv output.265 > > According to > https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#encoding-procedures > "Note: It is the application's responsibility to fill pixels outside > of crop window when it is smaller than frame to be encoded. Especially > in cases when crops are not aligned to minimum coding block size (16 > for AVC, 8 for HEVC and VP9)" > > I add a function to fill padding area with border pixel to fix this > run2run problem, and also move the new AVFrame to global structure > to reduce redundant allocation operation to increase preformance. > > Signed-off-by: Wenbin Chen > --- > libavutil/hwcontext_qsv.c | 96 +++++++++++++++++++++++++++++++++------ > 1 file changed, 83 insertions(+), 13 deletions(-) > > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c > index a5d154a24d..853fb7f60d 100644 > --- a/libavutil/hwcontext_qsv.c > +++ b/libavutil/hwcontext_qsv.c > @@ -47,6 +47,7 @@ > #include "pixfmt.h" > #include "pixdesc.h" > #include "time.h" > +#include "imgutils.h" > > #define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ > (MFX_VERSION_MAJOR > (MAJOR) || \ > @@ -90,6 +91,7 @@ typedef struct QSVFramesContext { > > mfxExtOpaqueSurfaceAlloc opaque_alloc; > mfxExtBuffer *ext_buffers[1]; > + AVFrame realigned_tmp_frame; > } QSVFramesContext; > > static const struct { > @@ -137,6 +139,54 @@ static uint32_t qsv_get_d3d11va_bind_flags(int mem_type) > } > #endif > > +static int qsv_fill_border(AVFrame *dst, const AVFrame *src) > +{ > + const AVPixFmtDescriptor *desc; > + int i, planes_nb = 0; > + if (dst->format != src->format) > + return AVERROR(EINVAL); > + > + desc = av_pix_fmt_desc_get(dst->format); > + > + for (i = 0; i < desc->nb_components; i++) > + planes_nb = FFMAX(planes_nb, desc->comp[i].plane + 1); > + > + for (i = 0; i < planes_nb; i++) { > + int sheight, dheight, y; > + ptrdiff_t swidth = av_image_get_linesize(src->format, > + src->width, > + i); > + ptrdiff_t dwidth = av_image_get_linesize(dst->format, > + dst->width, > + i); > + const AVComponentDescriptor comp = desc->comp[i]; > + if (swidth < 0 || dwidth < 0) { > + av_log(NULL, AV_LOG_ERROR, "av_image_get_linesize failed\n"); > + return AVERROR(EINVAL); > + } > + sheight = src->height; > + dheight = dst->height; > + if (i) { > + sheight = AV_CEIL_RSHIFT(src->height, desc->log2_chroma_h); > + dheight = AV_CEIL_RSHIFT(dst->height, desc->log2_chroma_h); > + } > + //fill right padding > + for (y = 0; y < sheight; y++) { > + void *line_ptr = dst->data[i] + y*dst->linesize[i] + swidth; > + av_memcpy_backptr(line_ptr, > + comp.depth > 8 ? 2 : 1, > + dwidth - swidth); > + } > + //fill bottom padding > + for (y = sheight; y < dheight; y++) { > + memcpy(dst->data[i]+y*dst->linesize[i], > + dst->data[i]+(sheight-1)*dst->linesize[i], > + dwidth); > + } > + } > + return 0; > +} > + > static int qsv_device_init(AVHWDeviceContext *ctx) > { > AVQSVDeviceContext *hwctx = ctx->hwctx; > @@ -220,6 +270,7 @@ static void qsv_frames_uninit(AVHWFramesContext *ctx) > av_freep(&s->surface_ptrs); > av_freep(&s->surfaces_internal); > av_freep(&s->handle_pairs_internal); > + av_frame_unref(&s->realigned_tmp_frame); > av_buffer_unref(&s->child_frames_ref); > } > > @@ -1014,12 +1065,13 @@ static int qsv_transfer_data_to(AVHWFramesContext > *ctx, AVFrame *dst, > QSVFramesContext *s = ctx->internal->priv; > mfxFrameSurface1 in = {{ 0 }}; > mfxFrameSurface1 *out = (mfxFrameSurface1*)dst->data[3]; > + mfxFrameInfo tmp_info; > > mfxSyncPoint sync = NULL; > mfxStatus err; > int ret = 0; > /* make a copy if the input is not padded as libmfx requires */ > - AVFrame tmp_frame; > + AVFrame *tmp_frame = &s->realigned_tmp_frame; > const AVFrame *src_frame; > int realigned = 0; > > @@ -1048,24 +1100,40 @@ static int qsv_transfer_data_to(AVHWFramesContext > *ctx, AVFrame *dst, > if (ret < 0) > return ret; > > + /* According to MSDK spec for mfxframeinfo, "Width must be a multiple of > 16. > + * Height must be a multiple of 16 for progressive frame sequence and a > + * multiple of 32 otherwise.", so allign all frames to 16 before > uploading. */ > if (src->height & 15 || src->linesize[0] & 15) { > realigned = 1; > - memset(&tmp_frame, 0, sizeof(tmp_frame)); > - tmp_frame.format = src->format; > - tmp_frame.width = FFALIGN(src->width, 16); > - tmp_frame.height = FFALIGN(src->height, 16); > - ret = av_frame_get_buffer(&tmp_frame, 0); > - if (ret < 0) > + if (tmp_frame->format != src->format || > + tmp_frame->width != FFALIGN(src->width, 16) || > + tmp_frame->height != FFALIGN(src->height, 16)) { > + av_frame_unref(tmp_frame); > + > + tmp_frame->format = src->format; > + tmp_frame->width = FFALIGN(src->width, 16); > + tmp_frame->height = FFALIGN(src->height, 16); > + ret = av_frame_get_buffer(tmp_frame, 0); > + if (ret < 0) > + return ret; > + } > + ret = av_frame_copy(tmp_frame, src); > + if (ret < 0) { > + av_frame_unref(tmp_frame); > return ret; > - > - ret = av_frame_copy(&tmp_frame, src); > + } > + ret = qsv_fill_border(tmp_frame, src); > if (ret < 0) { > - av_frame_unref(&tmp_frame); > + av_frame_unref(tmp_frame); > return ret; > } > + > + tmp_info = out->Info; > + out->Info.CropW = FFMIN(out->Info.Width, tmp_frame->width); > + out->Info.CropH = FFMIN(out->Info.Height, tmp_frame->height); > } > > - src_frame = realigned ? &tmp_frame : src; > + src_frame = realigned ? tmp_frame : src; > > if (!s->session_upload) { > if (s->child_frames_ref) > @@ -1097,8 +1165,10 @@ static int qsv_transfer_data_to(AVHWFramesContext *ctx, > AVFrame *dst, > return AVERROR_UNKNOWN; > } > > - if (realigned) > - av_frame_unref(&tmp_frame); > + if (realigned) { > + out->Info.CropW = tmp_info.CropW; > + out->Info.CropH = tmp_info.CropH; > + } > > return 0; > } Applied, thx! -Haihao _______________________________________________ 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".