From: Hyunjun Ko Date: Thu, 13 Jul 2017 01:56:18 +0000 (+0900) Subject: tests: elements: add test for vaapipostproc X-Git-Tag: 1.19.3~503^2~940 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dd78e038591dd09f65798154cd6ac4a76fc71a6f;p=platform%2Fupstream%2Fgstreamer.git tests: elements: add test for vaapipostproc https://bugzilla.gnome.org/show_bug.cgi?id=754885 --- diff --git a/tests/elements/Makefile.am b/tests/elements/Makefile.am index 822f8e7..86c49f5 100644 --- a/tests/elements/Makefile.am +++ b/tests/elements/Makefile.am @@ -1,5 +1,6 @@ noinst_PROGRAMS = \ test-vaapisink \ + test-vaapipostproc \ test-roi \ $(NULL) @@ -18,6 +19,10 @@ test_vaapisink_SOURCES = test-vaapisink.c test_vaapisink_CFLAGS = $(TEST_CFLAGS) test_vaapisink_LDADD = $(TEST_LIBS) +test_vaapipostproc_SOURCES = test-vaapipostproc.c +test_vaapipostproc_CFLAGS = $(TEST_CFLAGS) +test_vaapipostproc_LDADD = $(TEST_LIBS) + test_roi_SOURCES = test-roi.c test_roi_CFLAGS = $(TEST_CFLAGS) test_roi_LDADD = $(TEST_LIBS) diff --git a/tests/elements/test-vaapipostproc.c b/tests/elements/test-vaapipostproc.c new file mode 100644 index 0000000..87d1353 --- /dev/null +++ b/tests/elements/test-vaapipostproc.c @@ -0,0 +1,157 @@ +/* + * test-vaapipostproc.c - Testsuite for VAAPI Postprocessor + * + * Copyright (C) 2017 Intel Corporation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#include +#include +#include + +typedef struct _CustomData +{ + GstElement *pipeline; + GstElement *postproc; + GMainLoop *loop; +} AppData; + +static gboolean +_check_passthrough_mode (gpointer user_data) +{ + gboolean ret; + AppData *data = (AppData *) user_data; + + ret = gst_base_transform_is_passthrough (GST_BASE_TRANSFORM (data->postproc)); + + if (ret) + gst_println ("Now this pipeline is on passthrough mode"); + else + gst_println ("Now this pipeline is NOT on passthrough mode"); + + return FALSE; +} + +static void +set_contrast (AppData * data) +{ + static gfloat value = 1.0; + + value = value == 1.0 ? 0.5 : 1.0; + g_object_set (data->postproc, "contrast", value, NULL); + gst_println ("contrast value is changed to %f", value); + + g_timeout_add (300, _check_passthrough_mode, data); +} + +static void +change_size (AppData * data) +{ + static gint i = 0; + if (i == 0) { + g_object_set (data->postproc, "width", 1280, "height", 720, NULL); + gst_println ("frame size is changed to 1280x720"); + i++; + } else { + g_object_set (data->postproc, "width", 0, "height", 0, NULL); + gst_println ("frame size is changed to default"); + i = 0; + } + + g_timeout_add (300, _check_passthrough_mode, data); +} + +/* Process keyboard input */ +static gboolean +handle_keyboard (GIOChannel * source, GIOCondition cond, AppData * data) +{ + gchar *str = NULL; + + if (g_io_channel_read_line (source, &str, NULL, NULL, + NULL) != G_IO_STATUS_NORMAL) { + return TRUE; + } + + switch (g_ascii_tolower (str[0])) { + case 's':{ + set_contrast (data); + break; + } + case 'c':{ + change_size (data); + break; + } + case 'q': + g_main_loop_quit (data->loop); + break; + default: + break; + } + + g_free (str); + + return TRUE; +} + +int +main (int argc, char *argv[]) +{ + AppData data = { 0, }; + GstStateChangeReturn ret; + GIOChannel *io_stdin; + + /* Initialize GStreamer */ + gst_init (&argc, &argv); + + /* Print usage map */ + gst_println ("USAGE: Choose one of the following options, then press enter:\n" + " 's' to set contrast\n" " 'c' to change size\n" " 'q' to quit\n"); + + data.pipeline = + gst_parse_launch + ("videotestsrc name=src ! vaapih264enc ! vaapih264dec ! vaapipostproc name=postproc ! vaapisink", + NULL); + data.postproc = gst_bin_get_by_name (GST_BIN (data.pipeline), "postproc"); + + /* Add a keyboard watch so we get notified of keystrokes */ + io_stdin = g_io_channel_unix_new (fileno (stdin)); + g_io_add_watch (io_stdin, G_IO_IN, (GIOFunc) handle_keyboard, &data); + + /* Start playing */ + ret = gst_element_set_state (data.pipeline, GST_STATE_PLAYING); + if (ret == GST_STATE_CHANGE_FAILURE) { + g_printerr ("Unable to set the pipeline to the playing state.\n"); + gst_object_unref (data.pipeline); + return -1; + } + + g_timeout_add (300, _check_passthrough_mode, &data); + + /* Create a GLib Main Loop and set it to run */ + data.loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (data.loop); + + /* Free resources */ + g_main_loop_unref (data.loop); + g_io_channel_unref (io_stdin); + gst_element_set_state (data.pipeline, GST_STATE_NULL); + + gst_object_unref (data.postproc); + gst_object_unref (data.pipeline); + + return 0; +}