[x265] [PATCH] stats: add frame level csv printing

Steve Borho steve at borho.org
Wed Jun 10 17:54:49 CEST 2015


On 06/10, Divya Manivannan wrote:
> # HG changeset patch
> # User Divya Manivannan <divya at multicorewareinc.com>
> # Date 1433943002 -19800
> #      Wed Jun 10 19:00:02 2015 +0530
> # Node ID 09bc0967dfa84b6630e400229969d500b5aef624
> # Parent  35d767d2ac378854794ff36b82a121a2833454f7
> stats: add frame level csv printing
> 
> diff -r 35d767d2ac37 -r 09bc0967dfa8 source/x265.cpp
> --- a/source/x265.cpp	Wed Jun 10 18:55:08 2015 +0530
> +++ b/source/x265.cpp	Wed Jun 10 19:00:02 2015 +0530
> @@ -124,6 +124,7 @@
>      void destroy();
>      bool parseCSVFile();
>      void printLog(int argc, char **argv, x265_stats stats);
> +    void printFrameLog(x265_frame_stats frameStats);

pass as pointer or const ref, printLog should also be fixed.

"print" is probably a bad verb, perhaps write*()

>      void printStatus(uint32_t frameNum);
>      bool parse(int argc, char **argv);
>      bool parseQPFile(x265_picture &pic_org);
> @@ -162,7 +163,19 @@
>          /* new CSV file, write header */
>          csvfpt = fopen(csvfn, "wb");
>          if (csvfpt)
> -            fputs(summaryCSVHeader, csvfpt);
> +        {
> +            if (csvData > 0)
> +            {
> +                fprintf(csvfpt, "Encode Order, Type, POC, QP, Bits, ");
> +                if (param->rc.rateControlMode == X265_RC_CRF)
> +                    fprintf(csvfpt, "RateFactor, ");
> +                fprintf(csvfpt, "Y PSNR, U PSNR, V PSNR, YUV PSNR, SSIM, SSIM (dB),  List 0, List 1");
> +                /* detailed performance statistics */
> +                fprintf(csvfpt, ", DecideWait (ms), Row0Wait (ms), Wall time (ms), Ref Wait Wall (ms), Total CTU time (ms), Stall Time (ms), Avg WPP, Row Blocks\n");
> +            }
> +            else
> +                fputs(summaryCSVHeader, csvfpt);
> +        }
>      }
>  
>      if (!csvfpt)
> @@ -177,6 +190,12 @@
>  {
>      if (csvfpt)
>      {
> +        if (csvData > 0)
> +        {
> +            // adding summary to a per-frame csv log file needs a summary header
> +            fprintf(csvfpt, "\nSummary\n");
> +            fputs(summaryCSVHeader, csvfpt);
> +        }
>          // CLI arguments or other
>          for (int i = 1; i < argc; i++)
>          {
> @@ -215,6 +234,39 @@
>      }
>  }
>  
> +void CLIOptions::printFrameLog(x265_frame_stats frameStats)
> +{
> +    if (csvfpt)
> +    {
> +        // per frame CSV logging if the file handle is valid
> +        fprintf(csvfpt, "%d, %c-SLICE, %4d, %2.2lf, %10d,", frameStats.encoderOrder, frameStats.sliceType, frameStats.poc, frameStats.qp, (int)frameStats.bits);
> +        if (param->rc.rateControlMode == X265_RC_CRF)
> +            fprintf(csvfpt, "%.3lf,", frameStats.rateFactor);
> +        if (param->bEnablePsnr)
> +            fprintf(csvfpt, "%.3lf, %.3lf, %.3lf, %.3lf,", frameStats.psnrY, frameStats.psnrU, frameStats.psnrV, frameStats.psnr);
> +        else
> +            fputs(" -, -, -, -,", csvfpt);
> +        if (param->bEnableSsim)
> +            fprintf(csvfpt, " %.6f, %6.3f,", frameStats.ssim, x265_ssim2dB(frameStats.ssim));
> +        else
> +            fputs(" -, -,", csvfpt);
> +        if (frameStats.sliceType == 'I')
> +            fputs(" -, -,", csvfpt);
> +        else
> +        {
> +            fprintf(csvfpt, " %s,", frameStats.list1Buf);
> +            if (frameStats.sliceType != 'P')
> +                fprintf(csvfpt, " %s,", frameStats.list2Buf);
> +            else
> +                fputs(" -,", csvfpt);
> +        }
> +        fprintf(csvfpt, " %.1lf, %.1lf, %.1lf, %.1lf, %.1lf, %.1lf,", frameStats.decideWaitTime, frameStats.row0WaitTime, frameStats.wallTime, frameStats.refWaitWallTime, frameStats.totalCTUTime, frameStats.stallTime);
> +        fprintf(csvfpt, " %.3lf, %d", frameStats.avgWPP, frameStats.countRowBlocks);
> +        fprintf(csvfpt, "\n");
> +        fflush(stderr);
> +    }
> +}
> +
>  void CLIOptions::printStatus(uint32_t frameNum)
>  {
>      char buf[200];
> @@ -725,6 +777,8 @@
>          }
>  
>          cliopt.printStatus(outFrameCount);
> +        if (numEncoded && cliopt.csvData > 0)
> +            cliopt.printFrameLog(pic_recon->frameData);
>      }
>  
>      /* Flush the encoder */
> @@ -755,6 +809,8 @@
>          }
>  
>          cliopt.printStatus(outFrameCount);
> +        if (numEncoded && cliopt.csvData > 0)
> +            cliopt.printFrameLog(pic_recon->frameData);
>  
>          if (!numEncoded)
>              break;
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel

-- 
Steve Borho


More information about the x265-devel mailing list