From patchwork Sun Oct 8 22:52:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Kalvachev X-Patchwork-Id: 5486 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp2021464jah; Sun, 8 Oct 2017 15:52:46 -0700 (PDT) X-Received: by 10.28.99.139 with SMTP id x133mr6174159wmb.122.1507503166549; Sun, 08 Oct 2017 15:52:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507503166; cv=none; d=google.com; s=arc-20160816; b=t2sP+3JMuEsdd5HX2pWREeEdmAsUBsNU6U29QE6rhfUocBSgVhJ7LaBe5C/DXIfQ3c gqMqVOlMXLQhA4bX06P88cyaOmK8NUgu1jmf5xvxgpLcpbZtbMcmizhf6RT/l5CpF9CS dVXqm7RhHsvPcjKXBYmyqjxB3qbW1Xq1dgJ1TIlHituRvLvAdd0mveb4Wfeea2Jqi6fQ RFnHgBy9+FWuqMZeY4Qe82xo/rkYBSyp5nkRUmnyqPR2PE53MyRRhXh6VPrG7K6LNU+A hgsTELBbYJhqmAimqY0pTM8p1j9Ai8CLlE+5fY0hLP9cTf78we4v3+4Ycb166tryiQbj Y4vg== 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:to :message-id:date:from:mime-version:dkim-signature:delivered-to :arc-authentication-results; bh=KEa0JWH2bHZELRRsl0m45Q7S8l6hAoy/oNpuwv3dTtQ=; b=E/QlUi9Kn3cNgqSqPpdy1xekLhaSjdhf+eQcsbIobZ6z3RPv86fiZLBAAIvrTnMZ+S gJ6i5qoYJP0D1DCgCl7wybA/kmqHd8cBz+ROUact49t+krX4iM74lRESdoeYbVA0uJtA AKBIX2o0TmfrwCILolfug25CgMFTE93KaejGJcQUKxNJ77XZYr5/iz0OF3FZxE8GrCPE pO0ZzgzdjboB7A5jy0qwQKtLGHOg9UOrTaAw57FMxGRpkyxfO/S7fO6BL6TeG0awnqkA dE0LNTMpRq2/ojLnRC6lZ2Xev5gQywEa1GRA8sNaL8K3LqMXIaKMbLFa7bKWDVacRRqa RR6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ieKyhBkz; 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 w85si4455228wmw.256.2017.10.08.15.52.45; Sun, 08 Oct 2017 15:52:46 -0700 (PDT) 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=ieKyhBkz; 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 C096D6806BC; Mon, 9 Oct 2017 01:52:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f172.google.com (mail-pf0-f172.google.com [209.85.192.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F1CDB680642 for ; Mon, 9 Oct 2017 01:52:33 +0300 (EEST) Received: by mail-pf0-f172.google.com with SMTP id l188so12005585pfc.6 for ; Sun, 08 Oct 2017 15:52:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=WE4FbmrJjqHOF3Cg+xQyElQtAgbc+GsqKvyezWg1gy8=; b=ieKyhBkzpZYDLjxt9sI7BLpIt3Una59DG43Sfp7Yh2Lzllg3uaN8Tu5eg+3SeiKsl0 kvsUQ/VbKA72Tt1TbFaFtGCEpm6N7zX6ROfuA6W2x50b9AY0FOTvcIUkbKdGSxwwiixd 4Y1tojXnxea1ti6uHnyb9u+V0MU/2z1f5RlOBB1yAvvIEU9fiBXROIYK2SPLjHjQvOHB QKS5FRPiBfnCkNNENHSziN9zGoN3mBLjbBhr1tFnnK//MYr1wmJ7dlaGyLx7+OMn8344 kJlxs0MZERtFU/ybUIyOTJkipDcwRQn/pwaFEQUeLJiSj3y6v0xQV2/9M5g4FB+Q14ad 3zsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=WE4FbmrJjqHOF3Cg+xQyElQtAgbc+GsqKvyezWg1gy8=; b=bGzM9c3SMnj7VKhnyRf811w3LWa8inrs1CULW/JPeRAiGy7Gi2A4f36SrOsvopvUW2 qeevIitUSNsmHuTXJYYUkj1ZQqeiJHAAU2l390vS0EiFhPsNfkX4a3MLFYfiLjiheVsm E5ymaNREDGkCi1I3G844074HHpqaROaqscInAlPXFBkdZ8iQo2VL9BB6b1D2eP18xGfI jyqwuAvmkDVFuPML/oBNxOLS2Y1MLA/hFsA5uYoQNnvve7MeobZMgYiCGMDhUV6EWFmX m4468MmBP/6Z3WOS7gOvwEcJ4YKgRBOR5dHHR7dNnoKuDud4N/aHy8ncQgJpQWR+O7Ta RUYw== X-Gm-Message-State: AMCzsaX8IssVSnDAAN/CpjsqIk2ofaMOBRRfyuZODnYV6kCReDw6rKh0 5Til56JFIrBl9zfqE6sue77dJiQnCN5AJQ0j9OU= X-Google-Smtp-Source: AOwi7QATS7zY9wGOYr8FjSX/F4S2MgwfUWS/C8q2u0T5yeGvjK8AOtvLndr0VtCs9xu7G6ivyiFD7Y4fJ1/V3C5NXo4= X-Received: by 10.98.0.150 with SMTP id 144mr8414922pfa.75.1507503153702; Sun, 08 Oct 2017 15:52:33 -0700 (PDT) MIME-Version: 1.0 Received: by 10.100.151.236 with HTTP; Sun, 8 Oct 2017 15:52:33 -0700 (PDT) From: Ivan Kalvachev Date: Mon, 9 Oct 2017 01:52:33 +0300 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] Fix visual glitch with XvMC, caused by wrong idct permutation. 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" In the past XvMC forced simple_idct since it was using FF_IDCT_PERM_NONE. However now we have SIMD variants of simple_idct that are using FF_IDCT_PERM_TRANSPOSE and if they are selected XvMC would get coefficients in the wrong order. The patch creates new FF_IDCT_NONE that is used only for this kind of hardware decoding and that fallbacks to the old C only simple idct. BTW, If you have idea for a better name, tell me, I might change it. I thought of FF_IDCT_HWACCEL_PASSTHROUGHT but it is too huge and ugly. For some reason mpeg12 vdpau also uses the same idct, so using XVMC in the name doesn't seem right. (I'm not sure why vdpau needs it...) I also was thinking of using "-1" number for the define, but ... I didn't want to risk with it. Best Regards Ivan Kalvachev. From 88a5f15f8ea04a5fb4eb135e1e773f92bb56a6e0 Mon Sep 17 00:00:00 2001 From: Ivan Kalvachev Date: Mon, 9 Oct 2017 01:25:00 +0300 Subject: [PATCH] Fix visual glitch with XvMC, caused by wrong idct permutation. In the past XvMC forced simple_idct since it was using FF_IDCT_PERM_NONE. However now we have SIMD variants of simple_idct that are using FF_IDCT_PERM_TRANSPOSE and if they are selected XvMC would get coefficients in the wrong order. The patch creates new FF_IDCT_NONE that is used only for this kind of hardware decoding and that fallbacks to the old C only simple idct. Signed-off-by: Ivan Kalvachev --- libavcodec/avcodec.h | 1 + libavcodec/idctdsp.c | 1 + libavcodec/mpeg12dec.c | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 52cc5b0ca..ca0cac501 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3147,6 +3147,7 @@ typedef struct AVCodecContext { #define FF_IDCT_SIMPLEALPHA 23 #endif #define FF_IDCT_SIMPLEAUTO 128 +#define FF_IDCT_NONE 129 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ /** * bits per sample/pixel from the demuxer (needed for huffyuv). diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c index d596aed1a..45b29d6b7 100644 --- a/libavcodec/idctdsp.c +++ b/libavcodec/idctdsp.c @@ -279,6 +279,7 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) c->perm_type = FF_IDCT_PERM_NONE; #endif /* CONFIG_FAANIDCT */ } else { // accurate/default + /* Be sure FF_IDCT_NONE will select this one, since it uses FF_IDCT_PERM_NONE */ c->idct_put = ff_simple_idct_put_8; c->idct_add = ff_simple_idct_add_8; c->idct = ff_simple_idct_8; diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 22c29c150..4e68be27f 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -1217,7 +1217,7 @@ static void setup_hwaccel_for_pixfmt(AVCodecContext *avctx) #endif ) if (avctx->idct_algo == FF_IDCT_AUTO) - avctx->idct_algo = FF_IDCT_SIMPLE; + avctx->idct_algo = FF_IDCT_NONE; if (avctx->hwaccel && avctx->pix_fmt == AV_PIX_FMT_XVMC) { Mpeg1Context *s1 = avctx->priv_data; -- 2.14.1