fix for linking errorr
[asdcplib.git] / src / PCM_Parser.cpp
index 331bebfc86b25bdf539811fce4f5eb1e68302465..e3b693d6bcf01928b88fc21362e0eeb7483ef1fc 100755 (executable)
@@ -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 <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;
 
 
 //------------------------------------------------------------------------------------------
@@ -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;
     }