<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Sep 27, 2013 at 11:52 PM, Aarthi Thirumalai <span dir="ltr"><<a href="mailto:aarthi@multicorewareinc.com" target="_blank">aarthi@multicorewareinc.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Aarthi Thirumalai<br>
# Date 1380342678 -19800<br>
#      Sat Sep 28 10:01:18 2013 +0530<br>
# Node ID f8684226fc3aa8b94f698381b628412bfa63b6cc<br>
# Parent  0fa415d022c56451e6580c5b2bee793498d986c8<br>
added states for storing ssim values per frame and globally at ecoder level.<br>
<br>
diff -r 0fa415d022c5 -r f8684226fc3a source/Lib/TLibCommon/TComSlice.cpp<br>
--- a/source/Lib/TLibCommon/TComSlice.cpp       Sat Sep 28 09:54:14 2013 +0530<br>
+++ b/source/Lib/TLibCommon/TComSlice.cpp       Sat Sep 28 10:01:18 2013 +0530<br>
@@ -128,6 +128,8 @@<br>
     m_cabacInitFlag = false;<br>
     m_numEntryPointOffsets = 0;<br>
     m_enableTMVPFlag = true;<br>
+    m_ssim = 0;<br>
+    m_ssimCnt = 0;<br>
 }<br>
<br>
 bool TComSlice::getRapPicFlag()<br>
diff -r 0fa415d022c5 -r f8684226fc3a source/Lib/TLibCommon/TComSlice.h<br>
--- a/source/Lib/TLibCommon/TComSlice.h Sat Sep 28 09:54:14 2013 +0530<br>
+++ b/source/Lib/TLibCommon/TComSlice.h Sat Sep 28 10:01:18 2013 +0530<br>
@@ -1438,6 +1438,10 @@<br>
     MotionReference * m_mref[2][MAX_NUM_REF + 1];<br>
     wpScalingParam  m_weightPredTable[2][MAX_NUM_REF][3]; // [REF_PIC_LIST_0 or REF_PIC_LIST_1][refIdx][0:Y, 1:U, 2:V]<br>
<br>
+    /* SSIM values per frame */<br>
+    double m_ssim;<br>
+    int    m_ssimCnt;<br>
+<br>
     TComSlice();<br>
     virtual ~TComSlice();<br>
     void      initSlice();<br>
diff -r 0fa415d022c5 -r f8684226fc3a source/Lib/TLibEncoder/TEncTop.h<br>
--- a/source/Lib/TLibEncoder/TEncTop.h  Sat Sep 28 09:54:14 2013 +0530<br>
+++ b/source/Lib/TLibEncoder/TEncTop.h  Sat Sep 28 10:01:18 2013 +0530<br>
@@ -87,6 +87,7 @@<br>
<br>
     // quality control<br>
     TComScalingList    m_scalingList;      ///< quantization matrix information<br>
+    double m_globalSsim;<br>
<br>
 public:<br>
<br>
@@ -105,6 +106,8 @@<br>
<br>
     int getStreamHeaders(NALUnitEBSP **nalunits);<br>
<br>
+    double getSSIM() { return m_globalSsim/m_analyzeAll.getNumPic(); }<br></blockquote><div><br></div><div>getNumPic() could return zero, this function must check for it</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

+<br>
     double printSummary();<br>
<br>
     TComScalingList* getScalingList() { return &m_scalingList; }<br>
diff -r 0fa415d022c5 -r f8684226fc3a source/x265.cpp<br>
--- a/source/x265.cpp   Sat Sep 28 09:54:14 2013 +0530<br>
+++ b/source/x265.cpp   Sat Sep 28 10:01:18 2013 +0530<br>
@@ -571,7 +571,8 @@<br>
         fprintf(stderr, "                                                                               \r");<br>
<br>
     double PSNR = 0.0;<br>
-    x265_encoder_close(encoder, &PSNR);<br>
+    double SSIM = 0.0;<br>
+    x265_encoder_close(encoder, &PSNR , &SSIM);<br></blockquote><div><br></div><div>This is an API change but this patch is not changing x265.h</div><div><br></div><div>Adding a parameter to an existing (published) function is something we can't do lightly.</div>
<div><br></div><div>It would be better to add a new function to query encoder statistics and could be called just before x265_encoder_close().</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

     cliopt.bitstreamFile.close();<br>
<br>
     if (b_ctrl_c)<br>
@@ -580,9 +581,14 @@<br>
     double elapsed = (double)(x265_mdate() - cliopt.i_start) / 1000000;<br>
     double vidtime = (double)inFrameCount / param.frameRate;<br>
     double bitrate = (0.008f * cliopt.totalBytes) / vidtime;<br>
-    printf("\nencoded %d frames in %.2fs (%.2f fps), %.2f kb/s, Global PSNR: %.3f\n",<br>
-           outFrameCount, elapsed, outFrameCount / elapsed, bitrate, PSNR);<br>
-<br>
+    printf("\nencoded %d frames in %.2fs (%.2f fps), %.2f kb/s,",<br>
+            outFrameCount, elapsed, outFrameCount / elapsed, bitrate);<br>
+    if(param.bEnablePsnr)<br>
+        printf(" Global PSNR: %.3f\n",<br>
+                PSNR);<br>
+    if(param.bEnableSsim)<br>
+        printf(" Global SSIM: %.3f\n",<br>
+                SSIM);<br></blockquote><div><br></div><div>white space if (), the printfs() can be on one line if they fit (which these do)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

     x265_cleanup(); /* Free library singletons */<br>
<br>
     if (cliopt.csvfp)<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Steve Borho
</div></div>