Re: [x265] [PATCH] RateControl : Bug fix when previous estimated frame cost is zero

2013-09-24 Thread Steve Borho
On Tue, Sep 24, 2013 at 1:33 AM, sumala...@multicorewareinc.com wrote:

 # HG changeset patch
 # User sumalatha polureddy
 # Date 1380004245 -19800
 # Node ID 759460e7afeeb7d97ea427a702ac08eb9d8a3293
 # Parent  6fa50183e0098f9e94b677ef8dc00c416f28c0f3
 RateControl : Bug fix when previous estimated frame cost is zero


queued for stable after some white-space cleanups


 diff -r 6fa50183e009 -r 759460e7afee source/encoder/ratecontrol.cpp
 --- a/source/encoder/ratecontrol.cppTue Sep 24 11:56:43 2013 +0530
 +++ b/source/encoder/ratecontrol.cppTue Sep 24 12:00:45 2013 +0530
 @@ -62,7 +62,7 @@
  lastNonBPictType = -1;
  baseQp = param-rc.qp;
  qp = baseQp;
 -
 +lastRceq = 1; // handles the cmplxrsum when the previous frame cost
 is zero
  // heuristics- encoder specific
  qCompress = param-rc.qCompress; // tweak and test for x265.
  ipFactor = param-rc.ipFactor;
 @@ -255,15 +255,20 @@
  lqmax = lastQScaleFor[pictType] * lstep;
  }
  /* Rate control needs to be more aggressive based on actual
 costs obtained for  previous encoded frame */
 -if (overflow  1.1  framesDone  3)
 -{
 -lqmax *= lstep;
 -lqmin*= pow(lstep,1/frameThreads);
 -}
 -else if (overflow  0.9)
 -{
 -lqmin /= lstep;
 -lqmax /= pow(lstep,1/frameThreads);
 +int rfAdapt = 1;
 +if (overflow  1.1  framesDone  3)
 +{
 +//Control propagation of excessive overflow / underfow
 +if(overflow  1.5)
 +rfAdapt = 2;
 +lqmax *= pow(lstep, rfAdapt);
 +}
 +else if (overflow  0.9)
 +{
 +if(overflow  0.6)
 +rfAdapt = 2;
 +lqmin /= pow(lstep, rfAdapt);
 +lqmax /= pow(lstep, rfAdapt / frameThreads);
  }
  q = Clip3(lqmin, lqmax, q);
  }
 ___
 x265-devel mailing list
 x265-devel@videolan.org
 https://mailman.videolan.org/listinfo/x265-devel




-- 
Steve Borho
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


[x265] [PATCH] Reset CABAC status to get same output between single and multi threading

2013-09-24 Thread Min Chen
# HG changeset patch
# User Min Chen chenm...@163.com
# Date 1380008038 -28800
# Node ID 24ee870a56655b89cc43c60e14aa6aadb412ead8
# Parent  ad78668116108242def30a1ce3e8d14c52323346
Reset CABAC status to get same output between single and multi threading

diff -r ad7866811610 -r 24ee870a5665 source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp   Mon Sep 23 20:09:53 2013 -0500
+++ b/source/encoder/frameencoder.cpp   Tue Sep 24 15:33:58 2013 +0800
@@ -843,6 +843,7 @@
 
 m_rows[i].m_rdSbacCoders[0][CI_CURR_BEST]-load(m_sbacCoder);
 m_rows[i].m_completed = 0;
+m_rows[i].m_rdGoOnBinCodersCABAC.m_fracBits = 0;
 }
 
 UInt refLagRows = ((m_cfg-param.searchRange + NTAPS_LUMA/2 + 
g_maxCUHeight - 1) / g_maxCUHeight) + 1;
diff -r ad7866811610 -r 24ee870a5665 source/encoder/framefilter.cpp
--- a/source/encoder/framefilter.cppMon Sep 23 20:09:53 2013 -0500
+++ b/source/encoder/framefilter.cppTue Sep 24 15:33:58 2013 +0800
@@ -85,6 +85,7 @@
 m_rdGoOnSbacCoder.init(m_rdGoOnBinCodersCABAC);
 m_entropyCoder.setEntropyCoder(m_rdGoOnSbacCoder, pic-getSlice());
 m_entropyCoder.setBitstream(m_bitCounter);
