diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2017-07-23 02:14:52 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2017-07-23 02:14:52 +0300 |
commit | 03488bb956537cb4778b8caf82fde953a89cad02 (patch) | |
tree | 6c93c274f48ade7e7431844a644747e6c5a53c79 | |
parent | cf7c8d38e0dfeeadbabb7a33a19b96c171c60a70 (diff) | |
download | atracdenc-03488bb956537cb4778b8caf82fde953a89cad02.tar.gz |
Fix strict aliasing warning
-rw-r--r-- | src/atrac/atrac3_bitstream.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/atrac/atrac3_bitstream.cpp b/src/atrac/atrac3_bitstream.cpp index 79ca9b5..5a02711 100644 --- a/src/atrac/atrac3_bitstream.cpp +++ b/src/atrac/atrac3_bitstream.cpp @@ -295,15 +295,17 @@ uint16_t TAtrac3BitStreamWriter::EncodeTonalComponents(const std::vector<TTonalB const uint8_t codedValues = curGroup.SubGroupPtr[0]->ScaledBlock.Values.size(); //Number of tonal component for each 64spec block. Used to set qmf band flags and simplify band encoding loop - uint8_t bandFlags[16]; - memset(bandFlags, 0, 16 * sizeof(uint8_t)); + union { + uint8_t c[16]; + uint32_t i[4] = {0}; + } bandFlags; assert(numQmfBand <= 4); for (uint8_t j = subGroupStartPos; j < subGroupEndPos; ++j) { //assert num of coded values are same in group assert(codedValues == curGroup.SubGroupPtr[j]->ScaledBlock.Values.size()); uint8_t specBlock = (curGroup.SubGroupPtr[j]->ValPtr->Pos) >> 6; assert((specBlock >> 2) < numQmfBand); - bandFlags[specBlock]++; + bandFlags.c[specBlock]++; } assert(numQmfBand == 4); @@ -311,7 +313,7 @@ uint16_t TAtrac3BitStreamWriter::EncodeTonalComponents(const std::vector<TTonalB tcgnCheck++; for (uint8_t j = 0; j < numQmfBand; ++j) { - bitStream->Write((bool)(*(uint32_t*)&bandFlags[j<<2]), 1); + bitStream->Write((bool)bandFlags.i[j], 1); } //write number of coded values for components in current group assert(codedValues > 0); @@ -324,11 +326,11 @@ uint16_t TAtrac3BitStreamWriter::EncodeTonalComponents(const std::vector<TTonalB uint8_t lastPos = subGroupStartPos; uint8_t checkPos = 0; for (uint16_t j = 0; j < 16; ++j) { - if (!(*(uint32_t*)&bandFlags[j & 0xC])) { //discard two bits + if (!(bandFlags.i[j >> 2])) { continue; } - const uint8_t codedComponents = bandFlags[j]; + const uint8_t codedComponents = bandFlags.c[j]; assert(codedComponents < 8); bitStream->Write(codedComponents, 3); uint8_t k = lastPos; |