diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2022-02-21 23:41:33 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2022-02-21 23:53:07 +0300 |
commit | b232396d25bd2eaef3fcaa536dd506a3b5da2c99 (patch) | |
tree | 26dfe6714fc280d820fa852e10bf8591a8c49569 /src | |
parent | a77b9fc9b53463bb7aace9773faf136538b9f19b (diff) | |
download | atracdenc-b232396d25bd2eaef3fcaa536dd506a3b5da2c99.tar.gz |
Fix some CodeQL warnings
Diffstat (limited to 'src')
-rw-r--r-- | src/atrac/atrac3_bitstream.cpp | 11 | ||||
-rw-r--r-- | src/pcmengin.h | 27 |
2 files changed, 25 insertions, 13 deletions
diff --git a/src/atrac/atrac3_bitstream.cpp b/src/atrac/atrac3_bitstream.cpp index 5343579..da4d294 100644 --- a/src/atrac/atrac3_bitstream.cpp +++ b/src/atrac/atrac3_bitstream.cpp @@ -283,13 +283,13 @@ uint8_t TAtrac3BitStreamWriter::GroupTonalComponents(const std::vector<TTonalBlo uint8_t tcsgn = 0; //for each group for (uint8_t i = 0; i < 64; ++i) { - uint8_t start_pos; - uint8_t cur_pos = 0; + size_t start_pos; + size_t cur_pos = 0; //scan tonal components while (cur_pos < groups[i].SubGroupPtr.size()) { start_pos = cur_pos; ++tcsgn; - groups[i].SubGroupMap.push_back(cur_pos); + groups[i].SubGroupMap.push_back(static_cast<uint8_t>(cur_pos)); uint8_t groupLimiter = 0; //allow not grather than 8 components in one subgroup limited by 64 specs do { @@ -354,7 +354,7 @@ uint16_t TAtrac3BitStreamWriter::EncodeTonalComponents(const TSingleChannelEleme } assert(curGroup.SubGroupMap.size()); assert(curGroup.SubGroupMap.size() < UINT8_MAX); - for (uint8_t subgroup = 0; subgroup < curGroup.SubGroupMap.size(); ++subgroup) { + for (size_t subgroup = 0; subgroup < curGroup.SubGroupMap.size(); ++subgroup) { const uint8_t subGroupStartPos = curGroup.SubGroupMap[subgroup]; const uint8_t subGroupEndPos = (subgroup < curGroup.SubGroupMap.size() - 1) ? curGroup.SubGroupMap[subgroup+1] : (uint8_t)curGroup.SubGroupPtr.size(); @@ -410,7 +410,7 @@ uint16_t TAtrac3BitStreamWriter::EncodeTonalComponents(const TSingleChannelEleme bitsUsed += 3; if (bitStream) bitStream->Write(codedComponents, 3); - uint8_t k = lastPos; + uint16_t k = lastPos; for (; k < lastPos + codedComponents; ++k) { assert(curGroup.SubGroupPtr[k]->ValPtr->Pos >= j * 64); uint16_t relPos = curGroup.SubGroupPtr[k]->ValPtr->Pos - j * 64; @@ -438,7 +438,6 @@ uint16_t TAtrac3BitStreamWriter::EncodeTonalComponents(const TSingleChannelEleme assert(i); bitsUsed += VLCEnc(i>>3, mantisas, curGroup.SubGroupPtr[k]->ScaledBlock.Values.size(), bitStream); - } lastPos = k; checkPos = lastPos; diff --git a/src/pcmengin.h b/src/pcmengin.h index b2523ca..dcf7d44 100644 --- a/src/pcmengin.h +++ b/src/pcmengin.h @@ -51,15 +51,18 @@ template <class T> class TPCMBuffer { std::vector<T> Buf_; uint16_t NumChannels; + public: - TPCMBuffer(const int32_t bufSize, const uint32_t numChannels) + TPCMBuffer(uint16_t bufSize, uint8_t numChannels) : NumChannels(numChannels) { - Buf_.resize(bufSize*numChannels); + Buf_.resize((size_t)bufSize * numChannels); } + size_t Size() { return Buf_.size() / NumChannels; } + T* operator[](size_t pos) { size_t rpos = pos * NumChannels; if (rpos >= Buf_.size()) { @@ -68,6 +71,7 @@ public: } return &Buf_[rpos]; } + const T* operator[](size_t pos) const { size_t rpos = pos * NumChannels; if (rpos >= Buf_.size()) { @@ -76,9 +80,11 @@ public: } return &Buf_[rpos]; } + uint16_t Channels() const { return NumChannels; } + void Zero(size_t pos, size_t len) { assert((pos + len) * NumChannels <= Buf_.size()); memset(&Buf_[pos*NumChannels], 0, len*NumChannels); @@ -115,45 +121,52 @@ private: TReaderPtr Reader; uint64_t Processed = 0; public: - TPCMEngine(const int32_t bufSize, const int32_t numChannels) + TPCMEngine(uint16_t bufSize, uint8_t numChannels) : Buffer(bufSize, numChannels) { } - TPCMEngine(const int32_t bufSize, const int32_t numChannels, TWriterPtr&& writer) + + TPCMEngine(uint16_t bufSize, uint8_t numChannels, TWriterPtr&& writer) : Buffer(bufSize, numChannels) , Writer(std::move(writer)) { } - TPCMEngine(const int32_t bufSize, const int32_t numChannels, TReaderPtr&& reader) + + TPCMEngine(uint16_t bufSize, uint8_t numChannels, TReaderPtr&& reader) : Buffer(bufSize, numChannels) , Reader(std::move(reader)) { } - TPCMEngine(const int32_t bufSize, const int32_t numChannels, TWriterPtr&& writer, TReaderPtr&& reader) + + TPCMEngine(uint16_t bufSize, uint8_t numChannels, TWriterPtr&& writer, TReaderPtr&& reader) : Buffer(bufSize, numChannels) , Writer(std::move(writer)) , Reader(std::move(reader)) { } + typedef std::function<void(T* data, const ProcessMeta& meta)> TProcessLambda; uint64_t ApplyProcess(size_t step, TProcessLambda lambda) { if (step > Buffer.Size()) { throw TPCMBufferTooSmall(); } + if (Reader) { const uint32_t sizeToRead = Buffer.Size(); Reader->Read(Buffer, sizeToRead); } + size_t lastPos = 0; ProcessMeta meta = {Buffer.Channels()}; for (size_t i = 0; i + step <= Buffer.Size(); i+=step) { lambda(Buffer[i], meta); lastPos = i + step; } + assert(lastPos == Buffer.Size()); if (Writer) { Writer->Write(Buffer, lastPos); } + Processed += lastPos; return Processed; - } }; |