From patchwork Sun Nov 19 10:01:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "pkv.stream" X-Patchwork-Id: 6193 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp2648902jah; Sun, 19 Nov 2017 02:01:57 -0800 (PST) X-Google-Smtp-Source: AGs4zMaPAMWM8wRvga8BXkz5fS682sbUJUFnjaPabfG3mLOR0Zv3H0ZnckIo6TjLRyem9XGbS09r X-Received: by 10.28.155.200 with SMTP id d191mr8734725wme.31.1511085716959; Sun, 19 Nov 2017 02:01:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511085716; cv=none; d=google.com; s=arc-20160816; b=AGw3N7HUugjMzhW0dWNXhmzv4xKlf9gvnCXtrn2oFnmKWnDKji7N0hBIXawaFSFtvn Uo9I7XdVYgHi4/JhTA6B1hVLe9VqP/te0+SQ77lz2LajSPF0MHrhAOa2dpzvSvgrSTgX tDZk1UoXHNPlpegwQWE00BpG8lVilajQrG+i0h1PtteeXUo9AUBnqSLun7kQQYKNcSP8 6UanpQ51Dt1R+rAbqMeh1LLsLMfGGsZerp2ppLS6tLgnd5ziYvu3rOPqD4mJxLAG7/LC NbBr5um3xWYBOBMsT+wWs5XFimCvE7S7uWXBaJQo3U7+BO0As3ZzvhWJqiiO4JtpDO5F tIVA== 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:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:dkim-signature:delivered-to :arc-authentication-results; bh=kRMR0nVqgZv91wZkgrQTMNkDEY3DpL3UUWC3uXWP3bE=; b=fj6EgmNd9LHemFaQBd95qJbaCtPluEsE5zKPDf4ulo3zD4GwxsVYCs8udej9EiPJ7o qumd2NjR4o9KAWz3IAlDWmcn5yyvkT8IWm28lhv+hW1I0RFLk9d4nlkiC97dD3Om4VDJ 8/qd+Q9a/NTCCgKhzol/FUesM1FaMMvpI9BRMgcMBQ6a3g0j4fEDjIuBXWt9c6UWgn00 Lkbz+MGFEya248uYuVUHxFYoenQEPixEqqw4X5iHy/UDFoXQ6gb5OtYb0Kl1Ujsc8vw0 b15uKaMDNJaGkg4UCCsp0wQIrnXWkTmnsBHLBaDRMH0dYp19KLBQu9iRaj0fJ67Brfk4 xrlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=iLbVlOUd; 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 j10si5554169wma.161.2017.11.19.02.01.56; Sun, 19 Nov 2017 02:01:56 -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=iLbVlOUd; 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 E2588689BC6; Sun, 19 Nov 2017 12:01:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6C755680C81 for ; Sun, 19 Nov 2017 12:01:24 +0200 (EET) Received: by mail-wm0-f47.google.com with SMTP id 5so12386970wmk.1 for ; Sun, 19 Nov 2017 02:01:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language; bh=9WKotaF/IRrjJoDGZmNMoP3sj8vxtXP9b4iwki7KqLQ=; b=iLbVlOUdvMqF3VYvj8ZsbLjNzXtxOkhiDvtcu6/8czn3hrFcuNEBZwY1Ku/qd/hWhe zpf/E0QsUJxGoYv+/XAKZFxNHvUNM3wL4vkiopbYpJT5OE4SslTL1ByymQA+mf2F/dKh EXXQHAC5p7H5Cr0PD2TljV3Ke16AuQ7ceflsUjB5qC8gzhaogOSV+8t01kDMCTUgKj6H yUy9/7nSH8KvEj9p5qMx/IkEw54e45aXlq/238EX9/jkN5Ea8p1x1gy8Mq9UbAfBP1WI FZYj87r0xR3a3fZyuSdP86kzRQeRUVIR6SyUIN4vx2L7YL9vD8itlDaQG4MCRMPhxkm2 fVjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=9WKotaF/IRrjJoDGZmNMoP3sj8vxtXP9b4iwki7KqLQ=; b=IW2RK9flhPeeXEcP9Nrh3tjSz6as74EwyUHFnw1N7NgOBnJUsIO3z4wgaSX+VXV22d 1kZ0AB4sYbrn4sSb/u3MlF7wui4Z1XkOcch2MiZ+A7loGwC6VXIvh3hbosoxgbYqKgUi lAYYUzc8PY2tTiP9bQkw49ohZt1us1TMlJLp3qPOMrSaO9Y4lqcvWc95qwFQf82C1ytE 0mHBTE/nnyi7jXJOrZa1X+qg1gVh18LQhufelgXCyu43Z+fZPCRLzYV8gq34Ejzs5E/b cyRuYMuCKgm+AcLLOaw77rl6h5tL5R4qUKkiRV6ru3oNfjRWaFitEB0UI6h1EPHQ6zrt tr1Q== X-Gm-Message-State: AJaThX4sBNkCfoJXwgFv8VQ5ShVWPCulsJ/3z2lijz2ngSN/kUA9DCMJ P4cwLIajmhMkVwYGCXv/Q6EIvg== X-Received: by 10.80.132.101 with SMTP id 92mr15059564edp.165.1511085700873; Sun, 19 Nov 2017 02:01:40 -0800 (PST) Received: from [192.168.0.2] ([176.159.7.188]) by smtp.googlemail.com with ESMTPSA id h2sm5964043edc.89.2017.11.19.02.01.40 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 19 Nov 2017 02:01:40 -0800 (PST) To: ffmpeg-devel@ffmpeg.org References: <20171111000728.GZ6009@nb4> <6111ca51-c953-284a-9d57-905bf8b5fcf1@gmail.com> <20171112160048.GQ6009@nb4> <20171112163827.GT6009@nb4> <19c44254-1279-b685-3f46-0f03b2fa7a07@gmail.com> <20171114121355.GB6009@nb4> <16cfbba9-053d-0958-0042-6487d93301e9@gmail.com> <20171116014847.GT6009@nb4> <148ce8f6-476b-a8b1-a7ae-d44cd2e44316@gmail.com> <20171118202649.GC4903@nb4> From: "pkv.stream" Message-ID: <425f2195-fc3d-9325-df02-796dae5289e3@gmail.com> Date: Sun, 19 Nov 2017 11:01:37 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171118202649.GC4903@nb4> Content-Language: fr Subject: [FFmpeg-devel] [DEVEL][PATCH 2/2] ffmpeg: fix ticket 6706 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 f94f2e8c8878d6dbda540b19d90c2b8f1ba00850 Mon Sep 17 00:00:00 2001 From: pkviet Date: Sat, 18 Nov 2017 00:26:50 +0100 Subject: [PATCH 2/2] ffmpeg: fix ticket 6706 Fix regression with channel_layout option which is not passed correctly from output streams to filters when the channel layout is not a default one. Signed-off-by: pkviet --- fftools/ffmpeg.h | 3 +++ fftools/ffmpeg_opt.c | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index e0977e1..5c45df4 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -121,6 +121,8 @@ typedef struct OptionsContext { int nb_frame_sizes; SpecifierOpt *frame_pix_fmts; int nb_frame_pix_fmts; + SpecifierOpt *channel_layouts; + int nb_channel_layouts; /* input options */ int64_t input_ts_offset; @@ -624,6 +626,7 @@ extern int vstats_version; extern const AVIOInterruptCB int_cb; extern const OptionDef options[]; +extern const OptionDef channel_layout_option[]; extern const HWAccel hwaccels[]; extern AVBufferRef *hw_device_ctx; #if CONFIG_QSV diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 47d3841..7b2c18c 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1803,6 +1803,7 @@ static OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc, in char *sample_fmt = NULL; MATCH_PER_STREAM_OPT(audio_channels, i, audio_enc->channels, oc, st); + MATCH_PER_STREAM_OPT(channel_layouts, ui64, audio_enc->channel_layout, oc, st); MATCH_PER_STREAM_OPT(sample_fmts, str, sample_fmt, oc, st); if (sample_fmt && @@ -2527,7 +2528,11 @@ loop_end: (count + 1) * sizeof(*f->sample_rates)); } if (ost->enc_ctx->channels) { - f->channel_layout = av_get_default_channel_layout(ost->enc_ctx->channels); + if (ost->enc_ctx->channel_layout) { + f->channel_layout = ost->enc_ctx->channel_layout; + } else { + f->channel_layout = av_get_default_channel_layout(ost->enc_ctx->channels); + } } else if (ost->enc->channel_layouts) { count = 0; while (ost->enc->channel_layouts[count]) @@ -3104,7 +3109,7 @@ static int opt_channel_layout(void *optctx, const char *opt, const char *arg) char layout_str[32]; char *stream_str; char *ac_str; - int ret, channels, ac_str_size; + int ret, channels, ac_str_size, stream_str_size; uint64_t layout; layout = av_get_channel_layout(arg); @@ -3116,12 +3121,30 @@ static int opt_channel_layout(void *optctx, const char *opt, const char *arg) ret = opt_default_new(o, opt, layout_str); if (ret < 0) return ret; + stream_str = strchr(opt, ':'); + stream_str_size = (stream_str ? strlen(stream_str) : 0); + /* set 'channel_layout_uint64' option which stores channel_layout (as uint64 channel mask) + * in SpecifierOpt, enabling access to channel layout through MATCH_PER_STREAM_OPT + */ + ac_str_size = 22 + stream_str_size; + ac_str = av_mallocz(ac_str_size); + if (!ac_str) { + return AVERROR(ENOMEM); + } + av_strlcpy(ac_str, "channel_layout_uint64", 22); + if (stream_str) { + av_strlcat(ac_str, stream_str, ac_str_size); + } + ret = parse_option(o, ac_str, layout_str, options); + av_free(ac_str); + if (ret < 0) { + return ret; + } /* set 'ac' option based on channel layout */ channels = av_get_channel_layout_nb_channels(layout); snprintf(layout_str, sizeof(layout_str), "%d", channels); - stream_str = strchr(opt, ':'); - ac_str_size = 3 + (stream_str ? strlen(stream_str) : 0); + ac_str_size = 3 + stream_str_size; ac_str = av_mallocz(ac_str_size); if (!ac_str) return AVERROR(ENOMEM); @@ -3674,6 +3697,10 @@ const OptionDef options[] = { { "channel_layout", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_channel_layout }, "set channel layout", "layout" }, + { "channel_layout_uint64", OPT_AUDIO | HAS_ARG | OPT_INT64 | OPT_SPEC | + OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(channel_layouts) }, + "set channel layout with uint64" + "(for more syntax choices use instead the channel_layout option)", "layout_uint64" }, // allows storing of option in SpecifierOpt { "af", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_filters }, "set audio filters", "filter_graph" }, { "guess_layout_max", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(guess_layout_max) },