diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index 6364b65c14b7f8570e9e89ca4a34e21b1efdc40b..d060483ce1714bbc1c07c145cd34b656df9d90ff 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -2490,27 +2490,27 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) } } - if (tmpDecodedPictureHashSEIMappedType<0 || tmpDecodedPictureHashSEIMappedType>=int(NUMBER_OF_HASHTYPES)) + if (tmpDecodedPictureHashSEIMappedType < 0 || tmpDecodedPictureHashSEIMappedType > to_underlying(HashType::NUM)) { EXIT( "Error: bad checksum mode"); } // Need to map values to match those of the SEI message: if (tmpDecodedPictureHashSEIMappedType==0) { - m_decodedPictureHashSEIType=HASHTYPE_NONE; + m_decodedPictureHashSEIType = HashType::NONE; } else { - m_decodedPictureHashSEIType=HashType(tmpDecodedPictureHashSEIMappedType-1); + m_decodedPictureHashSEIType = static_cast<HashType>(tmpDecodedPictureHashSEIMappedType - 1); } // Need to map values to match those of the SEI message: if (tmpSubpicDecodedPictureHashMappedType==0) { - m_subpicDecodedPictureHashType=HASHTYPE_NONE; + m_subpicDecodedPictureHashType = HashType::NONE; } else { - m_subpicDecodedPictureHashType=HashType(tmpSubpicDecodedPictureHashMappedType-1); + m_subpicDecodedPictureHashType = static_cast<HashType>(tmpSubpicDecodedPictureHashMappedType - 1); } // allocate slice-based dQP values m_frameDeltaQps.resize(m_framesToBeEncoded + m_iGOPSize + 1); @@ -3367,7 +3367,7 @@ int EncAppCfg::xAutoDetermineProfile() bool EncAppCfg::xCheckParameter() { msg( NOTICE, "\n" ); - if (m_decodedPictureHashSEIType==HASHTYPE_NONE) + if (m_decodedPictureHashSEIType == HashType::NONE) { msg( DETAILS, "******************************************************************\n"); msg( DETAILS, "** WARNING: --SEIDecodedPictureHash is now disabled by default. **\n"); diff --git a/source/Lib/CommonLib/PicYuvMD5.cpp b/source/Lib/CommonLib/PicYuvMD5.cpp index c0a92aaf2fcc68cff9158de4048d0b02023642b4..714e6dc6dedef88126ab7e3c73d47875ff696965 100644 --- a/source/Lib/CommonLib/PicYuvMD5.cpp +++ b/source/Lib/CommonLib/PicYuvMD5.cpp @@ -256,29 +256,29 @@ int calcAndPrintHashStatus(const CPelUnitBuf& pic, const SEIDecodedPictureHash* CHECK ((uint32_t)pic.bufs.size() != ( pictureHashSEI->singleCompFlag ? 1 : 3 ), "The value of dph_sei_single_component_flag shall be equal to (ChromaFormatIdc == 0)."); switch (pictureHashSEI->method) { - case HASHTYPE_MD5: - { - hashType = "MD5"; - numChar = calcMD5(pic, recon_digest, bitDepths); - break; - } - case HASHTYPE_CRC: - { - hashType = "CRC"; - numChar = calcCRC(pic, recon_digest, bitDepths); - break; - } - case HASHTYPE_CHECKSUM: - { - hashType = "Checksum"; - numChar = calcChecksum(pic, recon_digest, bitDepths); - break; - } - default: - { - THROW("Unknown hash type"); - break; - } + case HashType::MD5: + { + hashType = "MD5"; + numChar = calcMD5(pic, recon_digest, bitDepths); + break; + } + case HashType::CRC: + { + hashType = "CRC"; + numChar = calcCRC(pic, recon_digest, bitDepths); + break; + } + case HashType::CHECKSUM: + { + hashType = "Checksum"; + numChar = calcChecksum(pic, recon_digest, bitDepths); + break; + } + default: + { + THROW("Unknown hash type"); + break; + } } } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index bad0b30ef3fccdf9993935c2517d4e7cbba5313d..5c354741203edc7818faea96666dd1bbe7387c61 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -633,13 +633,13 @@ enum ScalingList1dStartIdx }; // For use with decoded picture hash SEI messages, generated by encoder. -enum HashType +enum class HashType { - HASHTYPE_MD5 = 0, - HASHTYPE_CRC = 1, - HASHTYPE_CHECKSUM = 2, - HASHTYPE_NONE = 3, - NUMBER_OF_HASHTYPES = 4 + NONE = -1, + MD5 = 0, + CRC = 1, + CHECKSUM = 2, + NUM }; enum SAOMode //mode diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index da72f7d3a147c78e40610b1c1ae62c5fb4ab1698..6b630d43c44ae6dac0dc3ce087437773e6939717 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -641,16 +641,25 @@ void SEIReader::xParseSEIDecodedPictureHash(SEIDecodedPictureHash& sei, uint32_t sei.singleCompFlag = val; sei_read_code( pDecodedMessageOutputStream, 7, val, "dph_sei_reserved_zero_7bits"); bytesRead++; - uint32_t expectedSize = ( sei.singleCompFlag ? 1 : 3 ) * (sei.method == 0 ? 16 : (sei.method == 1 ? 2 : 4)); + uint32_t expectedSize = + (sei.singleCompFlag ? 1 : 3) * (sei.method == HashType::MD5 ? 16 : (sei.method == HashType::CRC ? 2 : 4)); CHECK ((payloadSize - bytesRead) != expectedSize, "The size of the decoded picture hash does not match the expected size."); const char *traceString="\0"; switch (sei.method) { - case HASHTYPE_MD5: traceString="picture_md5"; break; - case HASHTYPE_CRC: traceString="picture_crc"; break; - case HASHTYPE_CHECKSUM: traceString="picture_checksum"; break; - default: THROW("Unknown hash type"); break; + case HashType::MD5: + traceString = "picture_md5"; + break; + case HashType::CRC: + traceString = "picture_crc"; + break; + case HashType::CHECKSUM: + traceString = "picture_checksum"; + break; + default: + THROW("Unknown hash type"); + break; } if (pDecodedMessageOutputStream) diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index a12333733dc260f87e0d5844a8cd44e447ecbff2..20b3d06a79695c3a82c145f1b23e97ff5c6faebe 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -1288,7 +1288,7 @@ void EncGOP::xUpdateDuData(AccessUnit &testAU, std::deque<DUData> &duData) } // The last DU may have a trailing SEI - if (m_pcCfg->getDecodedPictureHashSEIType()!=HASHTYPE_NONE) + if (m_pcCfg->getDecodedPictureHashSEIType() != HashType::NONE) { duData.back().accumBitsDU += ( 20 << 3 ); // probably around 20 bytes - should be further adjusted, e.g. by type duData.back().accumNalsDU += 1; @@ -1647,16 +1647,18 @@ printHash(const HashType hashType, const std::string &digestStr) const char *decodedPictureHashModeName; switch (hashType) { - case HASHTYPE_MD5: - decodedPictureHashModeName = "MD5"; - break; - case HASHTYPE_CRC: - decodedPictureHashModeName = "CRC"; - break; - case HASHTYPE_CHECKSUM: - decodedPictureHashModeName = "Checksum"; - break; - default: decodedPictureHashModeName = nullptr; break; + case HashType::MD5: + decodedPictureHashModeName = "MD5"; + break; + case HashType::CRC: + decodedPictureHashModeName = "CRC"; + break; + case HashType::CHECKSUM: + decodedPictureHashModeName = "Checksum"; + break; + default: + decodedPictureHashModeName = nullptr; + break; } if (decodedPictureHashModeName != nullptr) { @@ -4059,9 +4061,9 @@ void EncGOP::compressGOP(int pocLast, int numPicRcvd, PicList &rcListPic, std::l #if GDR_ENABLED // note : generate hash sei only for non-gdr pictures bool genHash = !(m_pcCfg->getGdrNoHash() && pcSlice->getPicHeader()->getInGdrInterval()); - if (m_pcCfg->getDecodedPictureHashSEIType() != HASHTYPE_NONE && genHash) + if (m_pcCfg->getDecodedPictureHashSEIType() != HashType::NONE && genHash) #else - if (m_pcCfg->getDecodedPictureHashSEIType()!=HASHTYPE_NONE) + if (m_pcCfg->getDecodedPictureHashSEIType() != HashType::NONE) #endif { SEIDecodedPictureHash *decodedPictureHashSei = new SEIDecodedPictureHash(); @@ -4073,7 +4075,7 @@ void EncGOP::compressGOP(int pocLast, int numPicRcvd, PicList &rcListPic, std::l const PPS* pps = pcPic->cs->pps; const int numSubpics = pps->getNumSubPics(); std::string subPicDigest; - if (numSubpics > 1 && m_pcCfg->getSubpicDecodedPictureHashType() != HASHTYPE_NONE ) + if (numSubpics > 1 && m_pcCfg->getSubpicDecodedPictureHashType() != HashType::NONE) { std::vector<uint16_t> subPicIdsInPic; xGetSubpicIdsInPic(subPicIdsInPic, pcPic->cs->sps, pps); diff --git a/source/Lib/EncoderLib/SEIEncoder.cpp b/source/Lib/EncoderLib/SEIEncoder.cpp index 9bf3a1476f121d9866b8d137d8c61c07dc8fa733..70e427c69204164c5d4afdce9056184c1325d7aa 100644 --- a/source/Lib/EncoderLib/SEIEncoder.cpp +++ b/source/Lib/EncoderLib/SEIEncoder.cpp @@ -487,25 +487,26 @@ void SEIEncoder::initDecodedPictureHashSEI(SEIDecodedPictureHash *decodedPicture decodedPictureHashSEI->singleCompFlag = (m_pcCfg->getChromaFormatIdc() == 0); switch (m_pcCfg->getDecodedPictureHashSEIType()) { - case HASHTYPE_MD5: - { - uint32_t numChar=calcMD5(pic, decodedPictureHashSEI->m_pictureHash, bitDepths); - rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); - } - break; - case HASHTYPE_CRC: - { - uint32_t numChar=calcCRC(pic, decodedPictureHashSEI->m_pictureHash, bitDepths); - rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); - } - break; - case HASHTYPE_CHECKSUM: - default: - { - uint32_t numChar=calcChecksum(pic, decodedPictureHashSEI->m_pictureHash, bitDepths); - rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); - } - break; + case HashType::MD5: + { + uint32_t numChar = calcMD5(pic, decodedPictureHashSEI->m_pictureHash, bitDepths); + rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); + break; + } + break; + case HashType::CRC: + { + uint32_t numChar = calcCRC(pic, decodedPictureHashSEI->m_pictureHash, bitDepths); + rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); + break; + } + case HashType::CHECKSUM: + default: + { + uint32_t numChar = calcChecksum(pic, decodedPictureHashSEI->m_pictureHash, bitDepths); + rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); + break; + } } } diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index 20f104b3556c4f5a10367e6024b01ce03edc4fd3..0c899d49809cf7e38f098c1837907246381151ea 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -270,15 +270,23 @@ void SEIWriter::xWriteSEIDecodedPictureHash(const SEIDecodedPictureHash& sei) const char *traceString="\0"; switch (sei.method) { - case HASHTYPE_MD5: traceString="picture_md5"; break; - case HASHTYPE_CRC: traceString="picture_crc"; break; - case HASHTYPE_CHECKSUM: traceString="picture_checksum"; break; - default: THROW("Unknown hash type"); break; + case HashType::MD5: + traceString = "picture_md5"; + break; + case HashType::CRC: + traceString = "picture_crc"; + break; + case HashType::CHECKSUM: + traceString = "picture_checksum"; + break; + default: + THROW("Unknown hash type"); + break; } if (traceString != 0) //use of this variable is needed to avoid a compiler error with G++ 4.6.1 { - WRITE_CODE(sei.method, 8, "dph_sei_hash_type"); + WRITE_CODE(to_underlying(sei.method), 8, "dph_sei_hash_type"); WRITE_CODE(sei.singleCompFlag, 1, "dph_sei_single_component_flag"); WRITE_CODE(0, 7, "dph_sei_reserved_zero_7bits"); for(uint32_t i=0; i<uint32_t(sei.m_pictureHash.hash.size()); i++)