全网首发:高通平台:gstreamer正确切换分辨率或帧率的代码
经过验证确实可用。缺点实际上等于重新打开一次摄像头大约需要3秒。切换代码WyCameraCtx* pCamera g_oStreamRtsp.pCamera; gst_element_unlink(pCamera-qtiqmmfsrc, g_oStreamRtsp.capsfilter); gst_element_set_state (pCamera-qtiqmmfsrc, GST_STATE_NULL); gst_bin_remove (GST_BIN (g_oWorkCtx.pipeline), pCamera-qtiqmmfsrc); pCamera-qtiqmmfsrc NULL; pCamera-reference 0; pCamera-getSrc(); gst_element_sync_state_with_parent (pCamera-getSrc()); gst_bin_add (GST_BIN (g_oWorkCtx.pipeline), pCamera-getSrcForLink()); int old_fps fps[count%FPS_RANGE]; count ; int new_fps fps[count%FPS_RANGE]; WY_LOG_INFO(change fps count%d, %d - %d, count, old_fps, new_fps); set_capsfilter (g_oStreamRtsp.capsfilter, DEFAULT_WIDTH, DEFAULT_HEIGHT, new_fps); gst_element_link(pCamera-qtiqmmfsrc, g_oStreamRtsp.capsfilter); WY_LOG_TEXT(change fps OK);getSrc()GstElement* getSrc() { if (reference 0 qtiqmmfsrc NULL) { qtiqmmfsrc gst_element_factory_make (qtiqmmfsrc, qtiqmmfsrc_name); g_object_set (G_OBJECT (qtiqmmfsrc), name, qmmf_name, NULL); g_object_set (G_OBJECT (qtiqmmfsrc), camera, id, NULL); gst_bin_add (GST_BIN (pipeline), qtiqmmfsrc); } return qtiqmmfsrc; } GstElement* getSrcForLink() { reference; WY_LOG_INT(reference); return getSrc(); }set_capsfiltervoid set_capsfilter(GstElement* capsfilter, const int width, const int height, const int fps) { // Set caps GstCaps* caps gst_caps_new_simple (video/x-raw, format, G_TYPE_STRING, NV12, width, G_TYPE_INT, width, height, G_TYPE_INT, height, framerate, GST_TYPE_FRACTION, fps, 1, NULL); gst_caps_set_features (caps, 0, gst_caps_features_new (memory:GBM, NULL)); g_object_set (G_OBJECT (capsfilter), caps, caps, NULL); gst_caps_unref (caps); }