static gboolean gst_imx_v4l2src_set_focus_mode(GstPhotography *photo, GstPhotographyFocusMode focus_mode) { GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(photo); GST_LOG_OBJECT(v4l2src, "setting focus mode to %d", focus_mode); switch (focus_mode) { case GST_PHOTOGRAPHY_FOCUS_MODE_AUTO: case GST_PHOTOGRAPHY_FOCUS_MODE_MACRO: case GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT: case GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY: break; case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL: case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED: focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL; break; default: GST_WARNING_OBJECT(v4l2src, "focus mode %d is not supported", focus_mode); return FALSE; } g_mutex_lock(&v4l2src->af_mutex); if (v4l2src->focus_mode != focus_mode) { v4l2src->focus_mode = focus_mode; if (GST_STATE(v4l2src) == GST_STATE_PAUSED || GST_STATE(v4l2src) == GST_STATE_PLAYING) gst_imx_v4l2src_apply_focus_settings(v4l2src, TRUE); } g_mutex_unlock(&v4l2src->af_mutex); return TRUE; }
static gboolean gst_imx_v4l2src_stop(GstBaseSrc *src) { GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(src); GST_LOG_OBJECT(v4l2src, "stop"); g_mutex_lock(&v4l2src->af_mutex); gst_imx_v4l2src_apply_focus_settings(v4l2src, FALSE); g_mutex_unlock(&v4l2src->af_mutex); gst_imx_fd_object_unref(v4l2src->fd_obj_v4l); return TRUE; }
static gboolean gst_imx_v4l2src_start(GstBaseSrc *src) { GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(src); struct v4l2_format fmt; int fd_v4l; GST_LOG_OBJECT(v4l2src, "start"); fd_v4l = gst_imx_v4l2src_capture_setup(v4l2src); if (fd_v4l < 0) { GST_ERROR_OBJECT(v4l2src, "capture_setup failed"); return FALSE; } v4l2src->fd_obj_v4l = gst_fd_object_new(fd_v4l); fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (ioctl(GST_IMX_FD_OBJECT_GET_FD(v4l2src->fd_obj_v4l), VIDIOC_G_FMT, &fmt) < 0) { GST_ERROR_OBJECT(v4l2src, "VIDIOC_G_FMT failed"); return FALSE; } GST_DEBUG_OBJECT(v4l2src, "width = %d", fmt.fmt.pix.width); GST_DEBUG_OBJECT(v4l2src, "height = %d", fmt.fmt.pix.height); GST_DEBUG_OBJECT(v4l2src, "sizeimage = %d", fmt.fmt.pix.sizeimage); GST_DEBUG_OBJECT(v4l2src, "pixelformat = %d", fmt.fmt.pix.pixelformat); v4l2src->time_per_frame = gst_util_uint64_scale_int(GST_SECOND, v4l2src->fps_d, v4l2src->fps_n); v4l2src->count = 0; g_mutex_lock(&v4l2src->af_mutex); gst_imx_v4l2src_apply_focus_settings(v4l2src, TRUE); g_mutex_unlock(&v4l2src->af_mutex); return TRUE; }