@@ -849,6 +849,44 @@ CameraError CameraDevice::StartVideoStream(const VideoStreamStruct & allocatedSt
849849 GstStateChangeReturn result = gst_element_set_state (videoPipeline, GST_STATE_PLAYING);
850850 if (result == GST_STATE_CHANGE_FAILURE)
851851 {
852+ // Get error message from GStreamer bus
853+ GstBus * bus = gst_element_get_bus (videoPipeline);
854+ if (bus)
855+ {
856+ GstMessage * msg = gst_bus_pop_filtered (bus, (GstMessageType) (GST_MESSAGE_ERROR | GST_MESSAGE_WARNING));
857+ if (msg)
858+ {
859+ GError * err = nullptr ;
860+ gchar * debug_info = nullptr ;
861+
862+ if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR)
863+ {
864+ gst_message_parse_error (msg, &err, &debug_info);
865+ ChipLogError (Camera, " GStreamer Error: %s" , err ? err->message : " unknown" );
866+ if (debug_info)
867+ {
868+ ChipLogError (Camera, " Debug info: %s" , debug_info);
869+ }
870+ }
871+ else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_WARNING)
872+ {
873+ gst_message_parse_warning (msg, &err, &debug_info);
874+ ChipLogError (Camera, " GStreamer Warning: %s" , err ? err->message : " unknown" );
875+ if (debug_info)
876+ {
877+ ChipLogError (Camera, " Debug info: %s" , debug_info);
878+ }
879+ }
880+
881+ if (err)
882+ g_error_free (err);
883+ if (debug_info)
884+ g_free (debug_info);
885+ gst_message_unref (msg);
886+ }
887+ gst_object_unref (bus);
888+ }
889+
852890 ChipLogError (Camera, " Failed to start video pipeline." );
853891 gst_object_unref (videoPipeline);
854892 it->videoContext = nullptr ;
0 commit comments