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 < [email protected]> 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); >
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
