On 11/14/2024 1:37 AM, Scott Theisen wrote:
When attempting to upstream this MythTV change in September 2022, it was 
recommended to
use AV_CHANNEL_ORDER_CUSTOM with two AV_CHAN_FRONT_CENTER channels. See
https://patchwork.ffmpeg.org/project/ffmpeg/patch/20220921192611.3241-1-scott.the....@gmail.com/
---
  libavcodec/audiotoolboxdec.c    |  4 ++--
  libavcodec/mpegaudio_parser.c   | 12 +++++++++---
  libavcodec/mpegaudiodecheader.c |  4 +++-
  libavcodec/mpegaudiodecheader.h |  2 +-
  tests/ref/fate/pva-demux        |  2 +-
  5 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/libavcodec/audiotoolboxdec.c b/libavcodec/audiotoolboxdec.c
index 0f7ce8e4eb..d279d7bbc4 100644
--- a/libavcodec/audiotoolboxdec.c
+++ b/libavcodec/audiotoolboxdec.c
@@ -346,10 +346,10 @@ static av_cold int ffat_create_decoder(AVCodecContext 
*avctx,
                  avctx->codec_id == AV_CODEC_ID_MP2 ||
                  avctx->codec_id == AV_CODEC_ID_MP3)) {
          enum AVCodecID codec_id;
-        int bit_rate;
+        int bit_rate, dual_mono;
          if (ff_mpa_decode_header(AV_RB32(pkt->data), &avctx->sample_rate,
                                   &in_format.mChannelsPerFrame, 
&avctx->frame_size,
-                                 &bit_rate, &codec_id) < 0)
+                                 &bit_rate, &codec_id, &dual_mono) < 0)
              return AVERROR_INVALIDDATA;
          avctx->bit_rate = bit_rate;
          in_format.mSampleRate = avctx->sample_rate;
diff --git a/libavcodec/mpegaudio_parser.c b/libavcodec/mpegaudio_parser.c
index d54366f10a..d1a4ee6434 100644
--- a/libavcodec/mpegaudio_parser.c
+++ b/libavcodec/mpegaudio_parser.c
@@ -65,12 +65,12 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
              }
          }else{
              while(i<buf_size){
-                int ret, sr, channels, bit_rate, frame_size;
+                int ret, sr, channels, bit_rate, frame_size, dual_mono;
                  enum AVCodecID codec_id = avctx->codec_id;
state= (state<<8) + buf[i++]; - ret = ff_mpa_decode_header(state, &sr, &channels, &frame_size, &bit_rate, &codec_id);
+                ret = ff_mpa_decode_header(state, &sr, &channels, &frame_size, 
&bit_rate, &codec_id, &dual_mono);
                  if (ret < 4) {
                      if (i > 4)
                          s->header_count = -2;
@@ -85,7 +85,13 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
                      if (s->header_count > header_threshold) {
                          avctx->sample_rate= sr;
                          av_channel_layout_uninit(&avctx->ch_layout);
-                        av_channel_layout_default(&avctx->ch_layout, channels);
+                        if (dual_mono) {
+                            av_channel_layout_custom_init(&avctx->ch_layout, 
2);
+                            avctx->ch_layout.u.map[0].id = 
AV_CHAN_FRONT_CENTER;
+                            avctx->ch_layout.u.map[1].id = 
AV_CHAN_FRONT_CENTER;

Kind of sucks we have used FC to represent mono for so long that we can't cleanly introduce a new channel that's strictly mono (with no speaker location implied) and give it meaningful use.

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to