diff options
author | Hyunjun Ko <zzoon@igalia.com> | 2017-02-23 18:53:18 +0900 |
---|---|---|
committer | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2017-05-12 11:12:56 +0200 |
commit | c21345c4787bb6342adddea1190f53fe62abff04 (patch) | |
tree | 2b67ed8b633a8f21729f5ddc6e4dd44db7beb025 /tests | |
parent | f3302a0a7935da2f120c9ec2785648c8a763dd5a (diff) | |
download | gstreamer-vaapi-c21345c4787bb6342adddea1190f53fe62abff04.tar.gz |
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>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/simple-encoder.c | 39 |
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: |