[Spice-devel] [PATCH spice-server 4/6] tests: Make possible to have a report of the video encoding

Frediano Ziglio fziglio at redhat.com
Mon Dec 12 19:28:34 UTC 2016


This allows to do some possible statistics or graph.
Currently the report contain encoded sizes.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/tests/test-gst.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/server/tests/test-gst.c b/server/tests/test-gst.c
index cfc3d4a..0fe8326 100644
--- a/server/tests/test-gst.c
+++ b/server/tests/test-gst.c
@@ -153,6 +153,11 @@ static SpiceRect clipping_rect;
 static pthread_mutex_t frame_queue_mtx = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t frame_queue_cond = PTHREAD_COND_INITIALIZER;
 static GQueue frame_queue = G_QUEUE_INIT;
+// input frames are counted
+static unsigned input_frame_index = 0;
+// file output for report informations like
+// frame output size
+static FILE *file_report;
 static TestPipeline *input_pipeline, *output_pipeline;
 static pthread_mutex_t eos_mtx = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t eos_cond = PTHREAD_COND_INITIALIZER;
@@ -184,6 +189,8 @@ static double compute_psnr(SpiceBitmap *bitmap1, int32_t x1, int32_t y1,
 static void
 input_frames(GstSample *sample, void *param)
 {
+    unsigned curr_frame_index = input_frame_index++;
+
     spice_assert(video_encoder && sample);
 
     if (SPICE_UNLIKELY(!clipping_type_computed)) {
@@ -213,6 +220,13 @@ input_frames(GstSample *sample, void *param)
         pthread_mutex_unlock(&frame_queue_mtx);
         spice_assert(p_outbuf);
         pipeline_send_raw_data(output_pipeline, p_outbuf);
+        if (file_report) {
+            fprintf(file_report,
+                    "Frame: %u\n"
+                    "Output size: %u\n",
+                    curr_frame_index,
+                    (unsigned) p_outbuf->size);
+        }
         break;
     case VIDEO_ENCODER_FRAME_UNSUPPORTED:
         // ?? what to do ??
@@ -221,6 +235,12 @@ input_frames(GstSample *sample, void *param)
         spice_assert(0);
         break;
     case VIDEO_ENCODER_FRAME_DROP:
+        if (file_report) {
+            fprintf(file_report,
+                    "Frame: %u\n"
+                    "Output size: 0\n",
+                    curr_frame_index);
+        }
         break;
     default:
         // invalid value returned
@@ -294,6 +314,7 @@ int main(int argc, char *argv[])
     gchar *input_pipeline_desc = NULL;
     const gchar *image_format = "32BIT";
     const gchar *encoder_name = "mjpeg";
+    gchar *file_report_name = NULL;
     gboolean use_hw_encoder = FALSE; // TODO use
     const gchar *clipping = "(0,0)x(100%,100%)";
 
@@ -325,6 +346,8 @@ int main(int argc, char *argv[])
           "Minimum PSNR accepted", "PSNR" },
         { "split-lines", 0, 0, G_OPTION_ARG_INT, &image_split_lines,
           "Split image into different chunks every LINES lines", "LINES" },
+        { "report", 0, 0, G_OPTION_ARG_STRING, &file_report_name,
+          "Report statistics to file", "FILENAME" },
         { NULL }
     };
 
@@ -372,6 +395,14 @@ int main(int argc, char *argv[])
         exit(1);
     }
 
+    if (file_report_name) {
+        file_report = fopen(file_report_name, "w");
+        if (!file_report) {
+            g_printerr("Error opening file %s for report\n", file_report_name);
+            exit(1);
+        }
+    }
+
     gst_init(&argc, &argv);
 
     // TODO give particular error if pipeline fails to be created
-- 
2.9.3



More information about the Spice-devel mailing list