From patchwork Wed Jun 14 20:58:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Jones X-Patchwork-Id: 3978 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.22.4 with SMTP id 4csp482294vsw; Wed, 14 Jun 2017 13:59:10 -0700 (PDT) X-Received: by 10.28.86.194 with SMTP id k185mr1225764wmb.35.1497473949998; Wed, 14 Jun 2017 13:59:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1497473949; cv=none; d=google.com; s=arc-20160816; b=DoQg4InoO9ji61L7yj5m8RVA5V7xairXP0Khlktb3AS56qDO1qsExLGxpT8U63fLi0 ZAa+e3dUyXUVW2uGOQfHi4e/pdsDrHzOnRqIo1zYob7/KkcC4yLJkyEZiLzVPyM9rmh9 JOCPsMAMBoeQWGhXhjm6SCq3ixwrsvJ8DM6GBer/DYLmLSx3rl6YjE+9DaG+I+adRBek vgBhG1lvWZvPRth/wuG+63yUKBhinh5drg/DHl25WCgbIp2M6A69SjI4jLDg6fHN/Amg NKKz3gv0Yv/zImuIRcLIbu+DjYrPCExEvFE+oAX+qzF0l2w+JxG9vJIiztsGcDJV5X9P OuIw== 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:user-agent :mime-version:message-id:to:from:date:dkim-signature:delivered-to :arc-authentication-results; bh=ktu93a3F3zlSjHCSE05Zd/YHulwVsYq/j8EgnlylI60=; b=EoqkYcRRffA+nykb7bEFdcFlCUlMjBydBZjghzLqAXOZDuDnr/hYse2qfBAyrjAYTW b6diM5aitP2WeZURokmtmLEMgk9r2MPgmOJyh3drkexB+HYJzGNRGwUp+NkuQROYmc2B zg2KwYKHp9YfgADM/hJMcDEF/6eVdHn/JtiqPr7sIF1eWOwMi0yj9f7tR1t1Yc3CZ4iW drvNpiO2E0Eb1bwKDWpoIe5wG9d8PIsC4dL463MCsW3MsDYauwkKOzy3dB2QixEpYkoQ HKoMywkahGQUCWEcmkzJ7fGDfdah7NJRYuNGt3JK4Ku4HA88dEeQqsEmqEVUQbipwYKH ktIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.b=YQQg2heh; 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 g19si1096217wrb.24.2017.06.14.13.59.09; Wed, 14 Jun 2017 13:59:09 -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.b=YQQg2heh; 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 456CB68A248; Wed, 14 Jun 2017 23:59:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io0-f193.google.com (mail-io0-f193.google.com [209.85.223.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 953C768A233 for ; Wed, 14 Jun 2017 23:58:57 +0300 (EEST) Received: by mail-io0-f193.google.com with SMTP id j200so2062ioe.0 for ; Wed, 14 Jun 2017 13:59:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:mime-version:content-disposition :user-agent; bh=tgbBQlUp64HzgoqnsuGA6vDy6tCrDNNUpjtOJYQdAE8=; b=YQQg2hehZiqL3F2LYA99VCZaE44cNbpc9TEMHJbFynU6WDMfO1lsIKXGeWGb8/+aEc ffTvZJISvzZUa0uQwAjLZsy6W8SLf5rvHgUx0ur6Zr5TtjgkWF2UbxUremjOQA2pqrq+ DZiVLQJaxwu/M4NBkeTMVAWU5QoJm2+oVcLPLSFv1lEsWuGMdjIV6KDKrooaJ32rgkJ3 8KOYRJUJiy2gvk+XVfhzBfxnQW9XTozVKNZygy/moKy4GZM5I/IYH5VhG5gxIYC6isfC 7ZTnjU0xkTxa/zfp0x7Xkcc/NQlv/dKtECUBm8a5xWf9J3JELc3SY+TJ9d1cTroZYHYJ 7t1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition:user-agent; bh=tgbBQlUp64HzgoqnsuGA6vDy6tCrDNNUpjtOJYQdAE8=; b=P0aN1s6yfpC6xyYVau23drzopy5kS+01A6qI0TSMqf46koNuLzqgd5oghqQvUkQO+Z tf6OGV+PTN4AH29o2kJ6WnhAmdt5eBU2GXYI68pzTwQgcUQS2M1jtnCY6GRY9Y/Trs9/ pmqRUqBJ31dbKDSItIe4bCKjFFrH0Tqd5S6G4ZCh5/nnqEMDZPYb8tlLB49wEV3OJxKp 3aWle4cyG0chMhY1k3fT+STaxyoWesIcmyyUgw7sPZrDTTWvuKpy5WVlKrHQqZGXjail /mL8DUkzecFF4GMK5b4R7wyQNXx0/NSy/olBXL4cfaHxEKIkWU2IKfhhFvG9rf2MbRHt ekBw== X-Gm-Message-State: AKS2vOwVr3r+8Alp7yMWtUeu/m4o6e7oD58H8RsO2szIg7X7RCo5NGRx Ct2YdXsAEjtGSU7Z X-Received: by 10.107.200.209 with SMTP id y200mr2117530iof.16.1497473939073; Wed, 14 Jun 2017 13:58:59 -0700 (PDT) Received: from tdjones879 ([67.223.163.178]) by smtp.gmail.com with ESMTPSA id x13sm52031ita.5.2017.06.14.13.58.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Jun 2017 13:58:56 -0700 (PDT) Date: Wed, 14 Jun 2017 14:58:55 -0600 From: Tyler Jones To: ffmpeg-devel@ffmpeg.org Message-ID: <20170614205855.GA24181@tdjones879> MIME-Version: 1.0 User-Agent: Mutt/1.5.24 (2015-08-30) Subject: [FFmpeg-devel] [PATCH 2/3] avcodec/vorbisenc: Apply and output correct length window and mdct 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" Usage of blocksize, window, mode, and mdct indexes are switched from default 0 to a default of 1 to better align with specs. A flag of 0 should correspond with short windows, a flag of 1 with long. Signed-off-by: Tyler Jones --- libavcodec/vorbisenc.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/libavcodec/vorbisenc.c b/libavcodec/vorbisenc.c index 9b66d56..14de803 100644 --- a/libavcodec/vorbisenc.c +++ b/libavcodec/vorbisenc.c @@ -352,7 +352,7 @@ static int create_vorbis_context(vorbis_enc_context *venc, c->books[j] = floor_classes[i].nbooks[j]; } fc->multiplier = 2; - fc->rangebits = venc->log2_blocksize[0] - 1; + fc->rangebits = venc->log2_blocksize[1] - 1; fc->values = 2; for (i = 0; i < fc->partitions; i++) @@ -439,14 +439,17 @@ static int create_vorbis_context(vorbis_enc_context *venc, mc->angle[0] = 1; } - venc->nmodes = 1; + venc->nmodes = 2; venc->modes = av_malloc(sizeof(vorbis_enc_mode) * venc->nmodes); if (!venc->modes) return AVERROR(ENOMEM); - // single mode + // Short block venc->modes[0].blockflag = 0; venc->modes[0].mapping = 0; + // Long block + venc->modes[1].blockflag = 1; + venc->modes[1].mapping = 0; venc->have_saved = 0; venc->saved = av_malloc_array(sizeof(float) * venc->channels, (1 << venc->log2_blocksize[1]) / 2); @@ -997,9 +1000,9 @@ static int residue_encode(vorbis_enc_context *venc, vorbis_enc_residue *rc, static int apply_window_and_mdct(vorbis_enc_context *venc, int samples) { int channel; - const float * win = venc->win[0]; - int window_len = 1 << (venc->log2_blocksize[0] - 1); - float n = (float)(1 << venc->log2_blocksize[0]) / 4.0; + const float * win = venc->win[1]; + int window_len = 1 << (venc->log2_blocksize[1] - 1); + float n = (float)(1 << venc->log2_blocksize[1]) / 4.0; AVFloatDSPContext *fdsp = venc->fdsp; for (channel = 0; channel < venc->channels; channel++) { @@ -1013,7 +1016,7 @@ static int apply_window_and_mdct(vorbis_enc_context *venc, int samples) fdsp->vector_fmul_reverse(offset, offset, win, samples); fdsp->vector_fmul_scalar(offset, offset, 1/n, samples); - venc->mdct[0].mdct_calc(&venc->mdct[0], venc->coeffs + channel * window_len, + venc->mdct[1].mdct_calc(&venc->mdct[1], venc->coeffs + channel * window_len, venc->samples + channel * window_len * 2); } return 1; @@ -1134,13 +1137,13 @@ static int vorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, put_bits(&pb, 1, 0); // magic bit - put_bits(&pb, ilog(venc->nmodes - 1), 0); // 0 bits, the mode + put_bits(&pb, ilog(venc->nmodes - 1), 1); // Mode for current frame - mode = &venc->modes[0]; + mode = &venc->modes[1]; mapping = &venc->mappings[mode->mapping]; if (mode->blockflag) { - put_bits(&pb, 1, 0); - put_bits(&pb, 1, 0); + put_bits(&pb, 1, 1); // Previous windowflag + put_bits(&pb, 1, 1); // Next windowflag } for (i = 0; i < venc->channels; i++) {