Philip de Nier <[email protected]> added the comment:

Patch #2:

Support non-integer audio bits per sample, e.g. 20 bps. Log warning if the bits
per sample is >32

_____________________________________________________
FFmpeg issue tracker <[email protected]>
<https://roundup.ffmpeg.org/roundup/ffmpeg/issue1470>
_____________________________________________________
Index: libavformat/mxfdec.c
===================================================================
--- libavformat/mxfdec.c	(revision 21481)
+++ libavformat/mxfdec.c	(working copy)
@@ -812,15 +812,19 @@
             st->codec->sample_rate = descriptor->sample_rate.num / descriptor->sample_rate.den;
             /* TODO: implement CODEC_ID_RAWAUDIO */
             if (st->codec->codec_id == CODEC_ID_PCM_S16LE) {
-                if (descriptor->bits_per_sample == 24)
+                if (descriptor->bits_per_sample > 32)
+                    av_log(mxf->fc, AV_LOG_WARNING, ">32 bits per audio sample not supported\n");
+                else if (descriptor->bits_per_sample > 24)
+                    st->codec->codec_id = CODEC_ID_PCM_S32LE;
+                else if (descriptor->bits_per_sample > 16)
                     st->codec->codec_id = CODEC_ID_PCM_S24LE;
-                else if (descriptor->bits_per_sample == 32)
-                    st->codec->codec_id = CODEC_ID_PCM_S32LE;
             } else if (st->codec->codec_id == CODEC_ID_PCM_S16BE) {
-                if (descriptor->bits_per_sample == 24)
+                if (descriptor->bits_per_sample > 32)
+                    av_log(mxf->fc, AV_LOG_WARNING, ">32 bits per audio sample not supported\n");
+                else if (descriptor->bits_per_sample > 24)
+                    st->codec->codec_id = CODEC_ID_PCM_S32BE;
+                else if (descriptor->bits_per_sample > 16)
                     st->codec->codec_id = CODEC_ID_PCM_S24BE;
-                else if (descriptor->bits_per_sample == 32)
-                    st->codec->codec_id = CODEC_ID_PCM_S32BE;
             } else if (st->codec->codec_id == CODEC_ID_MP2) {
                 st->need_parsing = AVSTREAM_PARSE_FULL;
             }

Reply via email to