[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