To begin, I run this command to set all of my pipeline elements to paused:
int ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
Next, I check all of my pipeline components to ensure that they are in the paused state (which they are):
GstElement(imagesaver), status = PAUSED, pending = VOID_PENDING
GstElement(saveImageTee), status = PAUSED, pending = VOID_PENDING
GstElement(imagevideoconvert), status = PAUSED, pending = VOID_PENDING
GstElement(imagecapsfilter), status = PAUSED, pending = VOID_PENDING
GstElement(imagevideocrop), status = PAUSED, pending = VOID_PENDING
GstElement(videomuxer), status = PAUSED, pending = VOID_PENDING
GstElement(h264encoder), status = PAUSED, pending = VOID_PENDING
GstElement(imagequeue), status = PAUSED, pending = VOID_PENDING
GstElement(featurescanner), status = PAUSED, pending = PAUSED
GstElement(scannerqueue), status = PAUSED, pending = VOID_PENDING
GstElement(cfilter), status = PAUSED, pending = VOID_PENDING
GstElement(videoconversion), status = PAUSED, pending = VOID_PENDING
GstElement(convertqueue), status = PAUSED, pending = VOID_PENDING
GstElement(crop), status = PAUSED, pending = VOID_PENDING
GstElement(cropQueue), status = PAUSED, pending = VOID_PENDING
GstElement(source), status = PAUSED, pending = VOID_PENDING
Then I try to play my pipeline:
int ret = gst_element_set_state(pipeline, GST_STATE_PLAYING);
Which results in all my elements being set to the NULL
state
GstElement(imagesaver), status = NULL, pending = VOID_PENDING
GstElement(saveImageTee), status = NULL, pending = VOID_PENDING
GstElement(imagevideoconvert), status = NULL, pending = VOID_PENDING
GstElement(imagecapsfilter), status = NULL, pending = VOID_PENDING
GstElement(imagevideocrop), status = NULL, pending = VOID_PENDING
GstElement(videomuxer), status = NULL, pending = VOID_PENDING
GstElement(h264encoder), status = NULL, pending = VOID_PENDING
GstElement(imagequeue), status = NULL, pending = VOID_PENDING
GstElement(featurescanner), status = NULL, pending = VOID_PENDING
GstElement(scannerqueue), status = NULL, pending = VOID_PENDING
GstElement(cfilter), status = NULL, pending = VOID_PENDING
GstElement(videoconversion), status = NULL, pending = VOID_PENDING
GstElement(convertqueue), status = NULL, pending = VOID_PENDING
GstElement(crop), status = NULL, pending = VOID_PENDING
GstElement(cropQueue), status = NULL, pending = VOID_PENDING
GstElement(source), status = NULL, pending = VOID_PENDING
The error message I get with this output is:
Setting pipeline to Play state
Pipeline would not play, returned 2
The return value of 2 is: GST_STATE_CHANGE_ASYNC
which I assumed would be fixed by setting my fileSink async property to false:
g_object_set(G_OBJECT (fileSink), "async", gboolean(FALSE), NULL);
This is the function I am calling to play the pipeline after being in a paused state:
void ScanningProcessor::PlayPipeline()
{
gst_element_set_state(GST_ELEMENT(fileSink), GST_STATE_PLAYING);
if(GST_STATE(pipeline) != GST_STATE_NULL)
{
MBPLog::Log(LM_CameraLibrary, LS_Informational, "Setting pipeline to Play state");
int ret = gst_element_set_state(pipeline, GST_STATE_PLAYING);
if(ret != GST_STATE_PLAYING)
{
MBPLog::Log(LM_CameraLibrary, LS_Error, "Pipeline would not play, returned %d", ret);
gst_element_set_state (pipeline, GST_STATE_NULL);
}
}
}