On Thu, Apr 3, 2014 at 6:55 AM,  <[email protected]> wrote:
> # HG changeset patch
> # User Gopu Govindaswamy
> # Date 1396526097 -19800
> #      Thu Apr 03 17:24:57 2014 +0530
> # Node ID 817e8c607eab5cc48501491c066da38f163e0e1c
> # Parent  c0362b478e23777120ee2cf3c286ca1f2e740018

This commit message is much better, thanks.  I've queued this version
of the patch with the commit message reflowed to 80-char margins

> frameencoder: store the reference state of the picture to FrameEncoder Member 
> variable(m_isReferenced)

try to keep summary lines under 80 chars.  In the TortoiseHg settings
dialog, commit tab, you can set "Summary Line Length" to 80.  This
will draw a red line in the commit message entry widget, showing you
where the limit is.  Obeying the limit is still voluntary, but you
should try to keep the summary succinct and under 80 chars

> 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_isReferenced and
> when the QP is calculate for CU, refer the reference state of the frame from 
> FrameEncoder->m_isReferenced
> this stat will never change during the encode
> Moved slice reference state initialization from dpb to FrameEncoder 
> initSlice()
>

similarly the paragraphs in the longer explanation should be
line-wrapped at 80 chars where possible.  CTRL-E in the commit tool
will reflow paragraphs for you to meet the summary line length
requirement.

> diff -r c0362b478e23 -r 817e8c607eab 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 17:24:57 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 817e8c607eab 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 17:24:57 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 817e8c607eab 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 17:24:57 2014 +0530
> @@ -190,6 +190,7 @@
>      int                      m_filterRowDelay;
>      Event                    m_completionEvent;
>      int64_t                  m_totalTime;
> +    bool                     m_isReferenced;
>  };
>  }
>
> _______________________________________________
> x265-devel mailing list
> [email protected]
> https://mailman.videolan.org/listinfo/x265-devel



-- 
Steve Borho
_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel

Reply via email to