diff options
Diffstat (limited to 'asdcplib/src/PCM_Parser.cpp')
| -rwxr-xr-x | asdcplib/src/PCM_Parser.cpp | 236 |
1 files changed, 0 insertions, 236 deletions
diff --git a/asdcplib/src/PCM_Parser.cpp b/asdcplib/src/PCM_Parser.cpp deleted file mode 100755 index e556341..0000000 --- a/asdcplib/src/PCM_Parser.cpp +++ /dev/null @@ -1,236 +0,0 @@ -/* -Copyright (c) 2004-2011, John Hurst -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -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 $ - \brief AS-DCP library, PCM raw essence reader implementation -*/ - -#include <Wav.h> -#include <assert.h> -#include <KM_log.h> -using Kumu::DefaultLogSink; - -using namespace ASDCP; -using namespace ASDCP::PCM; -using namespace ASDCP::Wav; - - -//------------------------------------------------------------------------------------------ - -// -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; - ui32_t m_FrameBufferSize; - ui32_t m_FramesRead; - Rational m_PictureRate; - - ASDCP_NO_COPY_CONSTRUCT(h__WAVParser); - -public: - AudioDescriptor m_ADesc; - - - h__WAVParser() : - m_EOF(false), m_DataStart(0), m_DataLength(0), m_ReadCount(0), - m_FrameBufferSize(0), m_FramesRead(0) {} - - ~h__WAVParser() - { - Close(); - } - - Result_t OpenRead(const char* filename, const Rational& PictureRate); - void Close(); - void Reset(); - Result_t ReadFrame(FrameBuffer&); -}; - - -// -void -ASDCP::PCM::WAVParser::h__WAVParser::Close() -{ - m_FileReader.Close(); -} - -// -void -ASDCP::PCM::WAVParser::h__WAVParser::Reset() -{ - m_FileReader.Seek(m_DataStart); - m_FramesRead = 0; - m_ReadCount = 0; -} - -// -ASDCP::Result_t -ASDCP::PCM::WAVParser::h__WAVParser::OpenRead(const char* filename, const Rational& PictureRate) -{ - ASDCP_TEST_NULL_STR(filename); - - Result_t result = m_FileReader.OpenRead(filename); - - if ( ASDCP_SUCCESS(result) ) - { - SimpleWaveHeader WavHeader; - result = WavHeader.ReadFromFile(m_FileReader, &m_DataStart); - - if ( ASDCP_SUCCESS(result) ) - { - WavHeader.FillADesc(m_ADesc, PictureRate); - 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 - { - ASDCP::AIFF::SimpleAIFFHeader AIFFHeader; - m_FileReader.Seek(0); - - result = AIFFHeader.ReadFromFile(m_FileReader, &m_DataStart); - - if ( ASDCP_SUCCESS(result) ) - { - AIFFHeader.FillADesc(m_ADesc, PictureRate); - 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(); - } - } - } - - return result; -} - -// -ASDCP::Result_t -ASDCP::PCM::WAVParser::h__WAVParser::ReadFrame(FrameBuffer& FB) -{ - FB.Size(0); - - if ( m_EOF || m_ReadCount >= m_DataLength ) - return RESULT_ENDOFFILE; - - if ( FB.Capacity() < m_FrameBufferSize ) - { - DefaultLogSink().Error("FrameBuf.Capacity: %u FrameLength: %u\n", - FB.Capacity(), m_FrameBufferSize); - return RESULT_SMALLBUF; - } - - ui32_t read_count = 0; - Result_t result = m_FileReader.Read(FB.Data(), m_FrameBufferSize, &read_count); - - if ( result == RESULT_ENDOFFILE ) - { - m_EOF = true; - - if ( read_count > 0 ) - result = RESULT_OK; - } - - if ( ASDCP_SUCCESS(result) ) - { - m_ReadCount += read_count; - FB.Size(read_count); - FB.FrameNumber(m_FramesRead++); - } - - return result; -} - - -//------------------------------------------------------------------------------------------ - -ASDCP::PCM::WAVParser::WAVParser() -{ -} - -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 -{ - const_cast<ASDCP::PCM::WAVParser*>(this)->m_Parser = new h__WAVParser; - - Result_t result = m_Parser->OpenRead(filename, PictureRate); - - if ( ASDCP_FAILURE(result) ) - const_cast<ASDCP::PCM::WAVParser*>(this)->m_Parser.release(); - - return result; -} - -// Rewinds the stream to the beginning. -ASDCP::Result_t -ASDCP::PCM::WAVParser::Reset() const -{ - if ( m_Parser.empty() ) - return RESULT_INIT; - - m_Parser->Reset(); - return RESULT_OK; -} - -// Places a frame of data in the frame buffer. Fails if the buffer is too small -// or the stream is empty. -ASDCP::Result_t -ASDCP::PCM::WAVParser::ReadFrame(FrameBuffer& FB) const -{ - if ( m_Parser.empty() ) - return RESULT_INIT; - - return m_Parser->ReadFrame(FB); -} - -ASDCP::Result_t -ASDCP::PCM::WAVParser::FillAudioDescriptor(AudioDescriptor& ADesc) const -{ - if ( m_Parser.empty() ) - return RESULT_INIT; - - ADesc = m_Parser->m_ADesc; - return RESULT_OK; -} - - -// -// end PCM_Parser.cpp -// |
