o removed waywars #endif
[asdcplib.git] / src / Wav.cpp
index 0f148500d7759bbf37f8f884b0c1ba462a574406..2ffadd404cecc360a8f5827db0e73d87b46ada14 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2005-2009, John Hurst
+Copyright (c) 2005-2018, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -175,7 +175,7 @@ ASDCP::Wav::SimpleWaveHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len,
        {
          ui16_t format = KM_i16_LE(*(ui16_t*)p); p += 2;
 
-         if ( format != WAVE_FORMAT_PCM && format != WAVE_FORMAT_EXTENSIBLE )
+         if ( format != ASDCP_WAVE_FORMAT_PCM && format != ASDCP_WAVE_FORMAT_EXTENSIBLE )
            {
              DefaultLogSink().Error("Expecting uncompressed PCM data, got format type %hd\n", format);
              return RESULT_RAW_FORMAT;
@@ -371,7 +371,8 @@ ASDCP::RF64::SimpleRF64Header::SimpleRF64Header(ASDCP::PCM::AudioDescriptor& ADe
   samplespersec = (ui32_t)ceil(ADesc.AudioSamplingRate.Quotient());
   blockalign = nchannels * ((bitspersample + 7) / 8);
   avgbps = samplespersec * blockalign;
-  data_len = ASDCP::PCM::CalcFrameBufferSize(ADesc) * ADesc.ContainerDuration;
+  cbsize = 0;
+  data_len = static_cast<ui64_t>(ASDCP::PCM::CalcFrameBufferSize(ADesc)) * ADesc.ContainerDuration;
 }
 
 //
@@ -402,11 +403,12 @@ ASDCP::RF64::SimpleRF64Header::WriteToFile(Kumu::FileWriter& OutFile) const
     + sizeof(samplespersec)
     + sizeof(avgbps)
     + sizeof(blockalign)
-    + sizeof(bitspersample);
+    + sizeof(bitspersample)
+    + sizeof(cbsize);
 
   ui32_t write_count = 0;
   ui64_t RIFF_len = data_len + SimpleWavHeaderLength - 8;
-  DefaultLogSink().Debug("RIFF_len is %llu.\n", RIFF_len);
+  //  DefaultLogSink().Debug("RIFF_len is %llu.\n", RIFF_len);
   byte_t* tmp_header = NULL;
   ui32_t header_len = 0;
 
@@ -441,6 +443,7 @@ ASDCP::RF64::SimpleRF64Header::WriteToFile(Kumu::FileWriter& OutFile) const
     *((ui32_t*)p) = KM_i32_LE(avgbps); p += 4;
     *((ui16_t*)p) = KM_i16_LE(blockalign); p += 2;
     *((ui16_t*)p) = KM_i16_LE(bitspersample); p += 2;
+    *((ui16_t*)p) = KM_i16_LE(cbsize); p += 2;
     memcpy(p, &Wav::FCC_data, sizeof(fourcc)); p += 4;
     *((ui32_t*)p) = KM_i32_LE(data32_len); p += 4;
     write_count = (p - tmp_header);
@@ -462,6 +465,7 @@ ASDCP::RF64::SimpleRF64Header::WriteToFile(Kumu::FileWriter& OutFile) const
     *((ui32_t*)p) = KM_i32_LE(avgbps); p += 4;
     *((ui16_t*)p) = KM_i16_LE(blockalign); p += 2;
     *((ui16_t*)p) = KM_i16_LE(bitspersample); p += 2;
+    *((ui16_t*)p) = KM_i16_LE(cbsize); p += 2;
     memcpy(p, &Wav::FCC_data, sizeof(fourcc)); p += 4;
     *((ui32_t*)p) = KM_i32_LE(data_len); p += 4;
     write_count = (p - tmp_header);
@@ -544,14 +548,17 @@ ASDCP::RF64::SimpleRF64Header::ReadFromBuffer(const byte_t* buf, ui32_t buf_len,
 
         if ( test_fcc == Wav::FCC_data )
         {
-            if ( chunk_size > RIFF_len )
-            {
-                DefaultLogSink().Error("Chunk size %u larger than file: %u\n", chunk_size, RIFF_len);
-                return RESULT_RAW_FORMAT;
-            }
+            if ( chunk_size != MAX_RIFF_LEN )
+             {
+               if ( chunk_size > RIFF_len )
+                 {
+                   DefaultLogSink().Error("Chunk size %u larger than file: %u\n", chunk_size, RIFF_len);
+                   return RESULT_RAW_FORMAT;
+                 }
 
-            if (chunk_size != MAX_RIFF_LEN)
                 data_len = chunk_size;
+             }
             *data_start = p - buf;
             break;
         }
@@ -560,7 +567,7 @@ ASDCP::RF64::SimpleRF64Header::ReadFromBuffer(const byte_t* buf, ui32_t buf_len,
         {
             ui16_t format = KM_i16_LE(*(ui16_t*)p); p += 2;
 
-            if ( format != Wav::WAVE_FORMAT_PCM && format != Wav::WAVE_FORMAT_EXTENSIBLE )
+            if ( format != Wav::ASDCP_WAVE_FORMAT_PCM && format != Wav::ASDCP_WAVE_FORMAT_EXTENSIBLE )
             {
                 DefaultLogSink().Error("Expecting uncompressed PCM data, got format type %hd\n", format);
                 return RESULT_RAW_FORMAT;