[x265] [PATCH] frameencoder: store the reference state of the picture to FrameEncoder Member variable(m_keptAsRef)
Gopu Govindaswamy
gopu at multicorewareinc.com
Thu Apr 3 14:04:12 CEST 2014
Please Ignore this patch, I have sent an another patch, the member variable
name and commit message has been changed a bit
Thanks
On Thu, Apr 3, 2014 at 4:57 PM, <gopu at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Gopu Govindaswamy
> # Date 1396524444 -19800
> # Thu Apr 03 16:57:24 2014 +0530
> # Node ID 099c17e87f7318c62b6f6323dfc0b84e8ff5f076
> # Parent c0362b478e23777120ee2cf3c286ca1f2e740018
> frameencoder: store the reference state of the picture to FrameEncoder
> Member variable(m_keptAsRef)
>
> We find that reference state of the reference frame changed during the
> encode when we use frame-thread > 1
> this cause the CU level QP for the frame is non-deterministic, this is
> leading the non-deterministic
> encoded output for the frame, to avoid this store the reference state of
> the frame to FrameEncoder->m_keptAsRef and
> when the QP is calculate for CU, refer the reference state of the frame
> from FrameEncoder->m_keptAsRef
> this stat will never change during the encode
>
> Moved slice reference state initialization from dpb to FrameEncoder
> initSlice()
>
> diff -r c0362b478e23 -r 099c17e87f73 source/encoder/dpb.cpp
> --- a/source/encoder/dpb.cpp Wed Apr 02 22:52:19 2014 -0500
> +++ b/source/encoder/dpb.cpp Thu Apr 03 16:57:24 2014 +0530
> @@ -79,17 +79,6 @@
> m_lastIDR = pocCurr;
> }
> slice->setLastIDR(m_lastIDR);
> -
> - if (slice->getSliceType() != B_SLICE)
> - slice->setReferenced(true);
> - else
> - {
> - if (pic->m_lowres.sliceType == X265_TYPE_BREF)
> - slice->setReferenced(true);
> - else
> - slice->setReferenced(false);
> - }
> -
> slice->setTemporalLayerNonReferenceFlag(!slice->isReferenced());
> // Set the nal unit type
> slice->setNalUnitType(getNalUnitType(pocCurr, m_lastIDR, pic));
> diff -r c0362b478e23 -r 099c17e87f73 source/encoder/frameencoder.cpp
> --- a/source/encoder/frameencoder.cpp Wed Apr 02 22:52:19 2014 -0500
> +++ b/source/encoder/frameencoder.cpp Thu Apr 03 16:57:24 2014 +0530
> @@ -265,7 +265,18 @@
> int type = pic->m_lowres.sliceType;
> SliceType sliceType = IS_X265_TYPE_B(type) ? B_SLICE : ((type ==
> X265_TYPE_P) ? P_SLICE : I_SLICE);
> slice->setSliceType(sliceType);
> - slice->setReferenced(true);
> +
> + if (sliceType != B_SLICE)
> + m_isReferenced = true;
> + else
> + {
> + if (pic->m_lowres.sliceType == X265_TYPE_BREF)
> + m_isReferenced = true;
> + else
> + m_isReferenced = false;
> + }
> + slice->setReferenced(m_isReferenced);
> +
> slice->setScalingList(m_top->getScalingList());
>
> slice->getScalingList()->setUseTransformSkip(m_pps.getUseTransformSkip());
> #if LOG_CU_STATISTICS
> @@ -1229,9 +1240,8 @@
> int block_x = (cuAddr * noOfBlocks) - block_y *
> m_pic->getPicSym()->getFrameWidthInCU();
>
> /* Use cuTree offsets in m_pic->m_lowres.qpOffset if cuTree enabled
> and
> - * frame is referenced (if P, ignore ref state). Else use AQ offsets
> */
> - double *qpoffs = ((m_pic->getSlice()->isReferenced() ||
> m_pic->getSlice()->getSliceType() == P_SLICE) && m_cfg->param->rc.cuTree) ?
> - m_pic->m_lowres.qpOffset :
> m_pic->m_lowres.qpAqOffset;
> + * frame is referenced Else use AQ offsets */
> + double *qpoffs = (m_isReferenced && m_cfg->param->rc.cuTree) ?
> m_pic->m_lowres.qpOffset : m_pic->m_lowres.qpAqOffset;
>
> int cnt = 0, idx = 0;
> for (int h = 0; h < noOfBlocks && block_y < maxBlockRows; h++,
> block_y++)
> diff -r c0362b478e23 -r 099c17e87f73 source/encoder/frameencoder.h
> --- a/source/encoder/frameencoder.h Wed Apr 02 22:52:19 2014 -0500
> +++ b/source/encoder/frameencoder.h Thu Apr 03 16:57:24 2014 +0530
> @@ -190,6 +190,7 @@
> int m_filterRowDelay;
> Event m_completionEvent;
> int64_t m_totalTime;
> + bool m_isReferenced;
> };
> }
>
>
--
Thanks & Regards
Gopu G
Multicoreware Inc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20140403/d5f2fbca/attachment.html>
More information about the x265-devel
mailing list