[x265] [PATCH] csv: dump input sequence and preset info in csv
Steve Borho
steve at borho.org
Mon Sep 14 06:26:11 CEST 2015
On 09/11, mahesh at multicorewareinc.com wrote:
> # HG changeset patch
> # User Mahesh Pittala <mahesh at multicorewareinc.com>
> # Date 1441976825 -19800
> # Fri Sep 11 18:37:05 2015 +0530
> # Node ID ee6208293726f96786389b342bc810557763bd26
> # Parent 365f7ed4d89628d49cd6af8d81d4edc01f73ffad
> csv: dump input sequence and preset info in csv
>
> diff -r 365f7ed4d896 -r ee6208293726 source/x265-extras.cpp
> --- a/source/x265-extras.cpp Tue Sep 08 16:38:01 2015 +0530
> +++ b/source/x265-extras.cpp Fri Sep 11 18:37:05 2015 +0530
> @@ -31,7 +31,7 @@
> using namespace X265_NS;
>
> static const char* summaryCSVHeader =
> - "Command, Date/Time, Elapsed Time, FPS, Bitrate, "
> + "Input Sequence, Preset, Command, Date/Time, Elapsed Time, FPS, Bitrate, "
> "Y PSNR, U PSNR, V PSNR, Global PSNR, SSIM, SSIM (dB), "
> "I count, I ave-QP, I kbps, I-PSNR Y, I-PSNR U, I-PSNR V, I-SSIM (dB), "
> "P count, P ave-QP, P kbps, P-PSNR Y, P-PSNR U, P-PSNR V, P-SSIM (dB), "
> @@ -185,7 +185,7 @@
> fflush(stderr);
> }
>
> -void x265_csvlog_encode(FILE* csvfp, const x265_api& api, const x265_param& param, const x265_stats& stats, int level, int argc, char** argv)
> +void x265_csvlog_encode(FILE* csvfp, const x265_api& api, const x265_param& param, const x265_stats& stats, int level, int argc, char** argv, char *prst, const char *inputseq)
> {
> if (!csvfp)
> return;
> @@ -197,11 +197,31 @@
> fputs(summaryCSVHeader, csvfp);
> }
>
> + // strip input sequence path
> + char *tok;
> + char *prevtok = NULL;
> + char temp[256];
> + strcpy(temp,inputseq);
> + tok = strtok(temp,"\\://");
> + while(tok != NULL)
> + {
> + prevtok = tok;
> + tok = strtok(NULL,"//:\\");
> + }
these are all fairly dangerous string operations. it would be
safer/cleaner to call getopt() here to parse the args, or pass the
profile as a string argument.
> + fputs(prevtok, csvfp);
> + fputc(',', csvfp);
> + if (prst == NULL)
> + fputs("medium", csvfp);
> + else
> + fputs(prst, csvfp);
> + fputc(',', csvfp);
> +
> // CLI arguments or other
> - for (int i = 1; i < argc; i++)
> - {
> - if (i) fputc(' ', csvfp);
> - fputs(argv[i], csvfp);
> + for (int i = 1; i < argc; i++)
> + {
> + if (i) fputc(' ', csvfp);
> + fputs(argv[i], csvfp);
> }
>
> // current date and time
> diff -r 365f7ed4d896 -r ee6208293726 source/x265-extras.h
> --- a/source/x265-extras.h Tue Sep 08 16:38:01 2015 +0530
> +++ b/source/x265-extras.h Fri Sep 11 18:37:05 2015 +0530
> @@ -53,7 +53,7 @@
> /* Log final encode statistics to the CSV file handle. 'argc' and 'argv' are
> * intended to be command line arguments passed to the encoder. Encode
> * statistics should be queried from the encoder just prior to closing it. */
> -LIBAPI void x265_csvlog_encode(FILE* csvfp, const x265_api& api, const x265_param& param, const x265_stats& stats, int level, int argc, char** argv);
> +LIBAPI void x265_csvlog_encode(FILE* csvfp, const x265_api& api, const x265_param& param, const x265_stats& stats, int level, int argc, char** argv, char * prst, const char *inputseq);
>
> /* In-place downshift from a bit-depth greater than 8 to a bit-depth of 8, using
> * the residual bits to dither each row. */
> diff -r 365f7ed4d896 -r ee6208293726 source/x265.cpp
> --- a/source/x265.cpp Tue Sep 08 16:38:01 2015 +0530
> +++ b/source/x265.cpp Fri Sep 11 18:37:05 2015 +0530
> @@ -90,6 +90,8 @@
> uint64_t totalbytes;
> int64_t startTime;
> int64_t prevUpdateTime;
> + char *prst;
> + const char *inputseq;
>
> /* in microseconds */
> static const int UPDATE_INTERVAL = 250000;
> @@ -113,6 +115,8 @@
> prevUpdateTime = 0;
> bDither = false;
> csvLogLevel = 0;
> + prst = NULL;
> + inputseq = NULL;
> }
>
> void destroy();
> @@ -194,7 +198,10 @@
> if (c == -1)
> break;
> else if (c == 'p')
> + {
> preset = optarg;
> + prst = optarg;
eh, why is a second variable necessary?
> + }
> else if (c == 't')
> tune = optarg;
> else if (c == 'D')
> @@ -204,7 +211,6 @@
> else if (c == '?')
> bShowHelp = true;
> }
> -
bah
> if (!outputBitDepth && profile)
> {
> /* try to derive the output bit depth from the requested profile */
> @@ -373,6 +379,7 @@
> info.sarHeight = param->vui.sarHeight;
> info.skipFrames = seek;
> info.frameCount = 0;
> + inputseq = info.filename;
> getParamAspectRatio(param, info.sarWidth, info.sarHeight);
>
> this->input = InputFile::open(info, this->bForceY4m);
> @@ -715,7 +722,7 @@
>
> api->encoder_get_stats(encoder, &stats, sizeof(stats));
> if (cliopt.csvfpt && !b_ctrl_c)
> - x265_csvlog_encode(cliopt.csvfpt, *api, *param, stats, cliopt.csvLogLevel, argc, argv);
> + x265_csvlog_encode(cliopt.csvfpt, *api, *param, stats, cliopt.csvLogLevel, argc, argv, cliopt.prst, cliopt.inputseq);
> api->encoder_close(encoder);
>
> int64_t second_largest_pts = 0;
> _______________________________________________
> 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