X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FWav.cpp;h=7275ab95cfa186f1870cd06e1c54637792b0e128;hb=9ae565acc75f39fd0e043135761aa3fb62e09025;hp=c3d0a2b4ac0b2475843e2d0ee3923570d67229bb;hpb=c2bc637d5ae6fcf295299a839e9fcb84415cd809;p=asdcplib.git diff --git a/src/Wav.cpp b/src/Wav.cpp index c3d0a2b..7275ab9 100755 --- a/src/Wav.cpp +++ b/src/Wav.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2005-2006, John Hurst +Copyright (c) 2005-2009, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -44,8 +44,8 @@ ASDCP::Wav::SimpleWaveHeader::SimpleWaveHeader(ASDCP::PCM::AudioDescriptor& ADes nchannels = ADesc.ChannelCount; bitspersample = ADesc.QuantizationBits; samplespersec = (ui32_t)ceil(ADesc.AudioSamplingRate.Quotient()); - avgbps = samplespersec * nchannels * ((bitspersample + 7) / 8); - blockalign = nchannels * ((bitspersample + 7) / 8); + blockalign = nchannels * (bitspersample / 8); + avgbps = samplespersec * blockalign; cbsize = 0; data_len = ASDCP::PCM::CalcFrameBufferSize(ADesc) * ADesc.ContainerDuration; } @@ -54,7 +54,7 @@ ASDCP::Wav::SimpleWaveHeader::SimpleWaveHeader(ASDCP::PCM::AudioDescriptor& ADes void ASDCP::Wav::SimpleWaveHeader::FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, ASDCP::Rational PictureRate) const { - ADesc.SampleRate = PictureRate; + ADesc.EditRate = PictureRate; ADesc.LinkedTrackID = 0; ADesc.Locked = 0; @@ -65,6 +65,7 @@ ASDCP::Wav::SimpleWaveHeader::FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, ASDC ADesc.QuantizationBits = bitspersample; ui32_t FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(ADesc); ADesc.ContainerDuration = data_len / FrameBufferSize; + ADesc.ChannelFormat = PCM::CF_NONE; } @@ -137,7 +138,7 @@ ASDCP::Wav::SimpleWaveHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len, fourcc test_RIFF(p); p += 4; if ( test_RIFF != FCC_RIFF ) { - DefaultLogSink().Debug("File does not begin with RIFF header\n"); + // DefaultLogSink().Debug("File does not begin with RIFF header\n"); return RESULT_RAW_FORMAT; } @@ -174,9 +175,9 @@ 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 != 1 ) + if ( format != WAVE_FORMAT_PCM && format != WAVE_FORMAT_EXTENSIBLE ) { - DefaultLogSink().Error("Expecting uncompressed essence, got format type %hu\n", format); + DefaultLogSink().Error("Expecting uncompressed PCM data, got format type %hd\n", format); return RESULT_RAW_FORMAT; } @@ -185,7 +186,7 @@ ASDCP::Wav::SimpleWaveHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len, avgbps = KM_i32_LE(*(ui32_t*)p); p += 4; blockalign = KM_i16_LE(*(ui16_t*)p); p += 2; bitspersample = KM_i16_LE(*(ui16_t*)p); p += 2; - p += chunk_size - 16; + p += chunk_size - 16; // 16 is the number of bytes read in this block } else { @@ -259,15 +260,16 @@ extended_to_Rat(const byte_t* buf) void ASDCP::AIFF::SimpleAIFFHeader::FillADesc(ASDCP::PCM::AudioDescriptor& ADesc, ASDCP::Rational PictureRate) const { - ADesc.SampleRate = PictureRate; + ADesc.EditRate = PictureRate; ADesc.ChannelCount = numChannels; ADesc.AudioSamplingRate = extended_to_Rat(sampleRate); ADesc.QuantizationBits = sampleSize; ADesc.BlockAlign = sampleSize / 8; - ADesc.AvgBps = ADesc.BlockAlign * (ui32_t)ceil(ADesc.AudioSamplingRate.Quotient()); + ADesc.AvgBps = (ui32_t) (ADesc.BlockAlign * ADesc.AudioSamplingRate.Quotient()); ui32_t FrameBufferSize = ASDCP::PCM::CalcFrameBufferSize(ADesc); ADesc.ContainerDuration = data_len / FrameBufferSize; + ADesc.ChannelFormat = PCM::CF_NONE; } // @@ -303,7 +305,7 @@ ASDCP::AIFF::SimpleAIFFHeader::ReadFromBuffer(const byte_t* buf, ui32_t buf_len, fourcc test_FORM(p); p += 4; if ( test_FORM != FCC_FORM ) { - DefaultLogSink().Debug("File does not begin with FORM header\n"); + // DefaultLogSink().Debug("File does not begin with FORM header\n"); return RESULT_RAW_FORMAT; }