#include #include #include #include using namespace std; #define USE(x) ((void)(x)) static GstPipeline *gst_pipeline = nullptr; static string launch_string; GstClockTime usec = 1000000; int main(int argc, char** argv) { USE(argc); USE(argv); gst_init (&argc, &argv); GMainLoop *main_loop; main_loop = g_main_loop_new (NULL, FALSE); ostringstream launch_stream; GstBus* bus; launch_stream << "videotestsrc is-live=1 ! " << "video/x-raw,width=1920,height=1080,format=YUY2 ! " << "nvvidconv ! video/x-raw(memory:NVMM),format=NV12 ! nvdrmvideosink "; launch_string = launch_stream.str(); g_print("Using launch string: %s\n", launch_string.c_str()); GError *error = nullptr; for(guint i=0; i<300; i++) { g_print("loop= %d \n", i); gst_pipeline = (GstPipeline*) gst_parse_launch(launch_string.c_str(), &error); if (gst_pipeline == nullptr) { g_print( "Failed to parse launch: %s\n", error->message); return -1; } if(error) g_error_free(error); gst_element_set_state((GstElement*)gst_pipeline, GST_STATE_PLAYING); g_usleep(5*usec); gst_element_send_event ((GstElement*)gst_pipeline, gst_event_new_eos ()); // Wait for EOS message bus = gst_pipeline_get_bus(GST_PIPELINE(gst_pipeline)); gst_bus_poll(bus, GST_MESSAGE_EOS, GST_CLOCK_TIME_NONE); gst_element_set_state((GstElement*)gst_pipeline, GST_STATE_NULL); gst_object_unref(GST_OBJECT(gst_pipeline)); g_usleep(1*usec); } g_main_loop_unref(main_loop); g_print("going to exit \n"); return 0; }