From patchwork Thu Jan 21 04:35:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xu, Guangxin" X-Patchwork-Id: 25050 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 1B98444BA3B for ; Thu, 21 Jan 2021 06:35:36 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E0CEE6891E2; Thu, 21 Jan 2021 06:35:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B36BA6804B7 for ; Thu, 21 Jan 2021 06:35:27 +0200 (EET) IronPort-SDR: yB1+DYulqjWqM2r+Y1yjcqJ27in9TQ/TbN753+mqg9Y4gSZTskqs5pE0hInul7lBkbm4TMDAji PeTWkZMHBYrQ== X-IronPort-AV: E=McAfee;i="6000,8403,9870"; a="166313817" X-IronPort-AV: E=Sophos;i="5.79,363,1602572400"; d="scan'208";a="166313817" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jan 2021 20:35:24 -0800 IronPort-SDR: USdVIilzewxZb5FLDmr4KjXSJk5CO6eQQtKkdRGcjaF8zYb3zUmIO2Ag8XZLP/eCs7ZRsaTtCC nbDNhhpSTbnQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,363,1602572400"; d="scan'208";a="427155536" Received: from trinity.sh.intel.com ([10.239.159.85]) by orsmga001.jf.intel.com with ESMTP; 20 Jan 2021 20:35:23 -0800 From: Xu Guangxin To: ffmpeg-devel@ffmpeg.org Date: Thu, 21 Jan 2021 12:35:13 +0800 Message-Id: <20210121043513.1961168-1-guangxin.xu@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avutils/vulkan: hwmap, respect src frame resolution X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: Xu Guangxin Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" fixes http://trac.ffmpeg.org/ticket/9055 The hw decoder may allocate a large frame from AVHWFramesContext, and adjust width and height based on bitstream. We need to use resolution from src frame instead of AVHWFramesContext. test command: ffmpeg -loglevel debug -hide_banner -hwaccel vaapi -init_hw_device vaapi=va:/dev/dri/renderD128 -hwaccel_device va -hwaccel_output_format vaapi -init_hw_device vulkan=vulk -filter_hw_device vulk -i 1920x1080.264 -c:v libx264 -r:v 30 -profile:v high -preset veryfast -vf "hwmap,chromaber_vulkan=0:0,hwdownload,format=nv12" -map 0 -y vaapiouts.mkv expected: No green bar at bottom. --- libavutil/hwcontext_vulkan.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index d4ff4ae307..f6d0cae8ae 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -2009,7 +2009,7 @@ static inline VkFormat drm_to_vulkan_fmt(uint32_t drm_fourcc) } static int vulkan_map_from_drm_frame_desc(AVHWFramesContext *hwfc, AVVkFrame **frame, - AVDRMFrameDescriptor *desc) + const AVFrame *src, AVDRMFrameDescriptor *desc) { int err = 0; VkResult ret; @@ -2085,7 +2085,7 @@ static int vulkan_map_from_drm_frame_desc(AVHWFramesContext *hwfc, AVVkFrame **f }; get_plane_wh(&create_info.extent.width, &create_info.extent.height, - hwfc->sw_format, hwfc->width, hwfc->height, i); + hwfc->sw_format, src->width, src->height, i); for (int j = 0; j < planes; j++) { plane_data[j].offset = desc->layers[i].planes[j].offset; @@ -2246,7 +2246,7 @@ static int vulkan_map_from_drm(AVHWFramesContext *hwfc, AVFrame *dst, AVVkFrame *f; VulkanMapping *map = NULL; - err = vulkan_map_from_drm_frame_desc(hwfc, &f, + err = vulkan_map_from_drm_frame_desc(hwfc, &f, src, (AVDRMFrameDescriptor *)src->data[0]); if (err) return err;