+m_rdGoOnBinCodersCABAC.m_fracBits = 0;
 
 if (m_cfg-param.bEnableLoopFilter)
 {

___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


[x265] [PATCH] Reset CABAC status to get same output between single and multi threading

2013-09-24 Thread Min Chen
# HG changeset patch
# User Min Chen chenm...@163.com
# Date 1380008038 -28800
# Node ID 24ee870a56655b89cc43c60e14aa6aadb412ead8
# Parent  ad78668116108242def30a1ce3e8d14c52323346
Reset CABAC status to get same output between single and multi threading

diff -r ad7866811610 -r 24ee870a5665 source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp   Mon Sep 23 20:09:53 2013 -0500
+++ b/source/encoder/frameencoder.cpp   Tue Sep 24 15:33:58 2013 +0800
@@ -843,6 +843,7 @@
 
 m_rows[i].m_rdSbacCoders[0][CI_CURR_BEST]-load(m_sbacCoder);
 m_rows[i].m_completed = 0;
+m_rows[i].m_rdGoOnBinCodersCABAC.m_fracBits = 0;
 }
 
 UInt refLagRows = ((m_cfg-param.searchRange + NTAPS_LUMA/2 + 
g_maxCUHeight - 1) / g_maxCUHeight) + 1;
diff -r ad7866811610 -r 24ee870a5665 source/encoder/framefilter.cpp
--- a/source/encoder/framefilter.cppMon Sep 23 20:09:53 2013 -0500
+++ b/source/encoder/framefilter.cppTue Sep 24 15:33:58 2013 +0800
@@ -85,6 +85,7 @@
 m_rdGoOnSbacCoder.init(m_rdGoOnBinCodersCABAC);
 m_entropyCoder.setEntropyCoder(m_rdGoOnSbacCoder, pic-getSlice());
 m_entropyCoder.setBitstream(m_bitCounter);
+m_rdGoOnBinCodersCABAC.m_fracBits = 0;
 
 if (m_cfg-param.bEnableLoopFilter)
 {

___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


[x265] Commit c56e392b2c68 fails to link with MinGW

2013-09-24 Thread Nikos Barkas
There is a linking problem with revision c56e392b2c68 on MinGW. The error comes 
from common.cpp and is our old friend:

undefined reference to `__sync_val_compare_and_swap_4'


The file common.cpp must be added to the list of files for which -march=i686 is 
applied in source\common\CMakeLists.txt.

Best regards
Nikos___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


Re: [x265] Commit c56e392b2c68 fails to link with MinGW

2013-09-24 Thread Deepthi Nandakumar
Thanks, pushed fix.


On Tue, Sep 24, 2013 at 2:14 PM, Nikos Barkas nikbar2...@yahoo.com wrote:

 There is a linking problem with revision c56e392b2c68 on MinGW. The error
 comes from common.cpp and is our old friend:

 undefined reference to `__sync_val_compare_and_swap_4'

 The file common.cpp must be added to the list of files for which
 -march=i686 is applied in source\common\CMakeLists.txt.

 Best regards
 Nikos

 ___
 x265-devel mailing list
 x265-devel@videolan.org
 https://mailman.videolan.org/listinfo/x265-devel


___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


[x265] [PATCH] tcomBitstream: Removed Unused std::vector class code

2013-09-24 Thread Gopu Govindaswamy
# HG changeset patch
# User Gopu Govindaswamy g...@multicorewareinc.com
# Date 1380023106 -19800
# Node ID 1752b4fce57e6e78a626642c07a1fd498c650256
# Parent  70ba2b3b7bc972ed04f5fd135d940e4759315fa8
tcomBitstream: Removed Unused std::vector class code

diff -r 70ba2b3b7bc9 -r 1752b4fce57e source/Lib/TLibCommon/TComBitStream.cpp
--- a/source/Lib/TLibCommon/TComBitStream.cpp   Tue Sep 24 16:15:10 2013 +0530
+++ b/source/Lib/TLibCommon/TComBitStream.cpp   Tue Sep 24 17:15:06 2013 +0530
@@ -208,27 +208,4 @@
 return cnt;
 }
 
-/**
- * insert the contents of the bytealigned (and flushed) bitstream src
- * into this at byte position pos.
- */
-void TComOutputBitstream::insertAt(const TComOutputBitstream src, UInt pos)
-{
-assert(0 == src.getNumberOfWrittenBits() % 8);
-
-vectoruint8_t::iterator at = this-m_fifo-begin() + pos;
-this-m_fifo-insert(at, src.m_fifo-begin(), src.m_fifo-end());
-}
-
-TComOutputBitstream TComOutputBitstream::operator =(const 
TComOutputBitstream src)
-{
-vectoruint8_t::iterator at = this-m_fifo-begin();
-this-m_fifo-insert(at, src.m_fifo-begin(), src.m_fifo-end());
-
-this-m_num_held_bits = src.m_num_held_bits;
-this-m_held_bits = src.m_held_bits;
-
-return *this;
-}
-
 //! \}
diff -r 70ba2b3b7bc9 -r 1752b4fce57e source/Lib/TLibCommon/TComBitStream.h
--- a/source/Lib/TLibCommon/TComBitStream.h Tue Sep 24 16:15:10 2013 +0530
+++ b/source/Lib/TLibCommon/TComBitStream.h Tue Sep 24 17:15:06 2013 +0530
@@ -142,16 +142,13 @@
  */
 UInt getNumberOfWrittenBits() const { return UInt(m_fifo-size()) * 8 + 
m_num_held_bits; }
 
-void insertAt(const TComOutputBitstream src, UInt pos);
-
-/**
+   /**
  * Return a reference to the internal fifo
  */
 std::vectoruint8_t getFIFO() { return *m_fifo; }
 
 UChar getHeldBits()  { return m_held_bits; }
 
-TComOutputBitstream operator =(const TComOutputBitstream src);
 /** Return a reference to the internal fifo */
 std::vectoruint8_t getFIFO() const { return *m_fifo; }
 
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


[x265] [PATCH] Encoder: do not use std::list for the class AccessUnit

2013-09-24 Thread Gopu Govindaswamy
# HG changeset patch
# User Gopu Govindaswamy g...@multicorewareinc.com
# Date 1380019510 -19800
# Node ID 70ba2b3b7bc972ed04f5fd135d940e4759315fa8
# Parent  a8f6f62217d5e519f99a004c420e5906ac900f2f
Encoder: do not use std::list for the class AccessUnit

diff -r a8f6f62217d5 -r 70ba2b3b7bc9 source/Lib/TLibEncoder/TEncTop.cpp
--- a/source/Lib/TLibEncoder/TEncTop.cppTue Sep 24 14:22:02 2013 +0530
+++ b/source/Lib/TLibEncoder/TEncTop.cppTue Sep 24 16:15:10 2013 +0530
@@ -114,14 +114,16 @@
 for (int i = 0; i  param.frameNumThreads; i++)
 {
 // Ensure frame encoder is idle before destroying it
-AccessUnit tmp;
-m_frameEncoder[i].getEncodedPicture(tmp);
-for (AccessUnit::const_iterator it = tmp.begin(); it != tmp.end(); 
it++)
+NALUnitEBSP **nalunits = NULL;
+m_frameEncoder[i].getEncodedPicture(nalunits);
+if (nalunits)
 {
-const NALUnitEBSP nalu = **it;
-free(nalu.m_nalUnitData);
+for (int nalcount = 0; nalunits[nalcount] != NULL; nalcount++)
+{
+const NALUnitEBSP nalu = *nalunits[nalcount];
+free(nalu.m_nalUnitData);
+}
 }
-
 m_frameEncoder[i].destroy();
 }
 
@@ -161,9 +163,9 @@
 }
 }
 
-int TEncTop::getStreamHeaders(AccessUnit accessUnit)
+int TEncTop::getStreamHeaders(NALUnitEBSP **nalunits)
 {
-return m_frameEncoder-getStreamHeaders(accessUnit);
+return m_frameEncoder-getStreamHeaders(nalunits);
 }
 
 /**
@@ -173,7 +175,7 @@
  \param   accessUnitsOut  output bitstream
  \retval  number of encoded pictures
  */
-int TEncTop::encode(bool flush, const x265_picture_t* pic_in, x265_picture_t 
*pic_out, AccessUnit accessUnitOut)
+int TEncTop::encode(bool flush, const x265_picture_t* pic_in, x265_picture_t 
*pic_out, NALUnitEBSP **nalunits)
 {
 if (pic_in)
 {
@@ -213,7 +215,7 @@
 // getEncodedPicture() should block until the FrameEncoder has completed
 // encoding the frame.  This is how back-pressure through the API is
 // accomplished when the encoder is full.
-TComPic *out = curEncoder-getEncodedPicture(accessUnitOut);
+TComPic *out = curEncoder-getEncodedPicture(nalunits);
 
 if (!out  flush)
 {
@@ -227,7 +229,7 @@
 {
 curEncoder = m_frameEncoder[m_curEncoder];
 m_curEncoder = (m_curEncoder + 1) % param.frameNumThreads;
-out = curEncoder-getEncodedPicture(accessUnitOut);
+out = curEncoder-getEncodedPicture(nalunits);
 }
 while (!out  flushed != m_curEncoder);
 }
@@ -259,7 +261,7 @@
 pic_out-stride[2] = recpic-getCStride();
 }
 
-double bits = calculateHashAndPSNR(out, accessUnitOut);
+double bits = calculateHashAndPSNR(out, nalunits);
 // Allow this frame to be recycled if no frame encoders are using it 
for reference
 ATOMIC_DEC(out-m_countRefEncoders);
 
@@ -487,7 +489,7 @@
 
 /* Returns Number of bits in current encoded pic */
 
-double TEncTop::calculateHashAndPSNR(TComPic* pic, AccessUnit accessUnit)
+double TEncTop::calculateHashAndPSNR(TComPic* pic, NALUnitEBSP **nalunits)
 {
 TComPicYuv* recon = pic-getPicYuvRec();
 TComPicYuv* orig  = pic-getPicYuvOrg();
@@ -544,7 +546,10 @@
 m_frameEncoder-m_seiWriter.writeSEImessage(onalu.m_Bitstream, 
sei_recon_picture_digest, pic-getSlice()-getSPS());
 writeRBSPTrailingBits(onalu.m_Bitstream);
 
-accessUnit.insert(accessUnit.end(), new NALUnitEBSP(onalu));
+int count = 0;
+while(nalunits[count] != NULL)
+count++;
+nalunits[count]-init(onalu);
 }
 
 /* calculate the size of the access unit, excluding:
@@ -552,13 +557,14 @@
  *  - SEI NAL units
  */
 UInt numRBSPBytes = 0;
-for (AccessUnit::const_iterator it = accessUnit.begin(); it != 
accessUnit.end(); it++)
+int count = 0;
+for (;nalunits[count] != NULL; count++)
 {
-UInt numRBSPBytes_nal = (*it)-m_packetSize;
+UInt numRBSPBytes_nal = nalunits[count]-m_packetSize;
 #if VERBOSE_RATE
 printf(*** %6s numBytesInNALunit: %u\n, 
nalUnitTypeToString((*it)-m_nalUnitType), numRBSPBytes_nal);
 #endif
-if ((*it)-m_nalUnitType != NAL_UNIT_PREFIX_SEI  
(*it)-m_nalUnitType != NAL_UNIT_SUFFIX_SEI)
+if (nalunits[count]-m_nalUnitType != NAL_UNIT_PREFIX_SEI  
nalunits[count]-m_nalUnitType != NAL_UNIT_SUFFIX_SEI)
 {
 numRBSPBytes += numRBSPBytes_nal;
 }
diff -r a8f6f62217d5 -r 70ba2b3b7bc9 source/Lib/TLibEncoder/TEncTop.h
--- a/source/Lib/TLibEncoder/TEncTop.h  Tue Sep 24 14:22:02 2013 +0530
+++ b/source/Lib/TLibEncoder/TEncTop.h  Tue Sep 24 16:15:10 2013 +0530
@@ -101,9 +101,9 @@
 void xInitSPS(TComSPS *sps);
 void xInitPPS(TComPPS *pps);
 
-int encode(bool bEos, const 

Re: [x265] [PATCH 1/5][RFC] Only use UNIX line endings

2013-09-24 Thread Derek Buitenhuis
On 9/24/2013 2:15 AM, Steve Borho wrote:
 I've pushed commits which affect these changes and go a bit further in a few 
 cases

... Any particular reason my commits weren't used? I even sent a PR as
you requested.

- Derek
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


Re: [x265] Bug report: incorrect computation of sps_max_dec_pic_buffering_minus1

2013-09-24 Thread Olivier Lapicque
This was the cmdline info used (Though I don't know which build of x265 was 
used):


./x265 --input ~/FILES/yuv/720p50_parkrun_ter.yuv --fps 30 --input-res 1280x720 
--refresh 2 -i 30 --bitrate 5000 -o parkrun_ter_720p30fps_5Mbps.hevc

Encoding info as printed by x265 is below.
yuv  [info]: 1280x720 30Hz, frames 0 - 49 of 50
x265 [info]: detected SIMD architectures SSE2 SSE3 SSSE3 SSE4.1 SSE4.2
x265 [info]: performance primitives: intrinsic
x265 [info]: Main profile, Level-3.1 (Main tier)
x265 [info]: WPP streams / pool / frames  : 12 / 8 / 1
x265 [info]: CU size  : 64
x265 [info]: Max RQT depth inter / intra  : 3 / 3
x265 [info]: ME / range / subpel / merge  : star / 60 / 5 / 5
x265 [info]: Keyframe min / max   : 30 / 30
x265 [info]: Rate Control : ABR-5000 kbps
x265 [info]: Lookahead len / -b / bAdapt  : 10 / 3 / 1  [Default is max 3 
consecutive B-frames, corresponding to -b 3 option]
x265 [info]: tools: rect amp rdo rdoq lft sao sao-lcu sign-hide tskip 
tskip-fast rdoqts
x265 [info]: frame I:2  kb/s: 38722.20 PSNR Mean: Y:39.782 U:43.591 V:44.109
x265 [info]: frame P:32 kb/s: 5119.59  PSNR Mean: Y:27.178 U:39.095 V:40.228
x265 [info]: frame B:16 kb/s: 1147.47  PSNR Mean: Y:26.369 U:38.924 V:40.048
x265 [info]: global:kb/s: 5192.62  PSNR Mean: Y:27.423 U:39.220 V:40.326
encoded 50 frames in 115.83s (0.43 fps), 5193.93 kb/s, Global PSNR: 30.511



From: x265-devel [mailto:x265-devel-boun...@videolan.org] On Behalf Of Deepthi 
Devaki Akkoorath
Sent: Tuesday, September 24, 2013 2:05 AM
To: Development for x265
Subject: Re: [x265] Bug report: incorrect computation of 
sps_max_dec_pic_buffering_minus1


Olivier,

I couldn't reproduce the problem with b-frames enabled. I will be able to look 
into it better once I get the exact command line.

- Deepthi

On Tue, Sep 24, 2013 at 1:25 AM, Steve Borho 
st...@borho.orgmailto:st...@borho.org wrote:


On Mon, Sep 23, 2013 at 2:38 PM, Olivier Lapicque 
olapic...@nvidia.commailto:olapic...@nvidia.com wrote:

(param-bframes+2)-1 seems correct for 1-backward and 1 forward reference 
(but seems like it would be too low for more than 2 refs).

Yeah, we haven't re-enabled multiple refs yet after plugging in the new 
lookahead.  It should happen soon, though.


The exact condition that was violated in the bitstream I saw is the following:

NumNegativePics(4) + NumPositivePics(1) + num_long_term_sps(0) + 
num_long_term_pics(0)  max_dec_pic_buffering_minus1(3)+1



I'll get the exact cmdline parameters to reproduce this, but I was told that 
this problem occurs any time B-frames are enabled.

Ah, ok.  The problem is probably with NumNegativePics then.  We'll take a look 
at this.

--
Steve Borho


___
x265-devel mailing list
x265-devel@videolan.orgmailto:x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


---
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.
---
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


Re: [x265] [PATCH] Encoder: do not use std::list for the class AccessUnit

2013-09-24 Thread Aarthi Priya Thirumalai
On Tue, Sep 24, 2013 at 5:26 PM, Gopu Govindaswamy 
g...@multicorewareinc.com wrote:

 # HG changeset patch
 # User Gopu Govindaswamy g...@multicorewareinc.com
 # Date 1380019510 -19800
 # Node ID 70ba2b3b7bc972ed04f5fd135d940e4759315fa8
 # Parent  a8f6f62217d5e519f99a004c420e5906ac900f2f
 Encoder: do not use std::list for the class AccessUnit

 diff -r a8f6f62217d5 -r 70ba2b3b7bc9 source/Lib/TLibEncoder/TEncTop.cpp
 --- a/source/Lib/TLibEncoder/TEncTop.cppTue Sep 24 14:22:02 2013
 +0530
 +++ b/source/Lib/TLibEncoder/TEncTop.cppTue Sep 24 16:15:10 2013
 +0530
 @@ -114,14 +114,16 @@
  for (int i = 0; i  param.frameNumThreads; i++)
  {
  // Ensure frame encoder is idle before destroying it
 -AccessUnit tmp;
 -m_frameEncoder[i].getEncodedPicture(tmp);
 -for (AccessUnit::const_iterator it = tmp.begin(); it !=
 tmp.end(); it++)
 +NALUnitEBSP **nalunits = NULL;
 +m_frameEncoder[i].getEncodedPicture(nalunits);
 +if (nalunits)
  {
 -const NALUnitEBSP nalu = **it;
 -free(nalu.m_nalUnitData);
 +for (int nalcount = 0; nalunits[nalcount] != NULL;
 nalcount++)
 +{
 +const NALUnitEBSP nalu = *nalunits[nalcount];
 +free(nalu.m_nalUnitData);
 +}
  }
 -
  m_frameEncoder[i].destroy();
  }

 @@ -161,9 +163,9 @@
  }
  }

 -int TEncTop::getStreamHeaders(AccessUnit accessUnit)
 +int TEncTop::getStreamHeaders(NALUnitEBSP **nalunits)
  {
 -return m_frameEncoder-getStreamHeaders(accessUnit);
 +return m_frameEncoder-getStreamHeaders(nalunits);
  }

  /**
 @@ -173,7 +175,7 @@
   \param   accessUnitsOut  output bitstream
   \retval  number of encoded pictures
   */
 -int TEncTop::encode(bool flush, const x265_picture_t* pic_in,
 x265_picture_t *pic_out, AccessUnit accessUnitOut)
 +int TEncTop::encode(bool flush, const x265_picture_t* pic_in,
 x265_picture_t *pic_out, NALUnitEBSP **nalunits)
  {
  if (pic_in)
  {
 @@ -213,7 +215,7 @@
  // getEncodedPicture() should block until the FrameEncoder has
 completed
  // encoding the frame.  This is how back-pressure through the API is
  // accomplished when the encoder is full.
 -TComPic *out = curEncoder-getEncodedPicture(accessUnitOut);
 +TComPic *out = curEncoder-getEncodedPicture(nalunits);

  if (!out  flush)
  {
 @@ -227,7 +229,7 @@
  {
  curEncoder = m_frameEncoder[m_curEncoder];
  m_curEncoder = (m_curEncoder + 1) % param.frameNumThreads;
 -out = curEncoder-getEncodedPicture(accessUnitOut);
 +out = curEncoder-getEncodedPicture(nalunits);
  }
  while (!out  flushed != m_curEncoder);
  }
 @@ -259,7 +261,7 @@
  pic_out-stride[2] = recpic-getCStride();
  }

 -double bits = calculateHashAndPSNR(out, accessUnitOut);
 +double bits = calculateHashAndPSNR(out, nalunits);
  // Allow this frame to be recycled if no frame encoders are using
 it for reference
  ATOMIC_DEC(out-m_countRefEncoders);

 @@ -487,7 +489,7 @@

  /* Returns Number of bits in current encoded pic */

 -double TEncTop::calculateHashAndPSNR(TComPic* pic, AccessUnit accessUnit)
 +double TEncTop::calculateHashAndPSNR(TComPic* pic, NALUnitEBSP **nalunits)
  {
  TComPicYuv* recon = pic-getPicYuvRec();
  TComPicYuv* orig  = pic-getPicYuvOrg();
 @@ -544,7 +546,10 @@
  m_frameEncoder-m_seiWriter.writeSEImessage(onalu.m_Bitstream,
 sei_recon_picture_digest, pic-getSlice()-getSPS());
  writeRBSPTrailingBits(onalu.m_Bitstream);

 -accessUnit.insert(accessUnit.end(), new NALUnitEBSP(onalu));
 +int count = 0;
 +while(nalunits[count] != NULL)
 +count++;
 +nalunits[count]-init(onalu);
  }


Isn't nalunits[count] supposed to be initalized , if its null - before
calling its init()  ?


  /* calculate the size of the access unit, excluding:
 @@ -552,13 +557,14 @@
   *  - SEI NAL units
   */
  UInt numRBSPBytes = 0;
 -for (AccessUnit::const_iterator it = accessUnit.begin(); it !=
 accessUnit.end(); it++)
 +int count = 0;
 +for (;nalunits[count] != NULL; count++)
  {
 -UInt numRBSPBytes_nal = (*it)-m_packetSize;
 +UInt numRBSPBytes_nal = nalunits[count]-m_packetSize;
  #if VERBOSE_RATE
  printf(*** %6s numBytesInNALunit: %u\n,
 nalUnitTypeToString((*it)-m_nalUnitType), numRBSPBytes_nal);
  #endif
 -if ((*it)-m_nalUnitType != NAL_UNIT_PREFIX_SEI 
 (*it)-m_nalUnitType != NAL_UNIT_SUFFIX_SEI)
 +if (nalunits[count]-m_nalUnitType != NAL_UNIT_PREFIX_SEI 
 nalunits[count]-m_nalUnitType != NAL_UNIT_SUFFIX_SEI)
  {
  numRBSPBytes += numRBSPBytes_nal;
  }
 diff -r a8f6f62217d5 -r 70ba2b3b7bc9 

[x265] [ANN] x265 0.4.1

2013-09-24 Thread Steve Borho
Hello,

I've made a tag on the stable branch for 0.4.1.  This email describes the
state of the encoder at that tag.

x265 can be compiled and run on Linux, Mac OS X, and Windows.  Its cmake
based build system supports MSVC 9-11, Xcode, gcc+gmake, MinGW/MSYS, and
Intel C++ (both icl and icpc)

x265 currently generates HM11 compliant bitstreams.

= New features since 0.3 =

1. Frame parallelism

  * The GOP level parallelism and mini-gop cadence of the 0.3 release
were removed and replaced with fine-grained frame level parallelism.
  * The memory requirements were drastically reduced, x265 no longer
caches subpel planes per reference frame
  * Latency is drastically reduced, WPP + 5 frame threads is enough to
saturate a dual socket 8 core Xeon.

2. New simple average bitrate (ABR) rate control

  * converges on target bitrate via frame level QP adjustments
  * algorithm was adapted from x264 for HEVC
  * safe for use in combination with frame parallelsim (new since 0.4)

3. New Lookahead

  * three complexity levels of slice decision with scene cut and flash
detection
  * algorithm was adapted from x264 for HEVC
  * still missing bidir cost estimates, multiple refs, weightp, and MBtree


= Disabled Features since 0.3 =

  * weightp and weighted bidir prediction are both disabled; they were
broken when we stopped pre-generating reference (subpel) pixels
  * GOP parallelism is dead, hopefully to never return to the core
library.  It could be added above x265 if necessary.
  * many CLI options were added, removed, or renamed since 0.3.  Consult
the online help for the current set of options.


= Known Bugs =

  * all intra encodes (--keyint 1) require --b-adapt 0 to avoid
a lookahead bug
  * --no-sao-lcu-bounds cannot be used in conjunction with frame
parallelism.  The encoder will use incomplete reference pixels
with predictable bad effects.
  * we have a report that our DPB signalling is potentially incorrect
for decoders which respect max DPB size. This is under investigation.

ABR and lookahead are very new and we will not be surprised to find bugs in
those features.  Please report any bugs you find to this mailing list.


= Performance Characteristics =

See https://bitbucket.org/multicoreware/x265/wiki/Performance


= Upcoming features =

We are trying to make the encoder deterministic with -Fn for all values of
n greater than 1.  In other words, there will always be a slight benefit to
having only one frame thread (unlimited motion search to reference frames)
but -F2 and -F10 should output the exact same bitstream with CQP rate
control.  This is considered a debugging feature to validate our frame
parallelism.

We are also planning to swap out the HM's bidir search with logic adapted
from x264 (for performance reasons) and to add estimation logic for this
new bidir search to the lookahead (to improve lookahead accuracy).

We plan to repair the weighted prediction features and re-enable its
command line options.

Lastly, the lookahead will use wave-front scheduling of the lowres CUs
using the existing thread pool.  This should lesson the bottlenecking
effects of --b-adapt 2.

-- 
Steve Borho
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel