On Sun, Nov 12, 2017 at 05:07:04PM +0100, Kv Pham wrote: > Le 12 nov. 2017 5:01 PM, "Michael Niedermayer" <mich...@niedermayer.cc> a > écrit : > > On Sat, Nov 11, 2017 at 02:15:25AM +0100, pkv.stream wrote: > > Le 11/11/2017 à 1:07 AM, Michael Niedermayer a écrit : > > >On Fri, Nov 10, 2017 at 10:27:48PM +0100, pkv.stream wrote: > > >>Le 10/11/2017 à 1:12 AM, Michael Niedermayer a écrit : > > >>>On Thu, Nov 09, 2017 at 09:37:33PM +0100, pkv.stream wrote: > > >>>>Hi Michael, > > >>>> > > >>>>>> 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.str...@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? > > >>>>just my ignorance; do you mean this is not the right way to retrieve > > >>>>the channel_layout option from an audio stream ? > > >>>I think there is more buggy with how the channel_layout is handled > > >>> > > >>>try this: > > >>>./ffmpeg -i ~/videos/matrixbench_mpeg2.mpg -channel_layout 5 test.wav > > >>>and this: > > >>>./ffmpeg -i ~/videos/matrixbench_mpeg2.mpg -channel_layout:a 5 test.wav > > >>> > > >>>while it may appear that the are both working this is deceiving. > > >>>I think only the channel number gets actually used in the 2nd case > > >>> > > >>>Look at what your code with av_dict_get() reads. > > >>>It does not obtain the 5 in the 2nd case > > >>ok I fixed that by using the flag AV_DICT_IGNORE_SUFFIX ; now > > >>-channel_layout:a works as expected. > > >>I fixed also all the styling issues you spotted (mixed declarations, > > >>{} for if etc). > > >> > > >>Still not understanding your initial comment though : > > >>'why is the channel_layout option per file and not per stream?' > > >> > > >>do you mean o->g->codec_opts is not where I should retrieve the > > >>channel_layout ? if not where from ? > > >> > > >>Thanks > > >> > > >>>[...] > > >>> > > >>> > > >>>_______________________________________________ > > >>>ffmpeg-devel mailing list > > >>>ffmpeg-devel@ffmpeg.org > > >>>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > >> > > >> ffmpeg_opt.c | 12 ++++++++++-- > > >> 1 file changed, 10 insertions(+), 2 deletions(-) > > >>849898d28e989ffa5cc598c6fe4d43847b636132 0001-ffmpeg-fix-channel_ > layout-bug-on-non-default-layout.patch > > >> From 6d4f1c14135f9473b77e1c649d0e7bbaeba00a50 Mon Sep 17 00:00:00 2001 > > >>From: pkviet <pkv.str...@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. > > >>--- > > >> fftools/ffmpeg_opt.c | 12 ++++++++++-- > > >> 1 file changed, 10 insertions(+), 2 deletions(-) > > >> > > >>diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c > > >>index ca6f10d..cb25d7b 100644 > > >>--- a/fftools/ffmpeg_opt.c > > >>+++ b/fftools/ffmpeg_opt.c > > >>@@ -1785,6 +1785,7 @@ static OutputStream *new_audio_stream(OptionsContext > *o, AVFormatContext *oc, in > > >> AVStream *st; > > >> OutputStream *ost; > > >> AVCodecContext *audio_enc; > > >>+ AVDictionaryEntry *output_layout; > > >> ost = new_output_stream(o, oc, AVMEDIA_TYPE_AUDIO, source_index); > > >> st = ost->st; > > >>@@ -1799,7 +1800,10 @@ 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); > > >>- > > >>+ output_layout = av_dict_get(o->g->codec_opts,"channel_layout", > NULL, AV_DICT_IGNORE_SUFFIX); > > >i didnt try but i assume > > >this would fail if there are 2 audio streams each with different > > >layout > > > > ah ok, I understand now; thanks for elaborating. > > i tested with two output streams, it's not failing and working correctly. > > > > ex: ffmpeg -channel_layout octagonal -i source.wav -c:a pcm_s16le > > -channel_layout octagonal out1.wav -c:a pcm_s16le -channel_layout > > quad out2.wav > > > > (if I pick layout 0x5 as in your examples it fails because the > > rematrix is not supported, so this is expected behavior although > > failing; but with pan filter it eventually works) > > > > Tested also with two source streams used for two ouputs. Working too. > > have you tried with different layouts for each stream ? > > > Yes. > Different layouts for input streams as well as output streams. > > Other tests to do ?
just test with 2 streams: ./ffmpeg -i ~/videos/matrixbench_mpeg2.mpg -map 0:a -map 0:a -channel_layout:a:0 quad -channel_layout:a:1 5.1 -y test.nut av_dict_get() will likely return the same layout twice instead of the correct layout for each stream [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB There will always be a question for which you do not know the correct answer.
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel