}
// Returns number of frames for data described by ADesc, given a duration in samples and an edit rate
- inline ui32_t CalcFramesFromDurationInSamples(const ui32_t durationInSamples, const ASDCP::MXF::WaveAudioDescriptor& d,
+ inline ui32_t CalcFramesFromDurationInSamples(const ui32_t duration_samples, const ASDCP::MXF::WaveAudioDescriptor& d,
const ASDCP::Rational& edit_rate)
{
- return static_cast<ui32_t>(static_cast<ui64_t>(durationInSamples) *
- static_cast<ui64_t>(d.AudioSamplingRate.Denominator * edit_rate.Numerator) /
- static_cast<ui64_t>(d.AudioSamplingRate.Numerator * edit_rate.Denominator));
+ ui32_t spf = CalcSamplesPerFrame(d, edit_rate);
+ ui32_t frames = duration_samples / spf;
+
+ if ( duration_samples % spf != 0 )
+ {
+ ++frames;
+ }
+
+ return frames;
}
} // namespace MXF