## To connect to the `notify::caps` signal in GStreamer with a pipeline that uses `nvh264dec` :::info GStreamer is a framework for creating streaming media applications. It is a pipeline-based multimedia framework that links together a wide variety of media processing systems to complete complex workflows. ::: You can use the `g_signal_connect()` function to connect to the signal . The `notify::caps` signal is emitted when the caps of a pad have changed, which can happen when a new stream is detected or when the caps are renegotiated . Here's an example of how to connect to the `notify::caps` signal in GStreamer with a pipeline that uses `nvh264dec`: ```c++ #include <gst/gst.h> static void on_caps_changed(GstElement *element, GParamSpec *pspec, gpointer user_data) { // Handle caps changed event here } int main(int argc, char *argv[]) { GstElement *pipeline, *src, *decoder, *sink; GstBus *bus; GstMessage *msg; GMainLoop *loop; /* Initialize GStreamer */ gst_init(&argc, &argv); loop = g_main_loop_new(NULL, FALSE); /* Create elements */ pipeline = gst_pipeline_new("my-pipeline"); src = gst_element_factory_make("filesrc", "src"); decoder = gst_element_factory_make("nvh264dec", "decoder"); sink = gst_element_factory_make("autovideosink", "sink"); /* Add elements to the pipeline */ gst_bin_add_many(GST_BIN(pipeline), src, decoder, sink, NULL); /* Link elements */ if (!gst_element_link(src, decoder)) { g_error("Failed to link src and decoder"); } if (!gst_element_link(decoder, sink)) { g_error("Failed to link decoder and sink"); } /* Connect to the notify::caps signal */ g_signal_connect(decoder, "notify::caps", G_CALLBACK(on_caps_changed), NULL); /* Start playing */ gst_element_set_state(pipeline, GST_STATE_PLAYING); /* Wait for EOS or error */ bus = gst_element_get_bus(pipeline); msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS); if (msg != NULL) { gst_message_unref(msg); } gst_object_unref(bus); gst_element_set_state(pipeline, GST_STATE_NULL); gst_object_unref(pipeline); return 0; } ``` This program creates a GStreamer pipeline that reads from a file source, decodes the H.264 video using `nvh264dec`, and displays the video using `autovideosink`. It then connects to the `notify::caps` signal of the `nvh264dec` element using `g_signal_connect()`. When the caps of the `nvh264dec` element change, the `on_caps_changed()` function is called. Finally, the program starts playing the pipeline and waits for the end of the stream or an error message.