/*
-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
#include <Wav.h>
#include <assert.h>
+#include <KM_log.h>
+using Kumu::DefaultLogSink;
using namespace ASDCP;
using namespace ASDCP::PCM;
using namespace ASDCP::Wav;
+using namespace ASDCP::RF64;
//------------------------------------------------------------------------------------------
//
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;
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&);
//
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) )
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
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();
+ }
+ }
}
}
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;
}
// 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;