[x265] [PATCH 2 of 2] Added x265_stats_t structure and x265_encoder_stats API to fetch output stats from encoder

Aarthi Priya Thirumalai aarthi at multicorewareinc.com
Tue Oct 1 13:54:31 CEST 2013


sry, forgot to commit a new change. pls ignore the previous patch. ll send
the updated one.


On Tue, Oct 1, 2013 at 3:16 PM, Aarthi Thirumalai <
aarthi at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Aarthi Thirumalai
> # Date 1380620634 -19800
> #      Tue Oct 01 15:13:54 2013 +0530
> # Node ID 2a95812683f8f1b7ab75fcdf9034b6003a166f76
> # Parent  36e2f4978ae40b23efa1a5403d59168d551f29a6
> Added x265_stats_t structure and x265_encoder_stats API to fetch output
> stats from encoder.
>
> diff -r 36e2f4978ae4 -r 2a95812683f8 source/Lib/TLibEncoder/TEncTop.cpp
> --- a/source/Lib/TLibEncoder/TEncTop.cpp        Tue Oct 01 15:09:55 2013
> +0530
> +++ b/source/Lib/TLibEncoder/TEncTop.cpp        Tue Oct 01 15:13:54 2013
> +0530
> @@ -312,6 +312,19 @@
>          return 100.0;
>  }
>
> +void TEncTop::fetchStats(x265_stats_t *stats)
> +{
> +    stats->globalPsnrY = m_analyzeAll.getPsnrY();
> +    stats->globalPsnrU = m_analyzeAll.getPsnrU();
> +    stats->globalPsnrV = m_analyzeAll.getPsnrV();
> +    stats->totalNumPics = m_analyzeAll.getNumPic();
> +    stats->accBits = m_analyzeAll.getBits();
> +    if (stats->totalNumPics > 0)
> +        stats->globalSsim = m_globalSsim / stats->totalNumPics;
> +    else
> +        stats->globalSsim = 0;
> +}
> +
>  #define VERBOSE_RATE 0
>  #if VERBOSE_RATE
>  static const char* nalUnitTypeToString(NalUnitType type)
> diff -r 36e2f4978ae4 -r 2a95812683f8 source/Lib/TLibEncoder/TEncTop.h
> --- a/source/Lib/TLibEncoder/TEncTop.h  Tue Oct 01 15:09:55 2013 +0530
> +++ b/source/Lib/TLibEncoder/TEncTop.h  Tue Oct 01 15:13:54 2013 +0530
> @@ -106,6 +106,8 @@
>
>      int getStreamHeaders(NALUnitEBSP **nalunits);
>
> +    void fetchStats(x265_stats_t* stats);
> +
>      double printSummary();
>
>      TComScalingList* getScalingList() { return &m_scalingList; }
> diff -r 36e2f4978ae4 -r 2a95812683f8 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp        Tue Oct 01 15:09:55 2013 +0530
> +++ b/source/encoder/encoder.cpp        Tue Oct 01 15:13:54 2013 +0530
> @@ -429,6 +429,15 @@
>  EXTERN_CYCLE_COUNTER(ME);
>
>  extern "C"
> +void x265_encoder_stats(x265_t *encoder, x265_stats_t *outputStats)
> +{
> +    CHECKED_MALLOC(outputStats, x265_stats_t, 1);
> +    encoder->getStats(outputStats);
> +fail:
> +    return;
> +}
> +
> +extern "C"
>  void x265_encoder_close(x265_t *encoder, double *outPsnr)
>  {
>      double globalPsnr = encoder->printSummary();
> diff -r 36e2f4978ae4 -r 2a95812683f8 source/x265.cpp
> --- a/source/x265.cpp   Tue Oct 01 15:09:55 2013 +0530
> +++ b/source/x265.cpp   Tue Oct 01 15:13:54 2013 +0530
> @@ -511,6 +511,7 @@
>      x265_picture_t *pic_in = &pic_orig;
>      x265_picture_t *pic_recon = cliopt.recon ? &pic_out : NULL;
>      x265_nal_t *p_nal;
> +    x265_stats_t *stats = NULL;
>      int nal;
>
>      if (!x265_encoder_headers(encoder, &p_nal, &nal))
> @@ -571,6 +572,7 @@
>          fprintf(stderr, "
>                               \r");
>
>      double PSNR = 0.0;
> +    x265_encoder_stats(encoder, stats);
>      x265_encoder_close(encoder, &PSNR);
>      cliopt.bitstreamFile.close();
>
> @@ -580,8 +582,14 @@
>      double elapsed = (double)(x265_mdate() - cliopt.i_start) / 1000000;
>      double vidtime = (double)inFrameCount / param.frameRate;
>      double bitrate = (0.008f * cliopt.totalBytes) / vidtime;
> -    printf("\nencoded %d frames in %.2fs (%.2f fps), %.2f kb/s, Global
> PSNR: %.3f\n",
> -           outFrameCount, elapsed, outFrameCount / elapsed, bitrate,
> PSNR);
> +    printf("\nencoded %d frames in %.2fs (%.2f fps), %.2f kb/s, ",
> +           outFrameCount, elapsed, outFrameCount / elapsed, bitrate);
> +
> +    if (param.bEnablePsnr)
> +        printf("Global PSNR: %.3f\n", PSNR);
> +
> +    if (param.bEnableSsim && stats)
> +        printf("Global SSIM: %.3f\n", stats->globalSsim);
>
>      x265_cleanup(); /* Free library singletons */
>
> diff -r 36e2f4978ae4 -r 2a95812683f8 source/x265.h
> --- a/source/x265.h     Tue Oct 01 15:09:55 2013 +0530
> +++ b/source/x265.h     Tue Oct 01 15:13:54 2013 +0530
> @@ -192,7 +192,20 @@
>  }
>  X265_RDO_LEVEL;
>
> +/* Output Stats from encoder */
> +typedef struct x265_stats_t
> +{
> +    double    globalPsnrY;
> +    double    globalPsnrU;
> +    double    globalPsnrV;
> +    double    globalSsim;
> +    double    accBits;
> +    double    totalNumPics;
>
> +}
> +x265_stats_t;
> +
> +/* Input parameters to the encoder */
>  typedef struct x265_param_t
>  {
>      int       logLevel;
> @@ -344,6 +357,10 @@
>   *      the payloads of all output NALs are guaranteed to be sequential
> in memory. */
>  int     x265_encoder_encode(x265_t *encoder, x265_nal_t **pp_nal, int
> *pi_nal, x265_picture_t *pic_in, x265_picture_t *pic_out);
>
> +/* x265_encoder_stats:
> +*       returns output stats from the encoder */
> +void    x265_encoder_stats(x265_t *encoder, x265_stats_t *);
> +
>  /* x265_encoder_close:
>   *      close an encoder handler.  Optionally return the global PSNR
> value (6 * psnrY + psnrU + psnrV) / 8 */
>  void    x265_encoder_close(x265_t *, double *globalPsnr);
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20131001/97c42cb6/attachment.html>


More information about the x265-devel mailing list