# HG changeset patch # User Santhoshini Sekar<santhosh...@multicorewareinc.com> # Date 1446705159 -19800 # Thu Nov 05 12:02:39 2015 +0530 # Node ID b2bcb012d101d8941911dbf51235ba6d581bbb71 # Parent 3103afbd31fa9b26533f06202516a511ee221439 simplify math in intra refresh calculation (fixes #208)
diff -r 3103afbd31fa -r b2bcb012d101 source/common/framedata.h --- a/source/common/framedata.h Thu Nov 05 06:13:51 2015 +0530 +++ b/source/common/framedata.h Thu Nov 05 12:02:39 2015 +0530 @@ -137,7 +137,6 @@ /* data needed for periodic intra refresh */ struct PeriodicIR { - double position; uint32_t pirStartCol; uint32_t pirEndCol; int framesSinceLastPir; diff -r 3103afbd31fa -r b2bcb012d101 source/encoder/encoder.cpp --- a/source/encoder/encoder.cpp Thu Nov 05 06:13:51 2015 +0530 +++ b/source/encoder/encoder.cpp Thu Nov 05 12:02:39 2015 +0530 @@ -448,30 +448,29 @@ m_bQueuedIntraRefresh = 0; /* PIR is currently only supported with ref == 1, so any intra frame effectively refreshes * the whole frame and counts as an intra refresh. */ - pir->position = numBlocksInRow; + pir->pirEndCol = numBlocksInRow; } else if (slice->m_sliceType == P_SLICE) { Frame* ref = frameEnc->m_encData->m_slice->m_refFrameList[0][0]; int pocdiff = frameEnc->m_poc - ref->m_poc; - float increment = X265_MAX(((float)numBlocksInRow - 1) / m_param->keyframeMax, 1); - pir->position = ref->m_encData->m_pir.position; + int numPFramesInGOP = m_param->keyframeMax / pocdiff; + int increment = (numBlocksInRow + numPFramesInGOP - 1) / numPFramesInGOP; + pir->pirEndCol = ref->m_encData->m_pir.pirEndCol; pir->framesSinceLastPir = ref->m_encData->m_pir.framesSinceLastPir + pocdiff; if (pir->framesSinceLastPir >= m_param->keyframeMax || - (m_bQueuedIntraRefresh && pir->position + 0.5 >= numBlocksInRow)) + (m_bQueuedIntraRefresh && pir->pirEndCol >= numBlocksInRow)) { - pir->position = 0; + pir->pirEndCol = 0; pir->framesSinceLastPir = 0; m_bQueuedIntraRefresh = 0; frameEnc->m_lowres.bKeyframe = 1; } - pir->pirStartCol = (uint32_t)(pir->position + 0.5); - pir->position += increment * pocdiff; - pir->pirEndCol = (uint32_t)(pir->position + 0.5); + pir->pirStartCol = pir->pirEndCol; + pir->pirEndCol += increment; /* If our intra refresh has reached the right side of the frame, we're done. */ if (pir->pirEndCol >= numBlocksInRow) { - pir->position = numBlocksInRow; pir->pirEndCol = numBlocksInRow; } } _______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel