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)