summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunjun Ko <zzoon@igalia.com>2017-02-23 18:53:18 +0900
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2017-05-12 11:12:56 +0200
commitc21345c4787bb6342adddea1190f53fe62abff04 (patch)
tree2b67ed8b633a8f21729f5ddc6e4dd44db7beb025
parentf3302a0a7935da2f120c9ec2785648c8a763dd5a (diff)
tests: simple-encoder: add an option to set ROI
$ simple-encoder -r inputfile.y4m And you'll got an output file in H264 with two regions of interest. https://bugzilla.gnome.org/show_bug.cgi?id=768248 Signed-off-by: Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
-rw-r--r--tests/simple-encoder.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/simple-encoder.c b/tests/simple-encoder.c
index 58b0e8c2..a404e9a2 100644
--- a/tests/simple-encoder.c
+++ b/tests/simple-encoder.c
@@ -32,6 +32,7 @@ static guint g_bitrate = 0;
static gchar *g_codec_str;
static gchar *g_output_file_name;
static char **g_input_files = NULL;
+static gboolean g_roi_enable = FALSE;
#define SURFACE_NUM 16
@@ -42,6 +43,8 @@ static GOptionEntry g_options[] = {
"desired bitrate expressed in kbps", NULL},
{"output", 'o', 0, G_OPTION_ARG_FILENAME, &g_output_file_name,
"output file name", NULL},
+ {"roi", 'r', 0, G_OPTION_ARG_NONE, &g_roi_enable,
+ "enable region of interest", NULL},
{G_OPTION_REMAINING, ' ', 0, G_OPTION_ARG_FILENAME_ARRAY, &g_input_files,
"input file name", NULL},
{NULL}
@@ -58,6 +61,7 @@ typedef struct
FILE *output_file;
guint input_stopped:1;
guint encode_failed:1;
+ GstVaapiROI roi_region[2];
} App;
static inline gchar *
@@ -180,6 +184,35 @@ set_format (GstVaapiEncoder * encoder, gint width, gint height, gint fps_n,
return (status == GST_VAAPI_ENCODER_STATUS_SUCCESS);
}
+static void
+add_roi (App * app)
+{
+ guint i;
+ gint width, height;
+
+ width = app->parser->width;
+ height = app->parser->height;
+
+ for (i = 0; i < 2; i++) {
+ app->roi_region[i].roi_value = 4;
+ app->roi_region[i].rect.x = i * width / 2;
+ app->roi_region[i].rect.y = i * height / 2;
+ app->roi_region[i].rect.width = width / 4;
+ app->roi_region[i].rect.height = height / 4;
+
+ gst_vaapi_encoder_add_roi (app->encoder, &app->roi_region[i]);
+ }
+}
+
+static void
+del_roi (App * app)
+{
+ guint i;
+
+ for (i = 0; i < 2; i++)
+ gst_vaapi_encoder_del_roi (app->encoder, &app->roi_region[i]);
+}
+
static GstBuffer *
allocate_buffer (GstVaapiCodedBuffer * vbuf)
{
@@ -293,6 +326,9 @@ app_free (App * app)
{
g_return_if_fail (app);
+ if (g_roi_enable)
+ del_roi (app);
+
if (app->parser)
y4m_reader_close (app->parser);
@@ -348,6 +384,9 @@ app_new (const gchar * input_fn, const gchar * output_fn)
goto error;
}
+ if (g_roi_enable)
+ add_roi (app);
+
return app;
error: