diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-01-05 15:32:10 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-01-05 15:32:10 +0000 |
| commit | 3ec4338ce90ea0549409312f24f8b28c07a5d2da (patch) | |
| tree | 09aaaff66dd860abbeacc20793145e1a27f4defd /asdcplib/src/PCM_Parser.cpp | |
| parent | 342aad2ddf893aaaafa9a2c9980579d2dc4ec125 (diff) | |
asdcplib 2.5.11
Diffstat (limited to 'asdcplib/src/PCM_Parser.cpp')
| -rwxr-xr-x | asdcplib/src/PCM_Parser.cpp | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/asdcplib/src/PCM_Parser.cpp b/asdcplib/src/PCM_Parser.cpp index e5563413..c5f743fe 100755 --- a/asdcplib/src/PCM_Parser.cpp +++ b/asdcplib/src/PCM_Parser.cpp @@ -25,7 +25,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /*! \file PCM_Parser.cpp - \version $Id: PCM_Parser.cpp,v 1.7 2011/05/13 01:50:19 jhurst Exp $ + \version $Id: PCM_Parser.cpp,v 1.10 2015/02/19 19:06:57 jhurst Exp $ \brief AS-DCP library, PCM raw essence reader implementation */ @@ -37,6 +37,7 @@ using Kumu::DefaultLogSink; using namespace ASDCP; using namespace ASDCP::PCM; using namespace ASDCP::Wav; +using namespace ASDCP::RF64; //------------------------------------------------------------------------------------------ @@ -47,8 +48,8 @@ class ASDCP::PCM::WAVParser::h__WAVParser 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; @@ -68,7 +69,7 @@ public: Close(); } - Result_t OpenRead(const char* filename, const Rational& PictureRate); + Result_t OpenRead(const std::string& filename, const Rational& PictureRate); void Close(); void Reset(); Result_t ReadFrame(FrameBuffer&); @@ -93,10 +94,8 @@ ASDCP::PCM::WAVParser::h__WAVParser::Reset() // ASDCP::Result_t -ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const char* filename, const Rational& PictureRate) +ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const std::string& filename, const Rational& PictureRate) { - ASDCP_TEST_NULL_STR(filename); - Result_t result = m_FileReader.OpenRead(filename); if ( ASDCP_SUCCESS(result) ) @@ -129,6 +128,22 @@ ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const char* filename, const Ration 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(); + } + } } } @@ -141,8 +156,10 @@ ASDCP::PCM::WAVParser::h__WAVParser::ReadFrame(FrameBuffer& FB) { FB.Size(0); - if ( m_EOF || m_ReadCount >= m_DataLength ) - return RESULT_ENDOFFILE; + if ( m_EOF ) + { + return RESULT_ENDOFFILE; + } if ( FB.Capacity() < m_FrameBufferSize ) { @@ -159,7 +176,9 @@ ASDCP::PCM::WAVParser::h__WAVParser::ReadFrame(FrameBuffer& FB) m_EOF = true; if ( read_count > 0 ) - result = RESULT_OK; + { + result = RESULT_OK; + } } if ( ASDCP_SUCCESS(result) ) @@ -167,6 +186,11 @@ ASDCP::PCM::WAVParser::h__WAVParser::ReadFrame(FrameBuffer& FB) m_ReadCount += read_count; FB.Size(read_count); FB.FrameNumber(m_FramesRead++); + + if ( read_count < FB.Capacity() ) + { + memset(FB.Data() + FB.Size(), 0, FB.Capacity() - FB.Size()); + } } return result; @@ -186,7 +210,7 @@ ASDCP::PCM::WAVParser::~WAVParser() // Opens the stream for reading, parses enough data to provide a complete // set of stream metadata for the MXFWriter below. ASDCP::Result_t -ASDCP::PCM::WAVParser::OpenRead(const char* filename, const Rational& PictureRate) const +ASDCP::PCM::WAVParser::OpenRead(const std::string& filename, const Rational& PictureRate) const { const_cast<ASDCP::PCM::WAVParser*>(this)->m_Parser = new h__WAVParser; |
