I have a pipeline such as:
appsrc -> nvvidconv -> nvv4l2h264enc -> h264parse -> matroskamux -> filesync
After playing the pipeline, I try to modify the source caps, as in:
// Pause the pipeline
gst_element_set_state(pipeline, GST_STATE_NULL);
// Update the caps
auto caps = gst_caps_new_simple(
"video/x-raw",
"format", G_TYPE_STRING, "RGBA",
"bpp", G_TYPE_INT, 32,
"depth", G_TYPE_INT, 32,
"width", G_TYPE_INT, m_width,
"height", G_TYPE_INT, m_height,
"framerate", GST_TYPE_FRACTION, NEW_FPS, 1,
NULL);
g_object_set(appsrc, "caps", caps, NULL);
gst_caps_unref(caps);
// Continue the pipeline
gst_element_set_state(pipeline, GST_STATE_PLAYING);
In the GStreamer logs I see that after trying to continue the pipeline (set to PLAYING), the elements start playing up until nvv4l2h264enc, which never gets back to the playing state. Seems to be silently stuck:
state-changed el:sink from:PAUSED to:PLAYING
state-changed el:muxer from:PAUSED to:PLAYING
state-changed el:queue0 from:PAUSED to:PLAYING
state-changed el:filesync0 from:PAUSED to:PLAYING
state-changed el:h264parse3 from:PAUSED to:PLAYING
state-changed el:capsfilter7 from:PAUSED to:PLAYING
state-changed el:nvv4l2h264enc0 from:PAUSED to:PLAYING
state-changed el:capsfilter6 from:PAUSED to:PLAYING
state-changed el:nvvconv3 from:PAUSED to:PLAYING
state-changed el:appsrc0 from:PAUSED to:PLAYING
state-changed el:pipeline3 from:PAUSED to:PLAYING
...
// gst_element_set_state(pipeline, GST_STATE_NULL);
state-changed el:sink from:PLAYING to:PAUSED
state-changed el:muxer from:PLAYING to:PAUSED
state-changed el:queue0 from:PLAYING to:PAUSED
state-changed el:filesync0 from:PLAYING to:PAUSED
state-changed el:h264parse3 from:PLAYING to:PAUSED
state-changed el:capsfilter7 from:PLAYING to:PAUSED
state-changed el:nvv4l2h264enc0 from:PLAYING to:PAUSED
state-changed el:capsfilter6 from:PLAYING to:PAUSED
state-changed el:nvvconv3 from:PLAYING to:PAUSED
state-changed el:appsrc0 from:PLAYING to:PAUSED
state-changed el:pipeline3 from:PLAYING to:PAUSED
// set caps..
// gst_element_set_state(pipeline, GST_STATE_PLAYING);
state-changed el:sink from:PAUSED to:READY
state-changed el:muxer from:PAUSED to:READY
stream-status
state-changed el:queue0 from:PAUSED to:READY
state-changed el:filesync0 from:PAUSED to:READY
state-changed el:h264parse3 from:PAUSED to:READY
state-changed el:capsfilter7 from:PAUSED to:READY