<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Shouldn’t it be </span>X265_MAX(m_numReorderPics[i]<b> + 2</b>, _param->maxNumReferences<b>+1</b>) <span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>?<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Unlike H.264, the picture is added to the DPB before being decoded (so the current picture always takes up one slot in the DPB)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Olivier<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> x265-devel [mailto:x265-devel-bounces@videolan.org] <b>On Behalf Of </b>Steve Borho<br><b>Sent:</b> Wednesday, September 25, 2013 3:12 PM<br><b>To:</b> Development for x265<br><b>Subject:</b> Re: [x265] [PATCH] Added support for multiple references<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal style='margin-bottom:12.0pt'><o:p> </o:p></p><div><p class=MsoNormal>On Wed, Sep 25, 2013 at 6:06 AM, Shazeb Khan <<a href="mailto:shazeb@multicorewareinc.com" target="_blank">shazeb@multicorewareinc.com</a>> wrote:<o:p></o:p></p><div><div><div><p class=MsoNormal># HG changeset patch<o:p></o:p></p></div><div><p class=MsoNormal># User Shazeb Nawaz Khan <<a href="mailto:shazeb@multicorewareinc.com" target="_blank">shazeb@multicorewareinc.com</a>><o:p></o:p></p></div><div><p class=MsoNormal># Date 1380099889 -19800<o:p></o:p></p></div><div><p class=MsoNormal>#      Wed Sep 25 14:34:49 2013 +0530<o:p></o:p></p></div></div><div><p class=MsoNormal># Node ID 0cc1b50c7d500c182332f09fc66420002909d5ec<o:p></o:p></p></div><div><p class=MsoNormal># Parent  4d0ced5c64fed290302b730ef8ac7d8613420a0d<o:p></o:p></p></div><div><div><p class=MsoNormal>Added support for multiple references<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Added a commandline parameter '--ref <max number of references>'. DPB size adjusted to use number of references.<o:p></o:p></p></div></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>This patch was line wrap damaged, but I've queued a corrected version for default.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>As a follow-up, we need to display maxrefs in the logs, especially if it is larger than 1.<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><div><div><div><p class=MsoNormal><o:p> </o:p></p></div></div><div><p class=MsoNormal>diff -r 4d0ced5c64fe -r 0cc1b50c7d50 source/common/common.cpp<o:p></o:p></p></div><div><p class=MsoNormal>--- a/source/common/common.cpp Wed Sep 25 11:33:50 2013 +0530<o:p></o:p></p></div><div><div><p class=MsoNormal>+++ b/source/common/common.cpp Wed Sep 25 14:34:49 2013 +0530<o:p></o:p></p></div></div><div><p class=MsoNormal>@@ -160,7 +160,7 @@<o:p></o:p></p></div><div><div><p class=MsoNormal>     param->bEnableSignHiding = 1;<o:p></o:p></p></div><div><p class=MsoNormal>     param->bEnableTransformSkip = 1;<o:p></o:p></p></div><div><p class=MsoNormal>     param->bEnableTSkipFast = 1;<o:p></o:p></p></div><div><p class=MsoNormal>-<o:p></o:p></p></div><div><p class=MsoNormal>+    param->maxNumReferences = 1;<o:p></o:p></p></div><div><p class=MsoNormal>     /* Loop Filter */<o:p></o:p></p></div><div><p class=MsoNormal>     param->bEnableLoopFilter = 1;<o:p></o:p></p></div><div><p class=MsoNormal>     <o:p></o:p></p></div></div><div><p class=MsoNormal>diff -r 4d0ced5c64fe -r 0cc1b50c7d50 source/encoder/dpb.h<o:p></o:p></p></div><div><p class=MsoNormal>--- a/source/encoder/dpb.h Wed Sep 25 11:33:50 2013 +0530<o:p></o:p></p></div><div><div><p class=MsoNormal>+++ b/source/encoder/dpb.h Wed Sep 25 14:34:49 2013 +0530<o:p></o:p></p></div></div><div><p class=MsoNormal>@@ -52,10 +52,9 @@<o:p></o:p></p></div><div><div><p class=MsoNormal>         m_lastIDR = 0;<o:p></o:p></p></div><div><p class=MsoNormal>         m_pocCRA = 0;<o:p></o:p></p></div><div><p class=MsoNormal>         m_bRefreshPending = false;<o:p></o:p></p></div><div><p class=MsoNormal>-        m_maxRefL0 = 1;             //TODO: This values should later be fetched from input params<o:p></o:p></p></div><div><p class=MsoNormal>+        m_maxRefL0 = cfg->param.maxNumReferences;<o:p></o:p></p></div><div><p class=MsoNormal>         m_maxRefL1 = 1;<o:p></o:p></p></div><div><p class=MsoNormal>     }<o:p></o:p></p></div></div><div><p class=MsoNormal>-<o:p></o:p></p></div><div><p class=MsoNormal>     ~DPB();<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>     void prepareEncode(TComPic*);<o:p></o:p></p></div><div><p class=MsoNormal>diff -r 4d0ced5c64fe -r 0cc1b50c7d50 source/encoder/encoder.cpp<o:p></o:p></p></div><div><p class=MsoNormal>--- a/source/encoder/encoder.cpp Wed Sep 25 11:33:50 2013 +0530<o:p></o:p></p></div><div><div><p class=MsoNormal>+++ b/source/encoder/encoder.cpp Wed Sep 25 14:34:49 2013 +0530<o:p></o:p></p></div><div><p class=MsoNormal>@@ -263,8 +263,8 @@<o:p></o:p></p></div><div><p class=MsoNormal>     vps.setMaxLayers(1);<o:p></o:p></p></div><div><p class=MsoNormal>     for (int i = 0; i < MAX_TLAYER; i++)<o:p></o:p></p></div><div><p class=MsoNormal>     {<o:p></o:p></p></div><div><p class=MsoNormal>-        m_numReorderPics[i] = _param->bframes;<o:p></o:p></p></div><div><p class=MsoNormal>-        m_maxDecPicBuffering[i] = _param->bframes + 2;<o:p></o:p></p></div><div><p class=MsoNormal>+        m_numReorderPics[i] = 1;<o:p></o:p></p></div><div><p class=MsoNormal>+        m_maxDecPicBuffering[i] = X265_MIN(MAX_NUM_REF, X265_MAX(m_numReorderPics[i] + 1, _param->maxNumReferences));<o:p></o:p></p></div><div><p class=MsoNormal>         vps.setNumReorderPics(m_numReorderPics[i], i);<o:p></o:p></p></div><div><p class=MsoNormal>         vps.setMaxDecPicBuffering(m_maxDecPicBuffering[i], i);<o:p></o:p></p></div><div><p class=MsoNormal>     }<o:p></o:p></p></div></div><div><p class=MsoNormal>diff -r 4d0ced5c64fe -r 0cc1b50c7d50 source/x265.h<o:p></o:p></p></div><div><p class=MsoNormal>--- a/source/x265.h Wed Sep 25 11:33:50 2013 +0530<o:p></o:p></p></div><div><div><p class=MsoNormal>+++ b/source/x265.h Wed Sep 25 14:34:49 2013 +0530<o:p></o:p></p></div></div><div><p class=MsoNormal>@@ -248,7 +248,7 @@<o:p></o:p></p></div><div><div><p class=MsoNormal>     int       bEnableTransformSkip;            ///< enable intra transform skipping<o:p></o:p></p></div><div><p class=MsoNormal>     int       bEnableTSkipFast;                ///< enable fast intra transform skipping<o:p></o:p></p></div><div><p class=MsoNormal>     int       bEnableRDOQTS;                   ///< enable RD optimized quantization when transform skip is selected<o:p></o:p></p></div><div><p class=MsoNormal>-<o:p></o:p></p></div><div><p class=MsoNormal>+    int       maxNumReferences;                ///< maximum number of references a frame can have in L0<o:p></o:p></p></div><div><p class=MsoNormal>     // loop filter<o:p></o:p></p></div><div><p class=MsoNormal>     int       bEnableLoopFilter;               ///< enable Loop Filter<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><p class=MsoNormal>diff -r 4d0ced5c64fe -r 0cc1b50c7d50 source/x265opts.h<o:p></o:p></p></div><div><p class=MsoNormal>--- a/source/x265opts.h Wed Sep 25 11:33:50 2013 +0530<o:p></o:p></p></div><div><div><p class=MsoNormal>+++ b/source/x265opts.h Wed Sep 25 14:34:49 2013 +0530<o:p></o:p></p></div><div><p class=MsoNormal>@@ -66,6 +66,7 @@<o:p></o:p></p></div><div><p class=MsoNormal> OPT("bframes",         param->bframes,                required_argument, 'b', "Maximum number of consecutive b-frames (now it only enables B GOP structure)")<o:p></o:p></p></div><div><p class=MsoNormal> OPT("bframe-bias",     param->bFrameBias,             required_argument, 0, "Bias towards B frame decisions")<o:p></o:p></p></div><div><p class=MsoNormal> OPT("b-adapt",         param->bFrameAdaptive,         required_argument, 0, "0 - none, 1 - fast, 2 - full (trellis) adaptive B frame scheduling")<o:p></o:p></p></div><div><p class=MsoNormal>+OPT("ref",             param->maxNumReferences,       required_argument, 0, "max number of references to be allowed (1 .. 16) ")<o:p></o:p></p></div><div><p class=MsoNormal> // Disabled because weighted uni-prediction was busted by not using<o:p></o:p></p></div><div><p class=MsoNormal> // pre-generated planes in motion compensation<o:p></o:p></p></div><div><p class=MsoNormal> //OPT("no-weightp",      param->bEnableWeightedPred,          no_argument, 0, "Disable weighted prediction in P slices")<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><br>_______________________________________________<br>x265-devel mailing list<br><a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br><a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><o:p></o:p></p></blockquote></div><p class=MsoNormal><br><br clear=all><o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>-- <br>Steve Borho <o:p></o:p></p></div></div></div>
<DIV>
<HR>
</DIV>
<DIV>This email message is for the sole use of the intended recipient(s) and may 
contain confidential information.  Any unauthorized review, use, disclosure 
or distribution is prohibited.  If you are not the intended recipient, 
please contact the sender by reply email and destroy all copies of the original 
message. </DIV>
<DIV>
<HR>
</DIV>
</body></html>