From patchwork Wed Nov 29 23:53:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 6462 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp5122588jah; Wed, 29 Nov 2017 15:54:09 -0800 (PST) X-Google-Smtp-Source: AGs4zMbP01oJ+VN6c1W1p5Wd07J2eCW9FlAfaEbe/n7qJf7JuLS6ju70Q6n6sZaopazhHRCzm3lP X-Received: by 10.223.167.70 with SMTP id e6mr389857wrd.235.1511999649425; Wed, 29 Nov 2017 15:54:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511999649; cv=none; d=google.com; s=arc-20160816; b=Qq/6PjOYciY+zzZHZd9SgNHyB03fWdUx5pV6csqs6VSGGp3Lt0xX5557U11j3vQxnP 3LnfLArqnfND+B0PYnowmqOfZjXQmKE5wLkG26YFb5wCoSNs/mvUPbrzBaimcba3V5Pm G9xHrOY961XMwppdgCZDxJtl8yUfgCaV0osAkD61FISVlJY6AYyhjl/emNoBV4Tboujj oTjP5jRft8q6OiBj+VJej+fP6eAEXrecmfCfeWG2FgnKvScXrnJ1WDTTY/J8oSl+cHNr ycSlLRqZ+RdXz6lW0/HR2gA0Yq6Ic/Bcu+drYgkjRQF94sW97/2LlzzT9sfjMkEFgp21 bECg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :content-language:mime-version:user-agent:date:message-id:from:to :dkim-signature:delivered-to:arc-authentication-results; bh=CLSYT6Ajnt5Gome5vy2l+18zeyUc6MnbkjlOHo/2qsk=; b=AMohgdV+HUyMu54VKbWAEQI+bmnUNaWPq3dc/FF9Fx2CUNIyKaNXb3cX3WYF73UxlL PxhCS9oLS3Qo8Gku3KTCil4EdDqUL9EfiVsJmJBIaXCcv1Rh/0bBWbPAXWjJqjz9vren uufitQasM7YAvj0ckxO9e/hUUH7e+USfW4HxrU/LXcSp5J6O5L7ajX3q4OVPXczPzII7 DvkxKA0qor4PZsPEVOeZa33JYajrSV2P3BRUoGlqK6O1VOk1kEDlwpNYty+Dn9dU8ly9 1e0E7atA2HIRxiLq4MqrVGTD4NN23TXnOlzpGcDMNGKJJzU++1t4dlJtCMXBaJatAxad lZ8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=F1Gs+KWr; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f32si2129765wrf.172.2017.11.29.15.54.08; Wed, 29 Nov 2017 15:54:09 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=F1Gs+KWr; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F0E9468A0AF; Thu, 30 Nov 2017 01:54:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl0-f47.google.com (mail-pl0-f47.google.com [209.85.160.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0A98568A087 for ; Thu, 30 Nov 2017 01:53:57 +0200 (EET) Received: by mail-pl0-f47.google.com with SMTP id bd8so3081242plb.9 for ; Wed, 29 Nov 2017 15:54:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=FjPoQ0IY8oFn/qhicB+8lfhFeNjElqcL13UIdnYRSlA=; b=F1Gs+KWrj1Q9ycyLc39SNgl13FT8fcRwGJwfnq+O2mrgtW/eFuW6Hbl79RARYfpk2G zS/g2wRU2cayftSBJb4oNGHpqhiHCTQuSRaZADg7dzeaQx6+POgXeXefQz1F0ftI3oBK CcZLooRq8bcJt36/xFoI3F1Wdtk74srU+IwRM2YMMpDfjaap8HrYAv46HHLjwjAk922/ BhwjI+MKrUHDeBLwYwCLhG8i9dSfomo/ycpdbJQmmmVuuiFkER7oyUQu/jCnJplywgwB Pyb+uvJi243j4/8qqhLke2emXqOmdudgY+p9ecuTiF4b0oHBKfeis2RnfB3QHsr145CC 44qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language; bh=FjPoQ0IY8oFn/qhicB+8lfhFeNjElqcL13UIdnYRSlA=; b=pzRg1Yt/ReajM/2sYsi9v4sxUWub8xAW3+L6w37x8LQgjUKl96hL5Ca7XnTJlT3DeF fR+8CFhHj3xg8KLU6aRDkL85eBTZ5srhDest14Oz5Gxv8TJe1XGKS1E2nHZLiRPitD4f lhCMNTuPY0PzHCJvAPNsH1++WxfoqR9smBOs3FGQ4OBplvXvfV3uuQrVpkWw2OyiOp6I zDA9u1I4EbBotsVFZ8yU0m7WnK7IOJ61q/7eBc0vFUJzuLFXJ4f1B2L134/EzK5qfCmd 4OpGnmAPeVjh2IQhYwUcqiWR4ByO56vHFBMvgGDGk/bwZF3+IwxxTQb8giCm2jF7sFmc meiA== X-Gm-Message-State: AJaThX7xWs71mOjIQVCfpr7tfpcscl8zPLFbpeFOV1pKUYBhDnkyMPC/ AX3b4iV8HHpTENjH0Qw8zF0= X-Received: by 10.84.214.136 with SMTP id j8mr588670pli.408.1511999638480; Wed, 29 Nov 2017 15:53:58 -0800 (PST) Received: from [10.67.68.55] ([192.55.54.42]) by smtp.gmail.com with ESMTPSA id l14sm4250225pgn.9.2017.11.29.15.53.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Nov 2017 15:53:57 -0800 (PST) To: FFmpeg development discussions and patches , Mark Thompson From: Jun Zhao Message-ID: <27a56d91-6d6d-dd12-794c-28d7fda99107@gmail.com> Date: Thu, 30 Nov 2017 07:53:53 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 Content-Language: en-US Subject: [FFmpeg-devel] [PATCH V2] lavc/vp8: Fix HWAccel VP8 decoder can't support resolution change. 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" V2: fix the V1 lead to webp crash issue. From b943c2814789288d09b4032fa6cdfbc3fd672a2b Mon Sep 17 00:00:00 2001 From: Jun Zhao Date: Wed, 29 Nov 2017 10:22:03 +0800 Subject: [PATCH V2] lavc/vp8: Fix HWAccel VP8 decoder can't support resolution change. Use the following command to reproduce this issue: make fate-vp8-size-change HWACCEL="vaapi -vaapi_device \ /dev/dri/renderD128 -hwaccel_output_format yuv420p" SAMPLES=../fate-suite/. At the same time, reconstruct the public logic as a function. Signed-off-by: Yun Zhou Signed-off-by: Jun Zhao --- libavcodec/vp8.c | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index 471c0bb89e..d5cb7be7b3 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -167,6 +167,30 @@ static VP8Frame *vp8_find_free_buffer(VP8Context *s) return frame; } +static enum AVPixelFormat get_pixel_format(VP8Context *s) +{ + enum AVPixelFormat fmt; + enum AVPixelFormat pix_fmts[] = { +#if CONFIG_VP8_VAAPI_HWACCEL + AV_PIX_FMT_VAAPI, +#endif +#if CONFIG_VP8_NVDEC_HWACCEL + AV_PIX_FMT_CUDA, +#endif + AV_PIX_FMT_YUV420P, + AV_PIX_FMT_NONE, + }; + + fmt = ff_get_format(s->avctx, pix_fmts); + if (fmt < 0) { + fmt = AV_PIX_FMT_NONE; + av_log(s->avctx, AV_LOG_ERROR, + "Can not support the format. \n"); + } + + return fmt; +} + static av_always_inline int update_dimensions(VP8Context *s, int width, int height, int is_vp7) { @@ -182,6 +206,15 @@ int update_dimensions(VP8Context *s, int width, int height, int is_vp7) return ret; } + if (!s->actually_webp && !is_vp7) { + s->pix_fmt = get_pixel_format(s); + if (s->pix_fmt < 0) { + ret = AVERROR(EINVAL); + return ret; + } + avctx->pix_fmt = s->pix_fmt; + } + s->mb_width = (s->avctx->coded_width + 15) / 16; s->mb_height = (s->avctx->coded_height + 15) / 16; @@ -2598,18 +2631,7 @@ int vp78_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, if (s->actually_webp) { // avctx->pix_fmt already set in caller. } else if (!is_vp7 && s->pix_fmt == AV_PIX_FMT_NONE) { - enum AVPixelFormat pix_fmts[] = { -#if CONFIG_VP8_VAAPI_HWACCEL - AV_PIX_FMT_VAAPI, -#endif -#if CONFIG_VP8_NVDEC_HWACCEL - AV_PIX_FMT_CUDA, -#endif - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE, - }; - - s->pix_fmt = ff_get_format(s->avctx, pix_fmts); + s->pix_fmt = get_pixel_format(s); if (s->pix_fmt < 0) { ret = AVERROR(EINVAL); goto err;