From patchwork Sat Dec 2 17:36:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew D'Addesio X-Patchwork-Id: 6520 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp2849293jah; Sat, 2 Dec 2017 16:32:20 -0800 (PST) X-Google-Smtp-Source: AGs4zMYS+1IIB8FdePDoWY0KG18TyDek7Gvim0d9vGGMd1i72gRc6hYkvDnfOpKQmQRGSKmcwjGU X-Received: by 10.223.189.11 with SMTP id j11mr2701125wrh.265.1512261140516; Sat, 02 Dec 2017 16:32:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1512261140; cv=none; d=google.com; s=arc-20160816; b=pBltc1QOnfEs9e1BzNsmsRDuLoiWW6EdpKz60tffBj/jQs9xBO7ULBrbvdVsg9Qc18 bL094f9+A+vwwFqBIFbYHSWDWGCgsVz8xyy6xwz9sidy4X0p5OaYdhHz3oxMzpAb6plJ 3x0w8OF4n0yT2XQy0XvW4wS/WAer0fx/d/lVF88WthjPkp50vrArkrgSpOB89A/mq2N9 sDVYZ2dek6TYjvoZeAYRVDIofNdtVyRsNwbY74ITNtB4J8kiHuICT29SLJBcFsvZEQjU EduRgFDPVTzkUox4cUIl9Bdsfk0SFRao5wF/fViRACv1a8dD0dXUYMv0NycmomrmUf9c 1Izw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=K4kt9tn/ciUurYdToYbXC3mD85jXAcwXKPLP+/F4UIU=; b=WwcKXY4u2kV/NenRkC+bd/FYAPTeTFfjja/szIj7wCsPW5CdHcbZV79PVnGbtfzYt2 FTbN6CPajB4+gTWxsmonCWFqFlK4t/f6YeBUbL34no03HHolsy0UuA7kn4jUYEbhEgWW Vo9+NdPWYY/R2YQ1oq7LmEmbKCVdjEAIzi/uQPrrLvTe0lsOe1r4uq78vJoOFpWMMB7j 3CxN+S1fqowmiCbUrgbUy1nYygUBq7rXUifPKhFT3kUfr/v5uzcqxrPrv2m7qt8qHDGh QlrGCY2jN4ZP3FeGwZTrMWES7pG0bCOkteVSvTWNVsX8DEeVWj8uXoMj5gRKbD4Rqmb3 se+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=kyJsR6LE; 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 5si2873868wmg.226.2017.12.02.16.32.20; Sat, 02 Dec 2017 16:32:20 -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=kyJsR6LE; 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 3CEE068A33E; Sun, 3 Dec 2017 02:31:58 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot0-f194.google.com (mail-ot0-f194.google.com [74.125.82.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 171B068A239 for ; Sat, 2 Dec 2017 19:37:10 +0200 (EET) Received: by mail-ot0-f194.google.com with SMTP id s4so11601171ote.4 for ; Sat, 02 Dec 2017 09:37:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Al95XJGzU5cmLx6MW53hCIy9iGhKxcrF3RYPyJ2KXjM=; b=kyJsR6LEa1FVJ/rk5IpXV859afDZwC37Pd8ZOtQK8XQ7UC0mRSUs8Lc9/fWwMHrPXL 2pAKAB0b/W3n2Gyu3ZvaROsNH0tLGRPmc2G0qHLlVYphTtQiwW82F2z48dWwOnCOoHHM r8bZMSnmj4bDjZg6CD5rsNE8pPMPeOHUsxC1gu97cHCW0r9A7gCbxb819sWDxgSjEmFm +ellfk4pSIlN+XXhLDvCVd8afbnH1cqoz1tC0B2n5lPSyFZr5x7nQg7Q3CJVMDCn3zec iv6IBo2HifK9KWME1WX+6on/NagpM0l6n5AUnVGIya01D/vO6uxJh+mf5VkMYX2SMJGG amkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Al95XJGzU5cmLx6MW53hCIy9iGhKxcrF3RYPyJ2KXjM=; b=Gxgr4F1X4FGPV/QpHTg2xwsc1kCX/p+oo9ijAQbAfWhK8Cxxanl/C+cCLnlULJ0VvV eEF8RQFosWWvuJMxrOjw990gK7hqlHo9QpS00uXTCZSiMUVB8kQuyHIFO4BI2DqV8FIK vBNRaIKKwIRcjH6HlGzliSfwPgoXOVOPrvQ9nRdfk1rgtW1IgdGaTaih5h843ee71J/O HrlmNoSy4ROzgkd6d3Z6o/lU0GJawgo6Yj4/fZnMI/4DPA85FjHYsdyoMUCR/B5C9ueL kGlGdlkaWQ2I4q3EJxktS+VDS9bBXJEJ9cIicsryksf4sKwNpV276JWY125SKVZ59QMh f4fw== X-Gm-Message-State: AJaThX59r8WABh83HEKGqblgqsE+bUnVqsmx3PfbjL4HUBsyEoCiFyZZ P7JsfQJqyrb6mjtQM8HQYd7gMw== X-Received: by 10.157.82.154 with SMTP id f26mr11831351oth.7.1512236232905; Sat, 02 Dec 2017 09:37:12 -0800 (PST) Received: from localhost.localdomain ([2605:6000:1019:4a8:80a0:1945:efcc:4de5]) by smtp.gmail.com with ESMTPSA id s101sm4180379ota.17.2017.12.02.09.37.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 02 Dec 2017 09:37:12 -0800 (PST) From: Andrew D'Addesio To: ffmpeg-devel@ffmpeg.org Date: Sat, 2 Dec 2017 11:36:27 -0600 Message-Id: <20171202173627.5292-4-modchipv12@gmail.com> X-Mailer: git-send-email 2.15.1.windows.2 In-Reply-To: <20171202173627.5292-1-modchipv12@gmail.com> References: <20171202173627.5292-1-modchipv12@gmail.com> X-Mailman-Approved-At: Sun, 03 Dec 2017 02:31:55 +0200 Subject: [FFmpeg-devel] [PATCH 4/4] opus: Don't invert phase when downmixing to mono (per RFC8251) 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: Andrew D'Addesio MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" When decoding to downmixed mono, don't put the channels out of phase, as they will cancel out and create audible artifacts. (See RFC 8251 sec. 10.) Signed-off-by: Andrew D'Addesio --- libavcodec/opus_pvq.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libavcodec/opus_pvq.c b/libavcodec/opus_pvq.c index 2f7aa74..f18c010 100644 --- a/libavcodec/opus_pvq.c +++ b/libavcodec/opus_pvq.c @@ -643,7 +643,13 @@ static av_always_inline uint32_t quant_band_template(CeltPVQ *pvq, CeltFrame *f, } } else { inv = (b > 2 << 3 && f->remaining2 > 2 << 3) ? ff_opus_rc_dec_log(rc, 2) : 0; + + /* Don't put the channels out of phase if we are decoding to downmixed + * mono as this subjectively sounds bad (RFC 8251 section 10). */ + if (f->channels == 1) + inv = 0; } + itheta = 0; } qalloc = opus_rc_tell_frac(rc) - tell;