[FFmpeg-devel] [DEVEL][PATCH] ffmpeg: fix channel_layout bug on non-default layout
Michael Niedermayer
michael at niedermayer.cc
Thu Nov 9 21:44:44 EET 2017
On Thu, Oct 05, 2017 at 12:37:13AM +0200, pkv.stream wrote:
> Le 04/10/2017 à 11:18 PM, Moritz Barsnick a écrit :
> >On Mon, Oct 02, 2017 at 21:50:50 +0200, pkv.stream wrote:
> >> if (!ost->stream_copy) {
> >>- char *sample_fmt = NULL;
> >>+
> >>+ char *sample_fmt = NULL;
> >This is very obviously a patch which will not be accepted.
> >
> >
> >>- MATCH_PER_STREAM_OPT(sample_fmts, str, sample_fmt, oc, st);
> >>+ AVDictionaryEntry *output_layout = av_dict_get(o->g->codec_opts, "channel_layout",NULL, AV_DICT_MATCH_CASE);
> >>+ if (output_layout)
> >>+ ost->enc_ctx->channel_layout = strtoull(output_layout->value, NULL, 10);
> >>+
> >>+ MATCH_PER_STREAM_OPT(sample_fmts, str, sample_fmt, oc, st);
> >Your indentation is totally wrong, and makes use of tabs. Please follow
> >the ffmpeg style.
>
> styling fixed
> thanks for your input
>
>
> ffmpeg_opt.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
> 2af07f4366efdfaf1018bb2ea29be672befe0823 0001-ffmpeg-fix-channel_layout-bug-on-non-default-layout.patch
> From 4ec55dc88923108132307b41300a1abddf32e6f7 Mon Sep 17 00:00:00 2001
> From: pkviet <pkv.stream at gmail.com>
> Date: Mon, 2 Oct 2017 11:14:31 +0200
> Subject: [PATCH] ffmpeg: fix channel_layout bug on non-default layout
>
> Fix for ticket 6706.
> The -channel_layout option was not working when the channel layout was not
> a default one (ex: for 4 channels, quad was interpreted as 4.0 which is
> the default layout for 4 channels; or octagonal interpreted as 7.1).
> This led to the spurious auto-insertion of an auto-resampler filter
> remapping the channels even if input and output had identical channel
> layouts.
> The fix operates by directly calling the channel layout if defined in
> options. If the layout is undefined, the default layout is selected as
> before the fix.
> ---
> ffmpeg_opt.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
> index 100fa76..cf5a63c 100644
> --- a/ffmpeg_opt.c
> +++ b/ffmpeg_opt.c
> @@ -1804,6 +1804,12 @@ static OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc, in
>
> MATCH_PER_STREAM_OPT(audio_channels, i, audio_enc->channels, oc, st);
>
> + AVDictionaryEntry *output_layout = av_dict_get(o->g->codec_opts,
> + "channel_layout",
> + NULL, AV_DICT_MATCH_CASE);
This doesnt look right
not an issue of the patch as such but
why is the channel_layout option per file and not per stream?
also currently mixed statemts and declarations arent allowed
> + if (output_layout)
> + ost->enc_ctx->channel_layout = strtoull(output_layout->value, NULL, 10);
audio_enc
> +
> MATCH_PER_STREAM_OPT(sample_fmts, str, sample_fmt, oc, st);
> if (sample_fmt &&
> (audio_enc->sample_fmt = av_get_sample_fmt(sample_fmt)) == AV_SAMPLE_FMT_NONE) {
> @@ -2524,7 +2530,10 @@ 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);
if () {
} else
is better as tat way future patches do not need to change existing
lines maing patches more readable if ever a line is added
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Everything should be made as simple as possible, but not simpler.
-- Albert Einstein
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20171109/ab604c48/attachment.sig>
More information about the ffmpeg-devel
mailing list