/* * Copyright (c) 2015, Igalia S.L * Author: Philippe Normand * Licence: LGPL. (See COPYING.LGPL) */ #include #include #include #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; }