gstreamer/tests/examples/rpicamsrc/test_orientation.c
Philippe Normand cda483cb3c rpicamsrc: Basic orientation interface support
The (h,v)flip attributes are now supported through this interface.
It should also be possible to support (h,v)center attributes using the
ROI properties.
2020-07-10 16:45:13 +01:00

70 lines
1.9 KiB
C

/*
* Copyright (c) 2015, Igalia S.L
* Author: Philippe Normand <philn@igalia.com>
* Licence: LGPL. (See COPYING.LGPL)
*/
#include <glib.h>
#include <gst/gst.h>
#include <gst/video/videoorientation.h>
#define PIPELINE "rpicamsrc name=src preview=0 fullscreen=0 ! h264parse ! omxh264dec ! glimagesink sync=0"
void configure_orientation(GstVideoOrientation* orientation)
{
gboolean flip;
if (gst_video_orientation_get_hflip(orientation, &flip)) {
g_print("current hflip: %s\n", flip ? "enabled" : "disabled");
if (g_getenv("HFLIP"))
gst_video_orientation_set_hflip(orientation, TRUE);
gst_video_orientation_get_hflip(orientation, &flip);
g_print("new hflip: %s\n", flip ? "enabled" : "disabled");
}
if (gst_video_orientation_get_vflip(orientation, &flip)) {
g_print("current vflip: %s\n", flip ? "enabled" : "disabled");
if (g_getenv("VFLIP"))
gst_video_orientation_set_vflip(orientation, TRUE);
gst_video_orientation_get_vflip(orientation, &flip);
g_print("new vflip: %s\n", flip ? "enabled" : "disabled");
}
}
int main(int argc, char** argv)
{
GMainLoop* loop;
GstElement* pipeline;
GError* error = NULL;
GstElement* src;
GstVideoOrientation* orientation;
gst_init(&argc, &argv);
loop = g_main_loop_new(NULL, FALSE);
pipeline = gst_parse_launch(PIPELINE, &error);
if (error != NULL) {
g_printerr("Error parsing '%s': %s", PIPELINE, error->message);
g_error_free(error);
return -1;
}
gst_element_set_state(pipeline, GST_STATE_PLAYING);
src = gst_bin_get_by_name(GST_BIN(pipeline), "src");
if (!src) {
g_printerr("Source element not found\n");
return -2;
}
orientation = GST_VIDEO_ORIENTATION(src);
configure_orientation(orientation);
g_main_loop_run(loop);
gst_object_unref(src);
gst_element_set_state(pipeline, GST_STATE_NULL);
return 0;
}