bool stream = false;
bool manualpipeline = false;
- bool st;
char *uri = NULL;
uridecodebin = NULL;
GstElementFactory * testfac;
gst_app_sink_set_caps(GST_APP_SINK(sink), caps);
gst_caps_unref(caps);
- // For fideo files only: set pipeline to PAUSED state to get its duration
+ // For video files only: set pipeline to PAUSED state to get its duration
if (stream)
{
status = gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PAUSED);
GstFormat format;
+ format = GST_FORMAT_DEFAULT;
#if GST_VERSION_MAJOR == 0
-#define FORMAT &format
+ if(!gst_element_query_duration(sink, &format, &duration))
#else
-#define FORMAT format
+ if(!gst_element_query_duration(sink, format, &duration))
#endif
-
- format = GST_FORMAT_DEFAULT;
- st = gst_element_query_duration(sink, FORMAT, &duration);
- if(!st)
{
CV_WARN("GStreamer: unable to query duration of stream");
duration = -1;
GstStateChangeReturn status;
if (pipeline)
{
- //handleMessage(pipeline);
+ handleMessage(pipeline);
if (gst_app_src_end_of_stream(GST_APP_SRC(source)) != GST_FLOW_OK)
+ {
CV_WARN("Cannot send EOS to GStreamer pipeline\n");
+ return;
+ }
//wait for EOS to trickle down the pipeline. This will let all elements finish properly
GstBus* bus = gst_element_get_bus(pipeline);
GstMessage *msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
if (GST_MESSAGE_TYPE(msg) == GST_MESSAGE_ERROR)
+ {
CV_WARN("Error during VideoWriter finalization\n");
+ return;
+ }
if(msg != NULL)
{
}
#endif
else {
- fprintf(stderr, "Invalid video format!\n");
+ CV_WARN("Invalid video format!\n");
return false;
}
if (fourcc == VideoWriter::fourcc('M', 'P', 'E', 'G') && ext == "mkv")
allowed_extra_frames = 1;
-/*
if (FRAME_COUNT < IMAGE_COUNT || FRAME_COUNT > IMAGE_COUNT + allowed_extra_frames)
{
ts->printf(ts->LOG, "\nFrame count checking for video_%s.%s...\n", fourcc_str.c_str(), ext.c_str());
ts->set_failed_test_info(ts->FAIL_BAD_ACCURACY);
return;
}
-*/
+
for (int i = 0; (size_t)i < IMAGE_COUNT; i++)
{
Mat frame; cap >> frame;