gboolean gst_droidcamsrc_dev_restart (GstDroidCamSrcDev * dev) { gboolean ret = FALSE; g_rec_mutex_lock (dev->lock); GST_DEBUG ("dev restart"); if (dev->running) { gst_droidcamsrc_dev_stop (dev); ret = gst_droidcamsrc_dev_start (dev, TRUE); } else { ret = TRUE; } g_rec_mutex_unlock (dev->lock); return ret; }
gboolean gst_droidcamsrc_mode_activate (GstDroidCamSrcMode * mode) { gboolean ret; gboolean running; g_rec_mutex_lock (&mode->src->dev_lock); if (!mode->src->dev) { GST_INFO_OBJECT (mode->src, "dev not ready. deferring caps negotiation"); g_rec_mutex_unlock (&mode->src->dev_lock); return TRUE; } running = gst_droidcamsrc_dev_is_running (mode->src->dev); if (running) { gst_droidcamsrc_dev_stop (mode->src->dev); } gst_droidcamsrc_mode_negotiate_pad (mode, mode->modesrc, FALSE); gst_droidcamsrc_mode_negotiate_pad (mode, mode->vfsrc, TRUE); if (running) { ret = gst_droidcamsrc_dev_start (mode->src->dev, FALSE); } else { ret = gst_droidcamsrc_apply_params (mode->src); } /* now update max-zoom that we have a preview size */ gst_droidcamsrc_dev_update_params (mode->src->dev); gst_droidcamsrc_update_max_zoom (mode->src); g_rec_mutex_unlock (&mode->src->dev_lock); return ret; }
gboolean gst_droidcamsrc_mode_negotiate (GstDroidCamSrcMode * mode, GstPad * pad) { gboolean ret; gboolean running; g_rec_mutex_lock (&mode->src->dev_lock); running = gst_droidcamsrc_dev_is_running (mode->src->dev); if (running && pad == mode->vfsrc) { /* stop preview */ gst_droidcamsrc_dev_stop (mode->src->dev); } gst_droidcamsrc_mode_negotiate_pad (mode, pad, FALSE); if (pad == mode->vfsrc) { /* start which will also apply the settings */ if (running) { ret = gst_droidcamsrc_dev_start (mode->src->dev, FALSE); } else { ret = gst_droidcamsrc_apply_params (mode->src); } /* now update max-zoom that we have a preview size */ gst_droidcamsrc_dev_update_params (mode->src->dev); gst_droidcamsrc_update_max_zoom (mode->src); } else { /* apply settings */ ret = gst_droidcamsrc_dev_set_params (mode->src->dev); } g_rec_mutex_unlock (&mode->src->dev_lock); return ret; }