#endif /* LOG_TAG */
#define LOG_TAG "CAMERA_HAL"
-#ifndef LOGV
-#define LOGV(fmt, arg...) dlog_print(DLOG_VERBOSE, LOG_TAG, "%s (%d) %s : " fmt, __FILE__, __LINE__, __FUNCTION__, ##arg)
-#endif
-#ifndef LOGD
-#define LOGD(fmt, arg...) dlog_print(DLOG_DEBUG, LOG_TAG, "%s (%d) %s : " fmt, __FILE__, __LINE__, __FUNCTION__, ##arg)
-#endif
-#ifndef LOGI
-#define LOGI(fmt, arg...) dlog_print(DLOG_INFO, LOG_TAG, "%s (%d) %s : " fmt, __FILE__, __LINE__, __FUNCTION__, ##arg)
-#endif
-#ifndef LOGW
-#define LOGW(fmt, arg...) dlog_print(DLOG_WARN, LOG_TAG, "%s (%d) %s : " fmt, __FILE__, __LINE__, __FUNCTION__, ##arg)
-#endif
-#ifndef LOGE
-#define LOGE(fmt, arg...) dlog_print(DLOG_ERROR, LOG_TAG, "%s (%d) %s : " fmt, __FILE__, __LINE__, __FUNCTION__, ##arg)
-#endif
-
#define ENV_VIRTUAL_CAMERA "VIRTUAL_CAMERA"
#define VIRTUAL_CAMERA_FMT_MAX 2
#define VIRTUAL_CAMERA_RES_MAX 3
ctrl.id = cid;
if (!g_is_virtual_camera_mode)
- ret = ioctl(device_fd, VIDIOC_G_CTRL, &ctrl);
+ ret = v4l2_ioctl(device_fd, VIDIOC_G_CTRL, &ctrl);
if (ret == 0)
*value = ctrl.value;
ctrl.value = value;
if (!g_is_virtual_camera_mode)
- ret = ioctl(device_fd, VIDIOC_S_CTRL, &ctrl);
+ ret = v4l2_ioctl(device_fd, VIDIOC_S_CTRL, &ctrl);
LOGD("S_CTRL id 0x%x, value %d, ret %d", cid, value, ret);
}
if (!g_is_virtual_camera_mode) {
- if (ioctl(device_fd, onoff ? VIDIOC_STREAMON : VIDIOC_STREAMOFF, &type) < 0) {
+ if (v4l2_ioctl(device_fd, onoff ? VIDIOC_STREAMON : VIDIOC_STREAMOFF, &type) < 0) {
LOGE("stream %d failed. [t:%d] errno %d", onoff, type, errno);
return CAMERA_ERROR_INTERNAL;
}
v4l2_reqbuf.count = count;
if (!g_is_virtual_camera_mode) {
- if (ioctl(device_fd, VIDIOC_REQBUFS, &v4l2_reqbuf) < 0) {
+ if (v4l2_ioctl(device_fd, VIDIOC_REQBUFS, &v4l2_reqbuf) < 0) {
LOGE("REQBUFS[count %d] failed. errno %d", count, errno);
return CAMERA_ERROR_INTERNAL;
}
}
if (!g_is_virtual_camera_mode) {
- if (ioctl(device_fd, VIDIOC_QBUF, &v4l2_buf) < 0) {
+ if (v4l2_ioctl(device_fd, VIDIOC_QBUF, &v4l2_buf) < 0) {
LOGE("qbuf failed. [i: %d, t: %d, m: %d] errno %d",
index, type, memory, errno);
return CAMERA_ERROR_INTERNAL;
v4l2_buf.m.planes = v4l2_planes;
if (!g_is_virtual_camera_mode) {
- ret = ioctl(device_fd, VIDIOC_DQBUF, &v4l2_buf);
+ ret = v4l2_ioctl(device_fd, VIDIOC_DQBUF, &v4l2_buf);
if (ret < 0) {
LOGE("dqbuf failed. [t: %d, m: %d] errno %d",
type, memory, errno);
ival.width = width;
ival.height = height;
- while (ioctl(device_fd, VIDIOC_ENUM_FRAMEINTERVALS, &ival) >= 0) {
+ while (v4l2_ioctl(device_fd, VIDIOC_ENUM_FRAMEINTERVALS, &ival) >= 0) {
if (ival.type != V4L2_FRMIVAL_TYPE_DISCRETE) {
LOGE("NOT DISCRETE type[%u] for [%dx%d]", ival.type, width, height);
return;
v4l2_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (!g_is_virtual_camera_mode) {
- if (ioctl(device_fd, VIDIOC_ENUM_FMT, &v4l2_format) < 0) {
+ if (v4l2_ioctl(device_fd, VIDIOC_ENUM_FMT, &v4l2_format) < 0) {
LOGW("\tformat : end of enumeration");
break;
}
v4l2_frame.pixel_format = v4l2_format.pixelformat;
if (!g_is_virtual_camera_mode) {
- if (ioctl(device_fd, VIDIOC_ENUM_FRAMESIZES, &v4l2_frame) < 0) {
+ if (v4l2_ioctl(device_fd, VIDIOC_ENUM_FRAMESIZES, &v4l2_frame) < 0) {
LOGW("\t\tframesize : end of enumeration");
break;
}
int ret = CAMERA_ERROR_NONE;
int device_count = 0;
int device_fd = CAMERA_HAL_INITIAL_FD;
+#ifdef HAVE_LIBV4L2
+ int libv4l2_fd = CAMERA_HAL_INITIAL_FD;
+#endif /* HAVE_LIBV4L2 */
glob_t glob_buf;
struct v4l2_capability v4l2_cap;
guint32 device_caps;
continue;
}
+#ifdef HAVE_LIBV4L2
+ libv4l2_fd = v4l2_fd_open(device_fd, V4L2_ENABLE_ENUM_FMT_EMULATION);
+
+ LOGI("device_fd[%d], libv4l2_fd[%d]", device_fd, libv4l2_fd);
+
+ if (libv4l2_fd != CAMERA_HAL_INITIAL_FD)
+ device_fd = libv4l2_fd;
+#endif /* HAVE_LIBV4L2 */
+
memset(&v4l2_cap, 0x0, sizeof(struct v4l2_capability));
- if (ioctl(device_fd, VIDIOC_QUERYCAP, &v4l2_cap) < 0) {
+ if (v4l2_ioctl(device_fd, VIDIOC_QUERYCAP, &v4l2_cap) < 0) {
LOGE("querycap failed. errno %d", errno);
- close(device_fd);
+ v4l2_close(device_fd);
continue;
}
if (!(device_caps & (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) ||
(device_caps & (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE))) {
LOGW("[%s] is not a capture device 0x%x", glob_buf.gl_pathv[i], device_caps);
- close(device_fd);
+ v4l2_close(device_fd);
continue;
}
&device_info_list->device_info[device_count],
&device_capability_list->capability[device_count]);
- close(device_fd);
+ v4l2_close(device_fd);
if (ret == CAMERA_ERROR_NONE && device_capability_list->capability[device_count]) {
g_device_caps[device_count] = device_caps;
if (buffer->planes[0].data) {
#ifndef TIZEN_FEATURE_ZERO_COPY_SUPPORT
LOGI(" munmap %p", buffer->planes[0].data);
- munmap(buffer->planes[0].data, buffer->planes[0].size);
+ v4l2_munmap(buffer->planes[0].data, buffer->planes[0].size);
#endif
buffer->planes[0].data = NULL;
buffer->planes[0].size = 0;
}
if (!g_is_virtual_camera_mode) {
- if (ioctl(handle->device_fd, VIDIOC_S_FMT, &v4l2_fmt) < 0) {
+ if (v4l2_ioctl(handle->device_fd, VIDIOC_S_FMT, &v4l2_fmt) < 0) {
LOGE("S_FMT failed. errno %d", errno);
return CAMERA_ERROR_INTERNAL;
}
v4l2_parm.type = handle->buffer_type;
if (!g_is_virtual_camera_mode) {
- if (ioctl(handle->device_fd, VIDIOC_G_PARM, &v4l2_parm) < 0) {
+ if (v4l2_ioctl(handle->device_fd, VIDIOC_G_PARM, &v4l2_parm) < 0) {
LOGE("G_PARM failed. errno %d", errno);
return CAMERA_ERROR_INTERNAL;
}
v4l2_parm.parm.capture.timeperframe.denominator = fps;
if (!g_is_virtual_camera_mode) {
- if (ioctl(handle->device_fd, VIDIOC_S_PARM, &v4l2_parm) < 0) {
+ if (v4l2_ioctl(handle->device_fd, VIDIOC_S_PARM, &v4l2_parm) < 0) {
LOGE("S_PARM failed. errno %d", errno);
return CAMERA_ERROR_INTERNAL;
}
v4l2_buf.m.planes = v4l2_planes;
v4l2_buf.length = plane_num;
- if (ioctl(handle->device_fd, VIDIOC_QUERYBUF, &v4l2_buf) < 0) {
+ if (v4l2_ioctl(handle->device_fd, VIDIOC_QUERYBUF, &v4l2_buf) < 0) {
LOGE("[%d] query buf failed. errno %d", i, errno);
ret = CAMERA_ERROR_INTERNAL;
goto _START_STREAM_FAILED;
buffer->total_size = v4l2_buf.length;
buffer->num_planes = plane_num;
buffer->planes[0].size = v4l2_buf.length;
- buffer->planes[0].data = mmap(0,
+ buffer->planes[0].data = v4l2_mmap(0,
v4l2_buf.length,
PROT_READ | PROT_WRITE,
MAP_SHARED,
for (i = 0 ; i < BUFFER_MAX ; i++)
new_handle->tbm_buffers[i].dmabuf_fd = CAMERA_HAL_INITIAL_FD;
+#ifdef HAVE_LIBV4L2
+ LOGI("libv4l2 ENABLED");
+#else /* HAVE_LIBV4L2 */
+ LOGI("libv4l2 DISABLED");
+#endif /* HAVE_LIBV4L2 */
+
*camera_handle = new_handle;
LOGD("camera HAL handle %p", new_handle);
{
int ret = CAMERA_ERROR_NONE;
int device_fd = CAMERA_HAL_INITIAL_FD;
+#ifdef HAVE_LIBV4L2
+ int libv4l2_fd = CAMERA_HAL_INITIAL_FD;
+#endif /* HAVE_LIBV4L2 */
char *node_path = NULL;
hal_camera_handle *handle = (hal_camera_handle *)camera_handle;
handle->memory_type = V4L2_MEMORY_MMAP;
#endif
+#ifdef HAVE_LIBV4L2
+ libv4l2_fd = v4l2_fd_open(device_fd, V4L2_ENABLE_ENUM_FMT_EMULATION);
+
+ LOGI("device_fd[%d], libv4l2_fd[%d]", device_fd, libv4l2_fd);
+
+ if (libv4l2_fd != CAMERA_HAL_INITIAL_FD)
+ device_fd = libv4l2_fd;
+#endif /* HAVE_LIBV4L2 */
+
_OPEN_DEVICE_DONE:
handle->state = CAMERA_STATE_OPENED;
handle->device_index = device_index;
if (!g_is_virtual_camera_mode) {
if (handle->device_fd >= 0) {
LOGD("close fd %d", handle->device_fd);
- close(handle->device_fd);
+ v4l2_close(handle->device_fd);
handle->device_fd = CAMERA_HAL_INITIAL_FD;
} else {
LOGW("invalid fd %d", handle->device_fd);
}
-int camera_v4l2_get_device_capability_list(camera_device_capability_list_s *device_capability_list)
-{
- int ret = 0;
-
- if (!device_capability_list) {
- LOGE("NULL pointer for device_capability_list");
- return CAMERA_ERROR_INVALID_PARAMETER;
- }
-
- ret = __camera_get_device_info_list();
- if (ret != CAMERA_ERROR_NONE) {
- LOGE("get device info failed");
- return ret;
- }
-
- memcpy(device_capability_list, g_device_capability_list, sizeof(camera_device_capability_list_s));
-
- return CAMERA_ERROR_NONE;
-}
-
-
static int camera_v4l2_backend_init(void **data)
{
hal_backend_camera_funcs *funcs = NULL;
funcs->get_extra_preview_bitrate = camera_v4l2_get_extra_preview_bitrate;
funcs->set_extra_preview_gop_interval = camera_v4l2_set_extra_preview_gop_interval;
funcs->get_extra_preview_gop_interval = camera_v4l2_get_extra_preview_gop_interval;
- funcs->get_device_capability_list = camera_v4l2_get_device_capability_list;
g_is_virtual_camera_mode = getenv(ENV_VIRTUAL_CAMERA) ? TRUE : FALSE;