From patchwork Tue Nov 28 05:20:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 6416 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp2755003jah; Mon, 27 Nov 2017 21:21:21 -0800 (PST) X-Google-Smtp-Source: AGs4zMaAMZvuWjWQ2SL43mCm1rNnn2ebmycJ14YkoDw9TGjIsVLDNx4x8zMOIiLrNL0RVEAWG8ES X-Received: by 10.223.152.1 with SMTP id v1mr33469761wrb.234.1511846481237; Mon, 27 Nov 2017 21:21:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511846481; cv=none; d=google.com; s=arc-20160816; b=0vErj2TXvzMDPeGWY9Qn6v4WxDgSSZLlJKeiSmNnsJYmr1wk/HyN1N6kYWxGpyel1G 1zyLaKqTGZ8Hz7ie1FULhve+dW5gAPib4JBCI5JwOskceD9x46b89DHI5JNZX7yHbEiE m98l4NEJRAlhN9a7mre0FdCuGMwfbGHmF9MT/SrIkmv1IG/t83pSncoocB7DuGi+gR8d LMMriKs2T8xmbphw5jKXagSLdt7O01xh2gKNinv/AiDwC3M8l12KK1ehA+FOT7mIlVnP SztMU2Sf0UKnwl+xi+BLxRdPKVpP9mxoqENN9MBqifgEDCgAZKSc9jTb5mk9x70VxnfG ztvA== 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=P0wHHEdcaSPCkmYN+SLgRV2hCVu+VXTyyxz1TaAzdmI=; b=vZ5hZN9Im5VpeCbsoGZanOx7gFZnrxLOFWW+efbnV7LLrNBOmcGHpc4qXTe4si4Cxx n/2022Q/AEkZVVIYsEoOCq5XYfGpySs9qr3Xdh6KEDHknsvsGhxZeJ9cBNGDYZBQgjpQ 90+m6L9Qq4xVGtYEL9Zj7f+pCN9ln0KPieNdSONFCyjv9JuCOQCcQzul21+WwZrVSpul 5G2uEjA7Pw0NmmU80+S4ZT6F1+2vNReifLRIB2sGFNNt5pRild3n58A6b/dEguu5jRkn 8QYQsW9NxgkLSQXaZx0bA2guWMJ6Jocq6HsHQazqYBq+yZp8yW+LUfjqMrcrwUW2Ub7Y qq2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=vBqXzUqP; 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 i206si12439568wmf.180.2017.11.27.21.21.12; Mon, 27 Nov 2017 21:21:21 -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=vBqXzUqP; 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 5C138689FC5; Tue, 28 Nov 2017 07:21:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl0-f54.google.com (mail-pl0-f54.google.com [209.85.160.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BDD1C6883E8 for ; Tue, 28 Nov 2017 07:21:02 +0200 (EET) Received: by mail-pl0-f54.google.com with SMTP id o17so9988651pli.1 for ; Mon, 27 Nov 2017 21:21:05 -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=WNrqJulcJ/nFN6xR7YQTRrTh8z75WlQqRHrcbCtOAak=; b=vBqXzUqPKw9zhcWNjRSu8Hbhe1ls/kYoEEofifuSK+9R/DTFhOrNyEHl5xufOrGb/n GsTBHYaR2irPsTyM3TxyK13kcwJMJ+F0TH1kHU6S2eUOOPnIrH2KjEYGiWuLoTwQ/mR2 BpOKiZmX834X3zZZEMQPM2iYfAcJBRBZa0t6BVz5t43SLC9mGIqtc8ny2ahXVfZAq1G2 M5r0xyaCvd+3e4j2zn607HTB4XIOxmSYpKeQFdB2RFBoyOXI70x1FamhkRlOGU3u2FJ/ HDKjuIE6dWNZGHEakQJxwICWWLblX3DT6RZAhYBRUIyecJgp7VslN5Z7OT+ogDbBkF5C N8RA== 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=WNrqJulcJ/nFN6xR7YQTRrTh8z75WlQqRHrcbCtOAak=; b=gaTXL/csa/vI8QBsXbdgYwFBKOfkJ2LSnw+87/qMnMMwQlTcpMFnzULqEhncLoxdnc T/3dH00pZsh5fn4Q6jIE3Pfs+KBlxZN1vL2EGtPa6N7mYtVdxJc0Vmj6qeU/zJT6DauA lthYY88HgIs2iLhhTMxqO9LifGvujvuAvKAvuZH+9PNWoxr+8SvyHcD+7RewgVpTv526 4YyCbDIkr6s1JqPyN1VStCNKW9RTDZ+oSmORNNAw9WwdVfU6Gp/XFZ5yhf8QG/ADlWDR wOIkFf+7ECD+cop0e7fJ2+o1k+wGZP/pY2ZdRj1fHpQRPXEHkM0ZJ9QIXfKjNuPQHLbd 5fjQ== X-Gm-Message-State: AJaThX4BcZyVEEDOCrKebsZz0KSao27vxFynI34ZzhHVeKbO61XjyQE6 b4k299nHDCJNC5TdLjdrmyG+/2Gm X-Received: by 10.84.140.131 with SMTP id 3mr29581993plt.394.1511846463309; Mon, 27 Nov 2017 21:21:03 -0800 (PST) Received: from [10.67.68.55] (fmdmzpr03-ext.fm.intel.com. [192.55.54.38]) by smtp.gmail.com with ESMTPSA id z74sm43014391pfi.123.2017.11.27.21.21.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 Nov 2017 21:21:02 -0800 (PST) To: FFmpeg development discussions and patches , Mark Thompson From: Jun Zhao Message-ID: <9f434fa3-2bf3-e375-3713-90369800836c@gmail.com> Date: Tue, 28 Nov 2017 13:20:59 +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] 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" From 94d511d93fdb83103fdafbd9ca0d02abfbd2e305 Mon Sep 17 00:00:00 2001 From: Jun Zhao Date: Tue, 28 Nov 2017 21:05:18 +0800 Subject: [PATCH] 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..5bf00a44f9 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 (!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;