On Tue, Sep 18, 2018 at 4:35 PM <as...@multicorewareinc.com> wrote: > # HG changeset patch > # User Ashok Kumar Mishra <as...@multicorewareinc.com> > # Date 1537268644 -19800 > # Tue Sep 18 16:34:04 2018 +0530 > # Node ID 6426e22f479f10a07d606119dede0da844fb5015 > # Parent 1582bba2eb394348b671c7005d965ef911a6bb40 > remove duplicate code from FrameFilter > > diff -r 1582bba2eb39 -r 6426e22f479f source/encoder/frameencoder.cpp > --- a/source/encoder/frameencoder.cpp Fri Sep 14 17:18:07 2018 +0530 > +++ b/source/encoder/frameencoder.cpp Tue Sep 18 16:34:04 2018 +0530 > @@ -365,6 +365,40 @@ > return length; > } > > +void FrameEncoder::writeTrailingSEIMessages() > +{ > + Slice* slice = m_frame->m_encData->m_slice; > + int planes = (m_param->internalCsp != X265_CSP_I400) ? 3 : 1; > + int32_t payloadSize = 0; > + > + if (m_param->decodedPictureHashSEI == 1) > + { > + m_seiReconPictureDigest.m_method = SEIDecodedPictureHash::MD5; > + for (int i = 0; i < planes; i++) > + MD5Final(&m_seiReconPictureDigest.m_state[i], > m_seiReconPictureDigest.m_digest[i]); > + payloadSize = 1 + 16 * planes; > + } > + else if (m_param->decodedPictureHashSEI == 2) > + { > + m_seiReconPictureDigest.m_method = SEIDecodedPictureHash::CRC; > + for (int i = 0; i < planes; i++) > + crcFinish(m_seiReconPictureDigest.m_crc[i], > m_seiReconPictureDigest.m_digest[i]); > + payloadSize = 1 + 2 * planes; > + } > + else if (m_param->decodedPictureHashSEI == 3) > + { > + m_seiReconPictureDigest.m_method = > SEIDecodedPictureHash::CHECKSUM; > + for (int i = 0; i < planes; i++) > + checksumFinish(m_seiReconPictureDigest.m_checksum[i], > m_seiReconPictureDigest.m_digest[i]); > + payloadSize = 1 + 4 * planes; > + } > + > + m_bs.resetBits(); > + m_seiReconPictureDigest.setSize(payloadSize); > + m_seiReconPictureDigest.write(m_bs, *slice->m_sps); > + m_seiReconPictureDigest.alignAndSerialize(m_bs, true, > m_param->bSingleSeiNal, NAL_UNIT_SUFFIX_SEI, m_nalList); > +} > + > void FrameEncoder::compressFrame() > { > ProfileScopeEvent(frameThread); > @@ -890,71 +924,8 @@ > { > PicYuv *reconPic = m_frame->m_reconPic; > uint32_t height = reconPic->m_picHeight; > - uint32_t width = reconPic->m_picWidth; > - intptr_t stride = reconPic->m_stride; > - const uint32_t hChromaShift = > CHROMA_H_SHIFT(m_param->internalCsp); > - const uint32_t vChromaShift = > CHROMA_V_SHIFT(m_param->internalCsp); > - > - if (m_param->decodedPictureHashSEI == 1) > - { > - > - MD5Init(&m_state[0]); > - > - updateMD5Plane(m_state[0], reconPic->m_picOrg[0], width, > height, stride); > - > - if (m_param->internalCsp != X265_CSP_I400) > - { > - MD5Init(&m_state[1]); > - MD5Init(&m_state[2]); > - > - width >>= hChromaShift; > - height >>= vChromaShift; > - stride = reconPic->m_strideC; > - > - updateMD5Plane(m_state[1], reconPic->m_picOrg[1], width, > height, stride); > - updateMD5Plane(m_state[2], reconPic->m_picOrg[2], width, > height, stride); > - } > - } > - // TODO: NOT verify code in below mode > - else if (m_param->decodedPictureHashSEI == 2) > - { > - m_crc[0] = 0xffff; > - > - updateCRC(reconPic->m_picOrg[0], m_crc[0], height, width, > stride); > - > - if (m_param->internalCsp != X265_CSP_I400) > - { > - width >>= hChromaShift; > - height >>= vChromaShift; > - stride = reconPic->m_strideC; > - m_crc[1] = m_crc[2] = 0xffff; > - > - updateCRC(reconPic->m_picOrg[1], m_crc[1], height, width, > stride); > - updateCRC(reconPic->m_picOrg[2], m_crc[2], height, width, > stride); > - } > - } > - else if (m_param->decodedPictureHashSEI == 3) > - { > - uint32_t cuHeight = m_param->maxCUSize; > - > - m_checksum[0] = 0; > - > - updateChecksum(reconPic->m_picOrg[0], m_checksum[0], height, > width, stride, 0, cuHeight); > - > - if (m_param->internalCsp != X265_CSP_I400) > - { > - width >>= hChromaShift; > - height >>= vChromaShift; > - stride = reconPic->m_strideC; > - cuHeight >>= vChromaShift; > - > - m_checksum[1] = m_checksum[2] = 0; > - > - updateChecksum(reconPic->m_picOrg[1], m_checksum[1], > height, width, stride, 0, cuHeight); > - updateChecksum(reconPic->m_picOrg[2], m_checksum[2], > height, width, stride, 0, cuHeight); > - } > - } > - } // end of (m_param->maxSlices > 1) > + initDecodedPictureHashSEI(0, 0, height); > + } > > if (m_param->bDynamicRefine && m_top->m_startPoint <= > m_frame->m_encodeOrder) //Avoid collecting data that will not be used by > future frames. > collectDynDataFrame(); > @@ -1045,8 +1016,6 @@ > m_bs.resetBits(); > > const uint32_t sliceAddr = nextSliceRow * m_numCols; > - //CUData* ctu = m_frame->m_encData->getPicCTU(sliceAddr); > - //const int sliceQp = ctu->m_qp[0]; > if (m_param->bOptRefListLengthPPS) > { > ScopedLock refIdxLock(m_top->m_sliceRefIdxLock); > @@ -1095,36 +1064,8 @@ > if (isSei && m_param->bSingleSeiNal) > m_bs.resetBits(); > > - if (m_param->decodedPictureHashSEI) > - { > - int planes = (m_frame->m_param->internalCsp != X265_CSP_I400) ? 3 > : 1; > - int32_t payloadSize = 0; > - if (m_param->decodedPictureHashSEI == 1) > - { > - m_seiReconPictureDigest.m_method = SEIDecodedPictureHash::MD5; > - for (int i = 0; i < planes; i++) > - MD5Final(&m_state[i], > m_seiReconPictureDigest.m_digest[i]); > - payloadSize = 1 + 16 * planes; > - } > - else if (m_param->decodedPictureHashSEI == 2) > - { > - m_seiReconPictureDigest.m_method = SEIDecodedPictureHash::CRC; > - for (int i = 0; i < planes; i++) > - crcFinish(m_crc[i], m_seiReconPictureDigest.m_digest[i]); > - payloadSize = 1 + 2 * planes; > - } > - else if (m_param->decodedPictureHashSEI == 3) > - { > - m_seiReconPictureDigest.m_method = > SEIDecodedPictureHash::CHECKSUM; > - for (int i = 0; i < planes; i++) > - checksumFinish(m_checksum[i], > m_seiReconPictureDigest.m_digest[i]); > - payloadSize = 1 + 4 * planes; > - } > - m_bs.resetBits(); > - m_seiReconPictureDigest.setSize(payloadSize); > - m_seiReconPictureDigest.write(m_bs, *slice->m_sps); > - m_seiReconPictureDigest.alignAndSerialize(m_bs, true, > m_param->bSingleSeiNal, NAL_UNIT_SUFFIX_SEI, m_nalList); > - } > + if (m_param->decodedPictureHashSEI) > + writeTrailingSEIMessages(); > > uint64_t bytes = 0; > for (uint32_t i = 0; i < m_nalList.m_numNal; i++) > @@ -1216,6 +1157,78 @@ > m_endFrameTime = x265_mdate(); > } > > +void FrameEncoder::initDecodedPictureHashSEI(int row, int cuAddr, int > height) > +{ > + PicYuv *reconPic = m_frame->m_reconPic; > + uint32_t width = reconPic->m_picWidth; > + intptr_t stride = reconPic->m_stride; > + uint32_t maxCUHeight = m_param->maxCUSize; > + > + const uint32_t hChromaShift = CHROMA_H_SHIFT(m_param->internalCsp); > + const uint32_t vChromaShift = CHROMA_V_SHIFT(m_param->internalCsp); > + > + if (m_param->decodedPictureHashSEI == 1) > + { > + if (!row) > + MD5Init(&m_seiReconPictureDigest.m_state[0]); > + > + updateMD5Plane(m_seiReconPictureDigest.m_state[0], > reconPic->getLumaAddr(cuAddr), width, height, stride); > + if (m_param->internalCsp != X265_CSP_I400) > + { > + if (!row) > + { > + MD5Init(&m_seiReconPictureDigest.m_state[1]); > + MD5Init(&m_seiReconPictureDigest.m_state[2]); > + } > + > + width >>= hChromaShift; > + height >>= vChromaShift; > + stride = reconPic->m_strideC; > + > + updateMD5Plane(m_seiReconPictureDigest.m_state[1], > reconPic->getCbAddr(cuAddr), width, height, stride); > + updateMD5Plane(m_seiReconPictureDigest.m_state[2], > reconPic->getCrAddr(cuAddr), width, height, stride); > + } > + } > + else if (m_param->decodedPictureHashSEI == 2) > + { > + > + if (!row) > + m_seiReconPictureDigest.m_crc[0] = 0xffff; > + > + updateCRC(reconPic->getLumaAddr(cuAddr), > m_seiReconPictureDigest.m_crc[0], height, width, stride); > + if (m_param->internalCsp != X265_CSP_I400) > + { > + width >>= hChromaShift; > + height >>= vChromaShift; > + stride = reconPic->m_strideC; > + m_seiReconPictureDigest.m_crc[1] = > m_seiReconPictureDigest.m_crc[2] = 0xffff; > + > + updateCRC(reconPic->getCbAddr(cuAddr), > m_seiReconPictureDigest.m_crc[1], height, width, stride); > + updateCRC(reconPic->getCrAddr(cuAddr), > m_seiReconPictureDigest.m_crc[2], height, width, stride); > + } > + } > + else if (m_param->decodedPictureHashSEI == 3) > + { > + if (!row) > + m_seiReconPictureDigest.m_checksum[0] = 0; > + > + updateChecksum(reconPic->m_picOrg[0], > m_seiReconPictureDigest.m_checksum[0], height, width, stride, row, > maxCUHeight); > + if (m_param->internalCsp != X265_CSP_I400) > + { > + width >>= hChromaShift; > + height >>= vChromaShift; > + stride = reconPic->m_strideC; > + maxCUHeight >>= vChromaShift; > + > + if (!row) > + m_seiReconPictureDigest.m_checksum[1] = > m_seiReconPictureDigest.m_checksum[2] = 0; > + > + updateChecksum(reconPic->m_picOrg[1], > m_seiReconPictureDigest.m_checksum[1], height, width, stride, row, > maxCUHeight); > + updateChecksum(reconPic->m_picOrg[2], > m_seiReconPictureDigest.m_checksum[2], height, width, stride, row, > maxCUHeight); > + } > + } > +} > + > void FrameEncoder::encodeSlice(uint32_t sliceAddr) > { > Slice* slice = m_frame->m_encData->m_slice; > diff -r 1582bba2eb39 -r 6426e22f479f source/encoder/frameencoder.h > --- a/source/encoder/frameencoder.h Fri Sep 14 17:18:07 2018 +0530 > +++ b/source/encoder/frameencoder.h Tue Sep 18 16:34:04 2018 +0530 > @@ -129,6 +129,8 @@ > /* blocks until worker thread is done, returns access unit */ > Frame *getEncodedPicture(NALList& list); > > + void initDecodedPictureHashSEI(int row, int cuAddr, int height); > + > Event m_enable; > Event m_done; > Event m_completionEvent; > @@ -161,9 +163,6 @@ > double m_ssim; > uint64_t m_accessUnitBits; > uint32_t m_ssimCnt; > - MD5Context m_state[3]; > - uint32_t m_crc[3]; > - uint32_t m_checksum[3]; > > volatile int m_activeWorkerCount; // count of > workers currently encoding or filtering CTUs > volatile int m_totalActiveWorkerCount; // sum of > m_activeWorkerCount sampled at end of each CTU > @@ -230,7 +229,7 @@ > void threadMain(); > int collectCTUStatistics(const CUData& ctu, FrameStats* frameLog); > void noiseReductionUpdate(); > - void computeAvgTrainingData(); > + void writeTrailingSEIMessages(); > > /* Called by WaveFront::findJob() */ > virtual void processRow(int row, int threadId); > @@ -243,8 +242,9 @@ > #if ENABLE_LIBVMAF > void vmafFrameLevelScore(); > #endif > - void collectDynDataRow(CUData& ctu, FrameStats* rowStats); > void collectDynDataFrame(); > + void computeAvgTrainingData(); > + void collectDynDataRow(CUData& ctu, FrameStats* rowStats); > }; > } > > diff -r 1582bba2eb39 -r 6426e22f479f source/encoder/framefilter.cpp > --- a/source/encoder/framefilter.cpp Fri Sep 14 17:18:07 2018 +0530 > +++ b/source/encoder/framefilter.cpp Tue Sep 18 16:34:04 2018 +0530 > @@ -712,78 +712,8 @@ > > if (m_param->maxSlices == 1) > { > - if (m_param->decodedPictureHashSEI == 1) > - { > - uint32_t height = m_parallelFilter[row].getCUHeight(); > - uint32_t width = reconPic->m_picWidth; > - intptr_t stride = reconPic->m_stride; > - > - if (!row) > - MD5Init(&m_frameEncoder->m_state[0]); > - > - updateMD5Plane(m_frameEncoder->m_state[0], > reconPic->getLumaAddr(cuAddr), width, height, stride); > - if (m_param->internalCsp != X265_CSP_I400) > - { > - if (!row) > - { > - MD5Init(&m_frameEncoder->m_state[1]); > - MD5Init(&m_frameEncoder->m_state[2]); > - } > - > - width >>= m_hChromaShift; > - height >>= m_vChromaShift; > - stride = reconPic->m_strideC; > - > - updateMD5Plane(m_frameEncoder->m_state[1], > reconPic->getCbAddr(cuAddr), width, height, stride); > - updateMD5Plane(m_frameEncoder->m_state[2], > reconPic->getCrAddr(cuAddr), width, height, stride); > - } > - } > - else if (m_param->decodedPictureHashSEI == 2) > - { > - uint32_t height = m_parallelFilter[row].getCUHeight(); > - uint32_t width = reconPic->m_picWidth; > - intptr_t stride = reconPic->m_stride; > - > - if (!row) > - m_frameEncoder->m_crc[0] = 0xffff; > - > - updateCRC(reconPic->getLumaAddr(cuAddr), > m_frameEncoder->m_crc[0], height, width, stride); > - if (m_param->internalCsp != X265_CSP_I400) > - { > - width >>= m_hChromaShift; > - height >>= m_vChromaShift; > - stride = reconPic->m_strideC; > - m_frameEncoder->m_crc[1] = m_frameEncoder->m_crc[2] = > 0xffff; > - > - updateCRC(reconPic->getCbAddr(cuAddr), > m_frameEncoder->m_crc[1], height, width, stride); > - updateCRC(reconPic->getCrAddr(cuAddr), > m_frameEncoder->m_crc[2], height, width, stride); > - } > - } > - else if (m_param->decodedPictureHashSEI == 3) > - { > - uint32_t width = reconPic->m_picWidth; > - uint32_t height = m_parallelFilter[row].getCUHeight(); > - intptr_t stride = reconPic->m_stride; > - uint32_t cuHeight = m_param->maxCUSize; > - > - if (!row) > - m_frameEncoder->m_checksum[0] = 0; > - > - updateChecksum(reconPic->m_picOrg[0], > m_frameEncoder->m_checksum[0], height, width, stride, row, cuHeight); > - if (m_param->internalCsp != X265_CSP_I400) > - { > - width >>= m_hChromaShift; > - height >>= m_vChromaShift; > - stride = reconPic->m_strideC; > - cuHeight >>= m_vChromaShift; > - > - if (!row) > - m_frameEncoder->m_checksum[1] = > m_frameEncoder->m_checksum[2] = 0; > - > - updateChecksum(reconPic->m_picOrg[1], > m_frameEncoder->m_checksum[1], height, width, stride, row, cuHeight); > - updateChecksum(reconPic->m_picOrg[2], > m_frameEncoder->m_checksum[2], height, width, stride, row, cuHeight); > - } > - } > + uint32_t height = m_parallelFilter[row].getCUHeight(); > + m_frameEncoder->initDecodedPictureHashSEI(row, cuAddr, height); > } // end of (m_param->maxSlices == 1) > > if (ATOMIC_INC(&m_frameEncoder->m_completionCount) == 2 * > (int)m_frameEncoder->m_numRows) > diff -r 1582bba2eb39 -r 6426e22f479f source/encoder/sei.h > --- a/source/encoder/sei.h Fri Sep 14 17:18:07 2018 +0530 > +++ b/source/encoder/sei.h Tue Sep 18 16:34:04 2018 +0530 > @@ -28,6 +28,7 @@ > #include "bitstream.h" > #include "slice.h" > #include "nal.h" > +#include "md5.h" > > namespace X265_NS { > // private namespace > @@ -136,7 +137,12 @@ > CRC, > CHECKSUM, > } m_method; > - uint8_t m_digest[3][16]; > + > + MD5Context m_state[3]; > + uint32_t m_crc[3]; > + uint32_t m_checksum[3]; > + uint8_t m_digest[3][16]; > + > void writeSEI(const SPS& sps) > { > int planes = (sps.chromaFormatIdc != X265_CSP_I400) ? 3 : 1; >
Pushed to default.
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel