[x265] [PATCH] csv: add scenecut information and improve docs

Pradeep Ramachandran pradeep at multicorewareinc.com
Mon Jun 5 07:02:30 CEST 2017


On Fri, Jun 2, 2017 at 6:40 PM, <bhavna at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Bhavna Hariharan <bhavna at multicorewareinc.com>
> # Date 1496390566 -19800
> #      Fri Jun 02 13:32:46 2017 +0530
> # Node ID 4f0d56f5faf7eeba55a97f276e4af2f147258522
> # Parent  f850cdbe381c196758fd445a367487416fef62f9
> csv: add scenecut information and improve docs
>

Pushed to default branch


>
> diff -r f850cdbe381c -r 4f0d56f5faf7 doc/reST/cli.rst
> --- a/doc/reST/cli.rst  Tue May 23 12:42:54 2017 +0530
> +++ b/doc/reST/cli.rst  Fri Jun 02 13:32:46 2017 +0530
> @@ -83,9 +83,45 @@
>         it adds one line per run. If :option:`--csv-log-level` is greater
> than
>         0, it writes one line per frame. Default none
>
> +       The following statistics are available when
> :option:`--csv-log-level` is
> +       greater than or equal to 1:
> +
> +       **Encode Order** The frame order in which the encoder encodes.
> +
> +       **Type** Slice type of the frame.
> +
> +       **POC** Picture Order Count - The display order of the frames.
> +
> +       **QP** Quantization Parameter decided for the frame.
> +
> +       **Bits** Number of bits consumed by the frame.
> +
> +       **Scenecut** 1 if the frame is a scenecut, 0 otherwise.
> +
> +       **RateFactor** Applicable only when CRF is enabled. The rate
> factor depends
> +       on the CRF given by the user. This is used to determine the QP so
> as to
> +       target a certain quality.
> +
> +       **BufferFill** Bits available for the next frame. Includes bits
> carried
> +       over from the current frame.
> +
> +       **Latency** Latency in terms of number of frames between when the
> frame
> +       was given in and when the frame is given out.
> +
> +       **PSNR** Peak signal to noise ratio for Y, U and V planes.
> +
> +       **SSIM** A quality metric that denotes the structural similarity
> between frames.
> +
> +       **Ref lists** POC of references in lists 0 and 1 for the frame.
> +
>         Several statistics about the encoded bitstream and encoder
> performance are
>         available when :option:`--csv-log-level` is greater than or equal
> to 2:
>
> +       **I/P cost ratio:** The ratio between the cost when a frame is
> decided as an
> +       I frame to that when it is decided as a P frame as computed from
> the
> +       quarter-resolution frame in look-ahead. This, in combination with
> other parameters
> +       such as position of the frame in the GOP, is used to decide scene
> transitions.
> +
>         **Analysis statistics:**
>
>         **CU Statistics** percentage of CU modes.
> @@ -132,6 +168,8 @@
>         **Stall Time ms** the number of milliseconds of the reported wall
>         time that were spent with zero worker threads, aka all compression
>         was completely stalled.
> +
> +       **Total frame time** Total time spent to encode the frame.
>
>         **Avg WPP** the average number of worker threads working on this
>         frame, at any given time. This value is sampled at the completion
> of
> diff -r f850cdbe381c -r 4f0d56f5faf7 source/common/framedata.h
> --- a/source/common/framedata.h Tue May 23 12:42:54 2017 +0530
> +++ b/source/common/framedata.h Fri Jun 02 13:32:46 2017 +0530
> @@ -62,6 +62,7 @@
>      double      percentMergeCu[NUM_CU_DEPTH];
>      double      percentIntraDistribution[NUM_CU_DEPTH][INTRA_MODES];
>      double      percentInterDistribution[NUM_CU_DEPTH][3];           //
> 2Nx2N, RECT, AMP modes percentage
> +    double      ipCostRatio;
>
>      uint64_t    cntIntraNxN;
>      uint64_t    totalCu;
> diff -r f850cdbe381c -r 4f0d56f5faf7 source/common/lowres.h
> --- a/source/common/lowres.h    Tue May 23 12:42:54 2017 +0530
> +++ b/source/common/lowres.h    Fri Jun 02 13:32:46 2017 +0530
> @@ -118,6 +118,8 @@
>      bool   bKeyframe;
>      bool   bLastMiniGopBFrame;
>
> +    double ipCostRatio;
> +
>      /* lookahead output data */
>      int64_t   costEst[X265_BFRAME_MAX + 2][X265_BFRAME_MAX + 2];
>      int64_t   costEstAq[X265_BFRAME_MAX + 2][X265_BFRAME_MAX + 2];
> diff -r f850cdbe381c -r 4f0d56f5faf7 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp        Tue May 23 12:42:54 2017 +0530
> +++ b/source/encoder/encoder.cpp        Fri Jun 02 13:32:46 2017 +0530
> @@ -1723,6 +1723,7 @@
>          frameStats->qp = curEncData.m_avgQpAq;
>          frameStats->bits = bits;
>          frameStats->bScenecut = curFrame->m_lowres.bScenecut;
> +        frameStats->ipCostRatio = curFrame->m_lowres.ipCostRatio;
>          frameStats->bufferFill = m_rateControl->m_bufferFillActual;
>          frameStats->frameLatency = inPoc - poc;
>          if (m_param->rc.rateControlMode == X265_RC_CRF)
> diff -r f850cdbe381c -r 4f0d56f5faf7 source/encoder/slicetype.cpp
> --- a/source/encoder/slicetype.cpp      Tue May 23 12:42:54 2017 +0530
> +++ b/source/encoder/slicetype.cpp      Fri Jun 02 13:32:46 2017 +0530
> @@ -1638,6 +1638,13 @@
>              m_isSceneTransition = false; /* Signal end of scene
> transitioning */
>      }
>
> +    if (m_param->logLevel >= 2)
> +    {
> +        int64_t icost = frames[p1]->costEst[0][0];
> +        int64_t pcost = frames[p1]->costEst[p1 - p0][0];
> +        frames[p1]->ipCostRatio = (double)icost / pcost;
> +    }
> +
>      /* A frame is always analysed with bRealScenecut = true first, and
> then bRealScenecut = false,
>         the former for I decisions and the latter for P/B decisions. It's
> possible that the first
>         analysis detected scenecuts which were later nulled due to scene
> transitioning, in which
> diff -r f850cdbe381c -r 4f0d56f5faf7 source/x265-extras.cpp
> --- a/source/x265-extras.cpp    Tue May 23 12:42:54 2017 +0530
> +++ b/source/x265-extras.cpp    Fri Jun 02 13:32:46 2017 +0530
> @@ -62,6 +62,8 @@
>              if (level)
>              {
>                  fprintf(csvfp, "Encode Order, Type, POC, QP, Bits,
> Scenecut, ");
> +                if (level >= 2)
> +                    fprintf(csvfp, "I/P cost ratio, ");
>                  if (param.rc.rateControlMode == X265_RC_CRF)
>                      fprintf(csvfp, "RateFactor, ");
>                  if (param.rc.vbvBufferSize)
> @@ -159,6 +161,8 @@
>      const x265_frame_stats* frameStats = &pic.frameData;
>      fprintf(csvfp, "%d, %c-SLICE, %4d, %2.2lf, %10d, %d,",
> frameStats->encoderOrder, frameStats->sliceType, frameStats->poc,
>
> frameStats->qp, (int)frameStats->bits, frameStats->bScenecut);
> +    if (level >= 2)
> +        fprintf(csvfp, "%.2f,", frameStats->ipCostRatio);
>      if (param.rc.rateControlMode == X265_RC_CRF)
>          fprintf(csvfp, "%.3lf,", frameStats->rateFactor);
>      if (param.rc.vbvBufferSize)
> diff -r f850cdbe381c -r 4f0d56f5faf7 source/x265.h
> --- a/source/x265.h     Tue May 23 12:42:54 2017 +0530
> +++ b/source/x265.h     Fri Jun 02 13:32:46 2017 +0530
> @@ -181,6 +181,7 @@
>
>      char             sliceType;
>      int              bScenecut;
> +    double           ipCostRatio;
>      int              frameLatency;
>      x265_cu_stats    cuStats;
>      x265_pu_stats    puStats;
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20170605/123c0210/attachment.html>


More information about the x265-devel mailing list