diff mbox series

[FFmpeg-devel] avfilter/src_movie: support unknown channel layouts

Message ID CAPYw7P5CV0zX-w6v0Y+ok9OgXRbfJ4iih_YNtP6jQAN2b4E4Rw@mail.gmail.com
State New
Headers show
Series [FFmpeg-devel] avfilter/src_movie: support unknown channel layouts | expand

Checks

Context Check Description
yinshiyou/configure_loongarch64 warning Failed to apply patch
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Paul B Mahol Oct. 31, 2022, 11:53 a.m. UTC
Patch attached.

Comments

Andreas Rheinhardt Oct. 31, 2022, 12:15 p.m. UTC | #1
Paul B Mahol:
> -        av_log(log_ctx, AV_LOG_ERROR,
> +        char *cl_name;
> +
> +        av_log(log_ctx, AV_LOG_WARNING,
>                 "Channel layout is not set in stream %d, and could not "
>                 "be guessed from the number of channels (%d)\n",
>                 st_index, dec_par->ch_layout.nb_channels);
> -        return AVERROR(EINVAL);
> +        cl_name = av_asprintf("%dC", dec_par->ch_layout.nb_channels);
> +        av_channel_layout_from_string(&chl, cl_name);
> +        free(cl_name);

1. Wrong deallocator.
2. The allocation is completely unnecessary: One can just use snprintf
with a big enough (yet still small) buffer.
3. But even that is unnecessary: Just set chl = (AVChannelLayout){
.order = AV_CHANNEL_ORDER_UNSPEC, .nb_channels =
dec_par->ch_layout.nb_channels }.

- Andreas
James Almer Oct. 31, 2022, 7:40 p.m. UTC | #2
On 10/31/2022 9:15 AM, Andreas Rheinhardt wrote:
> Paul B Mahol:
>> -        av_log(log_ctx, AV_LOG_ERROR,
>> +        char *cl_name;
>> +
>> +        av_log(log_ctx, AV_LOG_WARNING,
>>                  "Channel layout is not set in stream %d, and could not "
>>                  "be guessed from the number of channels (%d)\n",
>>                  st_index, dec_par->ch_layout.nb_channels);
>> -        return AVERROR(EINVAL);
>> +        cl_name = av_asprintf("%dC", dec_par->ch_layout.nb_channels);
>> +        av_channel_layout_from_string(&chl, cl_name);
>> +        free(cl_name);
> 
> 1. Wrong deallocator.
> 2. The allocation is completely unnecessary: One can just use snprintf
> with a big enough (yet still small) buffer.
> 3. But even that is unnecessary: Just set chl = (AVChannelLayout){
> .order = AV_CHANNEL_ORDER_UNSPEC, .nb_channels =
> dec_par->ch_layout.nb_channels }.

He doesn't even need to do that because it's already set. 
av_channel_layout_default() will give set the output layout as an UNSPEC 
one with nb_channels amount of channels if it can't find a named native 
layout for it.

There is however a problem with this patch as is, and it's the next 
printed warning now that he removed the return. After this change it 
will mention a layout was guessed when one wasn't. So this patch should 
simply change the "return AVERROR(EINVAL)" into another "return 
av_channel_layout_copy(&dec_par->ch_layout, &chl);"
Paul B Mahol Oct. 31, 2022, 8:23 p.m. UTC | #3
On 10/31/22, Paul B Mahol <onemda@gmail.com> wrote:
> Patch attached.
>

Fixed patch attached.
Paul B Mahol Nov. 1, 2022, 3:25 p.m. UTC | #4
On 10/31/22, Paul B Mahol <onemda@gmail.com> wrote:
> On 10/31/22, Paul B Mahol <onemda@gmail.com> wrote:
>> Patch attached.
>>
>
> Fixed patch attached.
>

Will apply immediately.
diff mbox series

Patch

From 975a677906256f5f7a6da876a1eede21c5cb2a8e Mon Sep 17 00:00:00 2001
From: Paul B Mahol <onemda@gmail.com>
Date: Mon, 31 Oct 2022 12:55:17 +0100
Subject: [PATCH] avfilter/src_movie: support unknown channel layouts

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavfilter/src_movie.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c
index 711854c23c..2e30e54ad2 100644
--- a/libavfilter/src_movie.c
+++ b/libavfilter/src_movie.c
@@ -196,11 +196,15 @@  static int guess_channel_layout(MovieStream *st, int st_index, void *log_ctx)
     av_channel_layout_default(&chl, dec_par->ch_layout.nb_channels);
 
     if (!KNOWN(&chl)) {
-        av_log(log_ctx, AV_LOG_ERROR,
+        char *cl_name;
+
+        av_log(log_ctx, AV_LOG_WARNING,
                "Channel layout is not set in stream %d, and could not "
                "be guessed from the number of channels (%d)\n",
                st_index, dec_par->ch_layout.nb_channels);
-        return AVERROR(EINVAL);
+        cl_name = av_asprintf("%dC", dec_par->ch_layout.nb_channels);
+        av_channel_layout_from_string(&chl, cl_name);
+        free(cl_name);
     }
 
     av_channel_layout_describe(&chl, buf, sizeof(buf));
-- 
2.37.2