From ab3e3df49a9d4a44a3bf11211e31bdeac3ef7bcf Mon Sep 17 00:00:00 2001 From: jhurst Date: Sun, 21 Sep 2014 13:27:43 +0000 Subject: imf bugs date parse bug timed-text transform removed --- src/AS_DCP_PCM.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/AS_DCP_PCM.cpp') diff --git a/src/AS_DCP_PCM.cpp b/src/AS_DCP_PCM.cpp index 88ccd1f..9de8d53 100755 --- a/src/AS_DCP_PCM.cpp +++ b/src/AS_DCP_PCM.cpp @@ -276,6 +276,12 @@ ASDCP::PCM::MXFReader::h__Reader::OpenRead(const std::string& filename) } } + if ( m_ADesc.ContainerDuration == 0 ) + { + DefaultLogSink().Error("ContainerDuration unset.\n"); + return RESULT_FORMAT; + } + // check for sample/frame rate sanity if ( ASDCP_SUCCESS(result) && m_ADesc.EditRate != EditRate_24 @@ -297,14 +303,14 @@ ASDCP::PCM::MXFReader::h__Reader::OpenRead(const std::string& filename) m_ADesc.EditRate.Numerator, m_ADesc.EditRate.Denominator); // oh, they gave us the audio sampling rate instead, assume 24/1 - if ( m_ADesc.EditRate == SampleRate_48k ) + if ( m_ADesc.EditRate == SampleRate_48k || m_ADesc.EditRate == SampleRate_96k ) { DefaultLogSink().Warn("adjusting EditRate to 24/1\n"); m_ADesc.EditRate = EditRate_24; } else { - DefaultLogSink().Error("PCM EditRate not in expected value range.\n"); + DefaultLogSink().Error("PCM EditRate not in expected value range.\n"); // or we just drop the hammer return RESULT_FORMAT; } @@ -325,6 +331,11 @@ ASDCP::PCM::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& FrameB if ( ! m_File.IsOpen() ) return RESULT_INIT; + if ( (FrameNum+1) > m_ADesc.ContainerDuration ) + { + return RESULT_RANGE; + } + assert(m_Dict); return ReadEKLVFrame(FrameNum, FrameBuf, m_Dict->ul(MDD_WAVEssence), Ctx, HMAC); } -- cgit v1.2.3