diff mbox series

[FFmpeg-devel] lavc/aacdec_template: Only warn once about unusual 7.1 encoding

Message ID CAB0OVGochi4b0YpH43Wibo2nztYkVrd2qZh8D0vohmdUfD5tLA@mail.gmail.com
State Accepted
Headers show
Series [FFmpeg-devel] lavc/aacdec_template: Only warn once about unusual 7.1 encoding
Related show

Checks

Context Check Description
andriy/ffmpeg-patchwork pending
andriy/ffmpeg-patchwork success Applied patch
andriy/ffmpeg-patchwork success Configure finished
andriy/ffmpeg-patchwork success Make finished
andriy/ffmpeg-patchwork fail Make fate failed

Commit Message

Carl Eugen Hoyos March 27, 2020, 6 p.m. UTC
Hi!

Attached patch reduces warnings when decoding a file with 7.1(wide)
aac encoding.

Please comment, Carl Eugen

Comments

Carl Eugen Hoyos March 27, 2020, 9:38 p.m. UTC | #1
Am Fr., 27. März 2020 um 19:00 Uhr schrieb Carl Eugen Hoyos
<ceffmpeg@gmail.com>:

> Attached patch reduces warnings when decoding a file with 7.1(wide)
> aac encoding.

New patch attached that does not lead to new crashes.

Please comment, Carl Eugen
Carl Eugen Hoyos April 3, 2020, 7:50 p.m. UTC | #2
Am Fr., 27. März 2020 um 22:38 Uhr schrieb Carl Eugen Hoyos
<ceffmpeg@gmail.com>:
>
> Am Fr., 27. März 2020 um 19:00 Uhr schrieb Carl Eugen Hoyos
> <ceffmpeg@gmail.com>:
>
> > Attached patch reduces warnings when decoding a file with 7.1(wide)
> > aac encoding.
>
> New patch attached that does not lead to new crashes.

Ping.

Carl Eugen
Carl Eugen Hoyos April 4, 2020, 9:59 p.m. UTC | #3
Am Fr., 27. März 2020 um 22:38 Uhr schrieb Carl Eugen Hoyos
<ceffmpeg@gmail.com>:
>
> Am Fr., 27. März 2020 um 19:00 Uhr schrieb Carl Eugen Hoyos
> <ceffmpeg@gmail.com>:
>
> > Attached patch reduces warnings when decoding a file with 7.1(wide)
> > aac encoding.
>
> New patch attached that does not lead to new crashes.

Patch applied.

Carl Eugen
diff mbox series

Patch

From fbbfb50842a5e47ac8aab34308c278d17df6ba12 Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
Date: Fri, 27 Mar 2020 18:52:16 +0100
Subject: [PATCH] lavc/aacdec_template: Only warn once about unusual 7.1
 encoding.

---
 libavcodec/aac.h             |  2 +-
 libavcodec/aacdec_template.c | 20 ++++++++++----------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/libavcodec/aac.h b/libavcodec/aac.h
index c2b9c980cb..d3355f1b73 100644
--- a/libavcodec/aac.h
+++ b/libavcodec/aac.h
@@ -356,7 +356,7 @@  struct AACContext {
     OutputConfiguration oc[2];
     int warned_num_aac_frames;
     int warned_960_sbr;
-
+    int warned_71_wide;
     int warned_gain_control;
 
     /* aacdec functions pointers */
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index bb11de3458..8f647667ee 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -520,14 +520,14 @@  static void flush(AVCodecContext *avctx)
  *
  * @return  Returns error status. 0 - OK, !0 - error
  */
-static int set_default_channel_config(AVCodecContext *avctx,
+static int set_default_channel_config(AACContext *ac,
                                       uint8_t (*layout_map)[3],
                                       int *tags,
                                       int channel_config)
 {
     if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
         channel_config > 12) {
-        av_log(avctx, AV_LOG_ERROR,
+        av_log(ac->avctx, AV_LOG_ERROR,
                "invalid default channel configuration (%d)\n",
                channel_config);
         return AVERROR_INVALIDDATA;
@@ -547,8 +547,8 @@  static int set_default_channel_config(AVCodecContext *avctx,
      * As actual intended 7.1(wide) streams are very rare, default to assuming a
      * 7.1 layout was intended.
      */
-    if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) {
-        av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
+    if (!ac->warned_71_wide++ && channel_config == 7 && ac->avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) {
+        av_log(ac->avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
                " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
                " according to the specification instead.\n", FF_COMPLIANCE_STRICT);
         layout_map[2][2] = AAC_CHANNEL_SIDE;
@@ -573,7 +573,7 @@  static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
 
         av_log(ac->avctx, AV_LOG_DEBUG, "mono with CPE\n");
 
-        if (set_default_channel_config(ac->avctx, layout_map,
+        if (set_default_channel_config(ac, layout_map,
                                        &layout_map_tags, 2) < 0)
             return NULL;
         if (output_configure(ac, layout_map, layout_map_tags,
@@ -592,7 +592,7 @@  static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
 
         av_log(ac->avctx, AV_LOG_DEBUG, "stereo with SCE\n");
 
-        if (set_default_channel_config(ac->avctx, layout_map,
+        if (set_default_channel_config(ac, layout_map,
                                        &layout_map_tags, 1) < 0)
             return NULL;
         if (output_configure(ac, layout_map, layout_map_tags,
@@ -841,7 +841,7 @@  static int decode_ga_specific_config(AACContext *ac, AVCodecContext *avctx,
         if (tags < 0)
             return tags;
     } else {
-        if ((ret = set_default_channel_config(avctx, layout_map,
+        if ((ret = set_default_channel_config(ac, layout_map,
                                               &tags, channel_config)))
             return ret;
     }
@@ -937,7 +937,7 @@  static int decode_eld_specific_config(AACContext *ac, AVCodecContext *avctx,
         skip_bits_long(gb, 8 * len);
     }
 
-    if ((ret = set_default_channel_config(avctx, layout_map,
+    if ((ret = set_default_channel_config(ac, layout_map,
                                           &tags, channel_config)))
         return ret;
 
@@ -1200,7 +1200,7 @@  static av_cold int aac_decode_init(AVCodecContext *avctx)
         ac->oc[1].m4ac.chan_config = i;
 
         if (ac->oc[1].m4ac.chan_config) {
-            int ret = set_default_channel_config(avctx, layout_map,
+            int ret = set_default_channel_config(ac, layout_map,
                 &layout_map_tags, ac->oc[1].m4ac.chan_config);
             if (!ret)
                 output_configure(ac, layout_map, layout_map_tags,
@@ -3002,7 +3002,7 @@  static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
         push_output_configuration(ac);
         if (hdr_info.chan_config) {
             ac->oc[1].m4ac.chan_config = hdr_info.chan_config;
-            if ((ret = set_default_channel_config(ac->avctx,
+            if ((ret = set_default_channel_config(ac,
                                                   layout_map,
                                                   &layout_map_tags,
                                                   hdr_info.chan_config)) < 0)
-- 
2.24.1