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

Patch #1:
Differentiate between the audio sampling rate and container sample rate. The
audio sampling rate is used to calculate the audio stream's sample rate.

_____________________________________________________
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)
@@ -91,6 +91,7 @@
     UID essence_container_ul;
     UID essence_codec_ul;
     AVRational sample_rate;
+    AVRational audio_sampling_rate;
     AVRational aspect_ratio;
     int width;
     int height;
@@ -574,8 +575,8 @@
         descriptor->aspect_ratio.den = get_be32(pb);
         break;
     case 0x3D03:
-        descriptor->sample_rate.num = get_be32(pb);
-        descriptor->sample_rate.den = get_be32(pb);
+        descriptor->audio_sampling_rate.num = get_be32(pb);
+        descriptor->audio_sampling_rate.den = get_be32(pb);
         break;
     case 0x3D06: /* SoundEssenceCompression */
         get_buffer(pb, descriptor->essence_codec_ul, 16);
@@ -589,6 +590,10 @@
     case 0x3401:
         mxf_read_pixel_layout(pb, descriptor);
         break;
+    case 0x3001:
+        descriptor->sample_rate.num = get_be32(pb);
+        descriptor->sample_rate.den = get_be32(pb);
+        break;
     default:
         /* Private uid used by SONY C0023S01.mxf */
         if (IS_KLV_KEY(uid, mxf_sony_mpeg4_extradata)) {
@@ -809,7 +814,7 @@
                 st->codec->codec_id = container_ul->id;
             st->codec->channels = descriptor->channels;
             st->codec->bits_per_coded_sample = descriptor->bits_per_sample;
-            st->codec->sample_rate = descriptor->sample_rate.num / descriptor->sample_rate.den;
+            st->codec->sample_rate = descriptor->audio_sampling_rate.num / descriptor->audio_sampling_rate.den;
             /* TODO: implement CODEC_ID_RAWAUDIO */
             if (st->codec->codec_id == CODEC_ID_PCM_S16LE) {
                 if (descriptor->bits_per_sample == 24)

Reply via email to