Michael, Nicolas, Do you think this patch is now ready to be applied? Or would you like me to make any further changes?
Thanks, Marcin On Tue, Jul 10, 2018 at 10:34 AM Marcin Gorzel <gor...@google.com> wrote: > Hi Michael, > > I think I know where the misunderstanding could be. > > The main changes in my patch are: > > rematrix.c:389 and rematrix_int.c:36: > > Before: > int nb_in = av_get_channel_layout_nb_channels(s->in_ch_layout) > > After: > int nb_in = s->in_ch_layout != 0 > ? av_get_channel_layout_nb_channels(s->in_ch_layout) > : s->user_in_ch_count; > > However, the change you are referring to (rematrix.c:72) has been made > just to match the above changes (although you are right that functionally > this particular one change should be the same). > I just thought that > since av_get_channel_layout_nb_channels(s->user_in_ch_layout) was > originally used, there may be preference to rely on the channel layout > first (if available) before falling back to the user channel count. > Please let me know if that makes sense. > > Each field has a defined range in libswresample/options.c >> the AVOption code checks this when setting the field > > >> If the value in the table is wrong, thats what should be fixed. >> If something sets it ignoring the value, that code should be fixed. >> i dont think we should add a check without first understanding what >> sets it outside the range > > > I believe the check if the number of channels is valid is made in > libavcodec/utils.c:676. > However, the output error message is quite general and possibly not very > helpful: > > Error while opening decoder for input stream #0:0 : Invalid argument > > That's why in this patch I've added an av_log in the utils.c so that the > output error message is more useful: > > [pcm_s16le @ 0x55fd9950d5c0] Unsupported number of channels: 72. > Stream mapping: > Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native)) > Error while opening decoder for input stream #0:0 : Invalid argument > > Re. the additional checks in the swresample.c, if you think they are > unnecessary, I will happily remove them from this patch. Please let me know! > > Regards, > > Marcin > > On Mon, Jul 9, 2018 at 9:11 PM Michael Niedermayer <mich...@niedermayer.cc> > wrote: > >> On Mon, Jul 09, 2018 at 01:55:37PM +0100, Marcin Gorzel wrote: >> > Thank you for your comments Michael and apologies if my commit message >> was >> > inadequate (I am new to this forum and this is my first patch). >> > >> > The bug can be reproduced when downmixing audio with more than 8 >> channels, >> > for example: >> > >> > ./ffmpeg -i input_9ch.wav -filter:a:0 >> > pan="6c|c0=0.166*c0+0.166*c6|c1=c1|c2=c2|c3=c3|c4=c4|c5=c5" -y >> > output_6ch.wav >> > >> > The result is noisy output in the first channel. >> > >> > #6790 applies the fix to the swr_set_matrix() method but a similar fix >> > needs to be applied to the swri_rematrix_init() >> > and swri_rematrix_init_x86() as well. >> > >> >> > Since currently the number of in/out channels is determined based on the >> > channel layout (av_get_channel_layout_nb_channels(s->in_ch_layout)) my >> > patch first checks if the channel layout is non-zero, and if it 0, then >> it >> > falls back to using the (user) channel count instead. >> >> theres the layout and the channel count >> >> before one is checked and used and if possible and if not the other >> afterwards one is checked and used and if possible and if not the other >> >> the patch seems to just check the other field >> I dont know how to match this up with the explanation of what this patch >> does. >> Quite possibly iam missing something >> >> >> > >> > Re. FFMIN: Agreed. I could add checks if the channel count is within >> > supported range. For example if s->user_out_ch_count < SWR_CH_MAX and >> > s->user_in_ch_count >> > < SWR_CH_MAX inside swr_init() method (for example, similarly as is >> done in >> > swresample.c:178)? >> >> Each field has a defined range in libswresample/options.c >> the AVOption code checks this when setting the field >> >> If the value in the table is wrong, thats what should be fixed. >> If something sets it ignoring the value, that code should be fixed. >> i dont think we should add a check without first understanding what >> sets it outside the range >> >> >> >> >> >> > >> > Thanks, >> > >> > Marcin >> > >> > On Sat, Jul 7, 2018 at 2:04 AM Michael Niedermayer >> <mich...@niedermayer.cc> >> > wrote: >> > >> > > On Fri, Jul 06, 2018 at 03:15:58PM +0100, Marcin Gorzel wrote: >> > > > Rematrixing supports up to 64 channels but there is only a limited >> > > number of channel layouts defined. Currently, in/out channel count is >> > > obtained from the channel layout so if the channel layout is undefined >> > > (e.g. for 9, 10, 11 channels etc.) the in/out channel count will be 0 >> and >> > > the rematrixing will fail. This change adds a check if the channel >> layout >> > > is non-zero, and if not, prefers to use the in|out_ch_count instead. >> This >> > > seems to be related to ticket #6790. >> > > > --- >> > > > libswresample/rematrix.c | 18 ++++++++++++------ >> > > > libswresample/x86/rematrix_init.c | 8 ++++++-- >> > > > 2 files changed, 18 insertions(+), 8 deletions(-) >> > > >> > > Iam not completely sure what this is trying to do exactly >> > > but the commit message inadequently describes it. >> > > >> > > #6790 is already fixed, the commit message doesnt explain how its >> related >> > > >> > > also the FFMIN is wrong. If the user provided a value outside >> > > the supported range the code must have failed with an error >> > > already or something is not working correctly. >> > > >> > > How can the bug this fixes be reproduced ? >> > > >> > > Thanks >> > > >> > > [...] >> > > >> > > -- >> > > Michael GnuPG fingerprint: >> 9FF2128B147EF6730BADF133611EC787040B0FAB >> > > >> > > I know you won't believe me, but the highest form of Human Excellence >> is >> > > to question oneself and others. -- Socrates >> > > _______________________________________________ >> > > ffmpeg-devel mailing list >> > > ffmpeg-devel@ffmpeg.org >> > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > > >> > >> > >> > -- >> > >> > Marcin Gorzel | Software Engineer | gor...@google.com | >> > _______________________________________________ >> > ffmpeg-devel mailing list >> > ffmpeg-devel@ffmpeg.org >> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> -- >> Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB >> >> Everything should be made as simple as possible, but not simpler. >> -- Albert Einstein >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > > > -- > > Marcin Gorzel | Software Engineer | gor...@google.com | > -- Marcin Gorzel | Software Engineer | gor...@google.com | _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel