X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FPCM_Parser.cpp;h=e3b693d6bcf01928b88fc21362e0eeb7483ef1fc;hb=1b7fcb3c79158089eac22ef405eac3712a76f320;hp=331bebfc86b25bdf539811fce4f5eb1e68302465;hpb=dde89765744dad9a6b9d13126092d9bfc2dbc0d7;p=asdcplib.git diff --git a/src/PCM_Parser.cpp b/src/PCM_Parser.cpp index 331bebf..e3b693d 100755 --- a/src/PCM_Parser.cpp +++ b/src/PCM_Parser.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2004, John Hurst +Copyright (c) 2004-2011, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -31,10 +31,13 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include +using Kumu::DefaultLogSink; using namespace ASDCP; using namespace ASDCP::PCM; using namespace ASDCP::Wav; +using namespace ASDCP::RF64; //------------------------------------------------------------------------------------------ @@ -42,11 +45,11 @@ using namespace ASDCP::Wav; // class ASDCP::PCM::WAVParser::h__WAVParser { - FileReader m_FileReader; + Kumu::FileReader m_FileReader; bool m_EOF; ui32_t m_DataStart; - ui32_t m_DataLength; - ui32_t m_ReadCount; + ui64_t m_DataLength; + ui64_t m_ReadCount; ui32_t m_FrameBufferSize; ui32_t m_FramesRead; Rational m_PictureRate; @@ -108,6 +111,7 @@ ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const char* filename, const Ration m_FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(m_ADesc); m_DataLength = WavHeader.data_len; m_ADesc.ContainerDuration = m_DataLength / m_FrameBufferSize; + m_ADesc.ChannelFormat = PCM::CF_NONE; Reset(); } else @@ -123,8 +127,25 @@ ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const char* filename, const Ration m_FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(m_ADesc); m_DataLength = AIFFHeader.data_len; m_ADesc.ContainerDuration = m_DataLength / m_FrameBufferSize; + m_ADesc.ChannelFormat = PCM::CF_NONE; Reset(); } + else + { + SimpleRF64Header RF64Header; + m_FileReader.Seek(0); + result = RF64Header.ReadFromFile(m_FileReader, &m_DataStart); + + if ( ASDCP_SUCCESS(result) ) + { + RF64Header.FillADesc(m_ADesc, PictureRate); + m_FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(m_ADesc); + m_DataLength = RF64Header.data_len; + m_ADesc.ContainerDuration = m_DataLength / m_FrameBufferSize; + m_ADesc.ChannelFormat = PCM::CF_NONE; + Reset(); + } + } } } @@ -142,7 +163,7 @@ ASDCP::PCM::WAVParser::h__WAVParser::ReadFrame(FrameBuffer& FB) if ( FB.Capacity() < m_FrameBufferSize ) { - DefaultLogSink().Error("FrameBuf.Capacity: %lu FrameLength: %lu\n", + DefaultLogSink().Error("FrameBuf.Capacity: %u FrameLength: %u\n", FB.Capacity(), m_FrameBufferSize); return RESULT_SMALLBUF; }