[Spice-devel] [PATCH spice-server 4/6] tests: Make possible to have a report of the video encoding
Pavel Grunt
pgrunt at redhat.com
Tue Jan 10 12:02:56 UTC 2017
Hi,
On Mon, 2016-12-12 at 19:28 +0000, Frediano Ziglio wrote:
> 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,
Glib provides a G_OPTION_ARG_FILENAME
looks good otherwise
Pavel
> + "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
More information about the Spice-devel
mailing list