diff options
author | Paul Kocialkowski <contact@paulk.fr> | 2014-04-22 10:41:29 +0200 |
---|---|---|
committer | Paul Kocialkowski <contact@paulk.fr> | 2014-04-22 10:41:29 +0200 |
commit | 856d6efd46b9193d1af9abfbba8555ea52b3b5df (patch) | |
tree | 6e84bda93010684868443d29670bbff315da98a4 | |
parent | f0b0bbd7be99c5c9d7fa7621844287cbff1fbc5b (diff) | |
download | device_samsung_galaxys2-common-856d6efd46b9193d1af9abfbba8555ea52b3b5df.zip device_samsung_galaxys2-common-856d6efd46b9193d1af9abfbba8555ea52b3b5df.tar.gz device_samsung_galaxys2-common-856d6efd46b9193d1af9abfbba8555ea52b3b5df.tar.bz2 |
camera: Cleanup deprecated files
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
-rw-r--r-- | camera/exynos_camera.h | 433 | ||||
-rw-r--r-- | camera/exynos_v4l2.c | 796 |
2 files changed, 0 insertions, 1229 deletions
diff --git a/camera/exynos_camera.h b/camera/exynos_camera.h deleted file mode 100644 index 8201f6e..0000000 --- a/camera/exynos_camera.h +++ /dev/null @@ -1,433 +0,0 @@ -/* - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdlib.h> -#include <stdint.h> -#include <stdbool.h> -#include <pthread.h> - -#include <videodev2.h> -#include <videodev2_exynos_media.h> -#include <videodev2_exynos_camera.h> - -#include <Exif.h> - -#include <hardware/hardware.h> -#include <hardware/camera.h> - -#ifndef _EXYNOS_CAMERA_H_ -#define _EXYNOS_CAMERA_H_ - -#define EXYNOS_CAMERA_MAX_PRESETS_COUNT 2 -#define EXYNOS_CAMERA_MAX_V4L2_NODES_COUNT 4 -#define EXYNOS_CAMERA_MIN_BUFFERS_COUNT 3 -#define EXYNOS_CAMERA_MAX_BUFFERS_COUNT 8 - -#define EXYNOS_CAMERA_MSG_ENABLED(msg) \ - (exynos_camera->messages_enabled & msg) -#define EXYNOS_CAMERA_CALLBACK_DEFINED(cb) \ - (exynos_camera->callbacks.cb != NULL) - -/* - * Structures - */ - -struct list_head { - struct list_head *next; - struct list_head *prev; -}; - -enum exynos_param_type { - EXYNOS_PARAM_INT, - EXYNOS_PARAM_FLOAT, - EXYNOS_PARAM_STRING, -}; - -union exynos_param_data { - int integer; - float floating; - char *string; -}; - -struct exynos_param { - struct list_head list; - - char *key; - union exynos_param_data data; - enum exynos_param_type type; -}; - -struct exynos_camera_params { - char *preview_size_values; - char *preview_size; - char *preview_format_values; - char *preview_format; - char *preview_frame_rate_values; - int preview_frame_rate; - char *preview_fps_range_values; - char *preview_fps_range; - - char *picture_size_values; - char *picture_size; - char *picture_format_values; - char *picture_format; - char *jpeg_thumbnail_size_values; - int jpeg_thumbnail_width; - int jpeg_thumbnail_height; - int jpeg_thumbnail_quality; - int jpeg_quality; - - char *recording_size; - char *recording_size_values; - char *recording_format; - - char *focus_mode; - char *focus_mode_values; - char *focus_distances; - char *focus_areas; - int max_num_focus_areas; - - int zoom_supported; - int smooth_zoom_supported; - char *zoom_ratios; - int zoom; - int max_zoom; - - char *flash_mode; - char *flash_mode_values; - - int exposure_compensation; - float exposure_compensation_step; - int min_exposure_compensation; - int max_exposure_compensation; - - char *whitebalance; - char *whitebalance_values; - - char *scene_mode; - char *scene_mode_values; - - char *effect; - char *effect_values; - - char *iso; - char *iso_values; -}; - -struct exynos_camera_preset { - char *name; - int facing; - int orientation; - - int rotation; - int hflip; - int vflip; - - int picture_format; - - float focal_length; - float horizontal_view_angle; - float vertical_view_angle; - - int metering; - - struct exynos_camera_params params; -}; - -struct exynos_v4l2_node { - int id; - char *node; -}; - -struct exynox_camera_config { - struct exynos_camera_preset *presets; - int presets_count; - - struct exynos_v4l2_node *v4l2_nodes; - int v4l2_nodes_count; -}; - -struct exynos_camera_callbacks { - camera_notify_callback notify; - camera_data_callback data; - camera_data_timestamp_callback data_timestamp; - camera_request_memory request_memory; - void *user; -}; - -struct exynos_camera { - int v4l2_fds[EXYNOS_CAMERA_MAX_V4L2_NODES_COUNT]; - - struct exynox_camera_config *config; - struct exynos_param *params; - - struct exynos_camera_callbacks callbacks; - int messages_enabled; - - gralloc_module_t *gralloc; - - // Picture - pthread_t picture_thread; - pthread_mutex_t picture_mutex; - int picture_thread_running; - - int picture_enabled; - camera_memory_t *picture_memory; - int picture_buffer_length; - - // Auto-focus - pthread_t auto_focus_thread; - pthread_mutex_t auto_focus_mutex; - int auto_focus_thread_running; - - int auto_focus_enabled; - - // Preview - pthread_t preview_thread; - pthread_mutex_t preview_mutex; - pthread_mutex_t preview_lock_mutex; - int preview_thread_running; - - int preview_enabled; - struct preview_stream_ops *preview_window; - camera_memory_t *preview_memory; - int preview_buffers_count; - int preview_frame_size; - int preview_params_set; - - // Recording - pthread_mutex_t recording_mutex; - - int recording_enabled; - camera_memory_t *recording_memory; - int recording_buffers_count; - - // Camera params - int camera_rotation; - int camera_hflip; - int camera_vflip; - int camera_picture_format; - int camera_focal_length; - int camera_metering; - - int camera_sensor_mode; - - // Params - int preview_width; - int preview_height; - int preview_format; - float preview_format_bpp; - int preview_fps; - int picture_width; - int picture_height; - int picture_format; - int jpeg_thumbnail_width; - int jpeg_thumbnail_height; - int jpeg_thumbnail_quality; - int jpeg_quality; - int recording_width; - int recording_height; - int recording_format; - int focus_mode; - int focus_x; - int focus_y; - int zoom; - int flash_mode; - int exposure_compensation; - int whitebalance; - int scene_mode; - int effect; - int iso; - int metering; -}; - -struct exynos_camera_addrs { - unsigned int type; - unsigned int y; - unsigned int cbcr; - unsigned int index; - unsigned int reserved; -}; - -// This is because the linux header uses anonymous union -struct exynos_v4l2_ext_control { - __u32 id; - __u32 size; - __u32 reserved2[1]; - union { - __s32 value; - __s64 value64; - char *string; - } data; -} __attribute__ ((packed)); - -enum m5mo_af_status { - M5MO_AF_STATUS_FAIL = 0, - M5MO_AF_STATUS_IN_PROGRESS, - M5MO_AF_STATUS_SUCCESS, - M5MO_AF_STATUS_1ST_SUCCESS = 4, -}; - -/* - * Camera - */ - -int exynos_camera_params_init(struct exynos_camera *exynos_camera, int id); -int exynos_camera_params_apply(struct exynos_camera *exynos_camera); - -int exynos_camera_auto_focus_start(struct exynos_camera *exynos_camera); -void exynos_camera_auto_focus_stop(struct exynos_camera *exynos_camera); - -int exynos_camera_picture(struct exynos_camera *exynos_camera); -int exynos_camera_picture_start(struct exynos_camera *exynos_camera); - -int exynos_camera_preview(struct exynos_camera *exynos_camera); -int exynos_camera_preview_start(struct exynos_camera *exynos_camera); -void exynos_camera_preview_stop(struct exynos_camera *exynos_camera); - -/* - * EXIF - */ - -int exynos_exif_attributes_create_static(struct exynos_camera *exynos_camera, - exif_attribute_t *exif_attributes); -int exynos_exif_attributes_create_params(struct exynos_camera *exynos_camera, - exif_attribute_t *exif_attributes); - -int exynos_exif_create(struct exynos_camera *exynos_camera, - exif_attribute_t *exif_attributes, - camera_memory_t *jpeg_thumbnail_data_memory, int jpeg_thumbnail_size, - camera_memory_t **exif_data_memory_p, int *exif_size_p); - -/* - * Param - */ - -int exynos_param_int_get(struct exynos_camera *exynos_camera, - char *key); -float exynos_param_float_get(struct exynos_camera *exynos_camera, - char *key); -char *exynos_param_string_get(struct exynos_camera *exynos_camera, - char *key); - -int exynos_param_int_set(struct exynos_camera *exynos_camera, - char *key, int integer); -int exynos_param_float_set(struct exynos_camera *exynos_camera, - char *key, float floating); -int exynos_param_string_set(struct exynos_camera *exynos_camera, - char *key, char *string); - -char *exynos_params_string_get(struct exynos_camera *exynos_camera); -int exynos_params_string_set(struct exynos_camera *exynos_camera, char *string); - -/* - * V4L2 - */ - -// Utils -int exynos_v4l2_find_index(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_find_fd(struct exynos_camera *exynos_camera, int exynos_v4l2_id); - -// File ops -int exynos_v4l2_open(struct exynos_camera *exynos_camera, int id); -void exynos_v4l2_close(struct exynos_camera *exynos_camera, int id); -int exynos_v4l2_ioctl(struct exynos_camera *exynos_camera, int id, int request, void *data); -int exynos_v4l2_poll(struct exynos_camera *exynos_camera, int exynos_v4l2_id); - -// VIDIOC -int exynos_v4l2_qbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory, int index); -int exynos_v4l2_qbuf_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index); -int exynos_v4l2_qbuf_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index); -int exynos_v4l2_dqbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory); -int exynos_v4l2_dqbuf_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_dqbuf_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_reqbufs(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory, int count); -int exynos_v4l2_reqbufs_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int count); -int exynos_v4l2_reqbufs_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int count); -int exynos_v4l2_querybuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory, int index); -int exynos_v4l2_querybuf_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index); -int exynos_v4l2_querybuf_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index); -int exynos_v4l2_querycap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int flags); -int exynos_v4l2_querycap_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_querycap_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_streamon(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type); -int exynos_v4l2_streamon_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_streamon_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_streamoff(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type); -int exynos_v4l2_streamoff_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_streamoff_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id); -int exynos_v4l2_g_fmt(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int *width, int *height, int *fmt); -int exynos_v4l2_g_fmt_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int *width, int *height, int *fmt); -int exynos_v4l2_g_fmt_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int *width, int *height, int *fmt); -int exynos_v4l2_s_fmt_pix(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int width, int height, int fmt, int priv); -int exynos_v4l2_s_fmt_pix_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int width, int height, int fmt, int priv); -int exynos_v4l2_s_fmt_pix_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int width, int height, int fmt, int priv); -int exynos_v4l2_s_fmt_win(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int left, int top, int width, int height); -int exynos_v4l2_enum_fmt(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int fmt); -int exynos_v4l2_enum_fmt_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int fmt); -int exynos_v4l2_enum_fmt_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int fmt); -int exynos_v4l2_enum_input(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id); -int exynos_v4l2_s_input(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id); -int exynos_v4l2_g_ext_ctrls(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - struct v4l2_ext_control *control, int count); -int exynos_v4l2_g_ctrl(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id, int *value); -int exynos_v4l2_s_ctrl(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id, int value); -int exynos_v4l2_s_parm(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, struct v4l2_streamparm *streamparm); -int exynos_v4l2_s_parm_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - struct v4l2_streamparm *streamparm); -int exynos_v4l2_s_parm_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - struct v4l2_streamparm *streamparm); -int exynos_v4l2_s_crop(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int left, int top, int width, int height); -int exynos_v4l2_s_crop_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int left, int top, int width, int height); -int exynos_v4l2_s_crop_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int left, int top, int width, int height); -int exynos_v4l2_g_fbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - void **base, int *width, int *height, int *fmt); -int exynos_v4l2_s_fbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - void *base, int width, int height, int fmt); - -#endif diff --git a/camera/exynos_v4l2.c b/camera/exynos_v4l2.c deleted file mode 100644 index cca7cd3..0000000 --- a/camera/exynos_v4l2.c +++ /dev/null @@ -1,796 +0,0 @@ -/* - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> - * - * Based on crespo libcamera and exynos4 hal libcamera: - * Copyright 2008, The Android Open Source Project, Apache License 2.0 - * Copyright 2010, Samsung Electronics Co. LTD, Apache License 2.0 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <fcntl.h> -#include <unistd.h> -#include <errno.h> -#include <malloc.h> -#include <poll.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/mman.h> -#include <sys/ioctl.h> - -#include <asm/types.h> - -#define LOG_TAG "exynos_v4l2" -#include <utils/Log.h> - -#include "exynos_camera.h" - -/* - * Utils - */ - -int exynos_v4l2_find_index(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - int index; - int i; - - if (exynos_camera == NULL || exynos_camera->config == NULL || - exynos_camera->config->v4l2_nodes == NULL) - return -EINVAL; - - if (exynos_v4l2_id > exynos_camera->config->v4l2_nodes_count) - return -1; - - index = -1; - for (i = 0; i < exynos_camera->config->v4l2_nodes_count; i++) { - if (exynos_camera->config->v4l2_nodes[i].id == exynos_v4l2_id && - exynos_camera->config->v4l2_nodes[i].node != NULL) { - index = i; - } - } - - return index; -} - -int exynos_v4l2_find_fd(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - int index; - - if (exynos_camera == NULL) - return -EINVAL; - - index = exynos_v4l2_find_index(exynos_camera, exynos_v4l2_id); - if (index < 0) - return -1; - - return exynos_camera->v4l2_fds[index]; -} - -/* - * File ops - */ - -int exynos_v4l2_open(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - char *node; - int index; - int fd; - - if (exynos_camera == NULL || exynos_camera->config == NULL || - exynos_camera->config->v4l2_nodes == NULL) - return -EINVAL; - - index = exynos_v4l2_find_index(exynos_camera, exynos_v4l2_id); - if (index < 0) { - ALOGE("%s: Unable to find v4l2 node #%d", __func__, exynos_v4l2_id); - return -1; - } - - node = exynos_camera->config->v4l2_nodes[index].node; - fd = open(node, O_RDWR); - if (fd < 0) { - ALOGE("%s: Unable to open v4l2 node #%d", __func__, exynos_v4l2_id); - return -1; - } - - exynos_camera->v4l2_fds[index] = fd; - - return 0; -} - -void exynos_v4l2_close(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - int index; - - if (exynos_camera == NULL || exynos_camera->config == NULL || - exynos_camera->config->v4l2_nodes == NULL) - return; - - index = exynos_v4l2_find_index(exynos_camera, exynos_v4l2_id); - if (index < 0) { - ALOGE("%s: Unable to find v4l2 node #%d", __func__, exynos_v4l2_id); - return; - } - - if (exynos_camera->v4l2_fds[index] > 0) - close(exynos_camera->v4l2_fds[index]); - - exynos_camera->v4l2_fds[index] = -1; -} - -int exynos_v4l2_ioctl(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int request, void *data) -{ - int fd; - - if (exynos_camera == NULL) - return -EINVAL; - - fd = exynos_v4l2_find_fd(exynos_camera, exynos_v4l2_id); - if (fd < 0) { - ALOGE("%s: Unable to find v4l2 fd #%d", __func__, exynos_v4l2_id); - return -1; - } - - return ioctl(fd, request, data); -} - -int exynos_v4l2_poll(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - struct pollfd events; - int fd; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - fd = exynos_v4l2_find_fd(exynos_camera, exynos_v4l2_id); - if (fd < 0) { - ALOGE("%s: Unable to find v4l2 fd #%d", __func__, exynos_v4l2_id); - return -1; - } - - memset(&events, 0, sizeof(events)); - events.fd = fd; - events.events = POLLIN | POLLERR; - - rc = poll(&events, 1, 1000); - if (rc < 0 || events.revents & POLLERR) { - ALOGE("%s: poll failed", __func__); - return -1; - } - - return rc; -} - -/* - * VIDIOC - */ - -int exynos_v4l2_qbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory, int index) -{ - struct v4l2_buffer buffer; - int rc; - - if (exynos_camera == NULL || index < 0) - return -EINVAL; - - buffer.type = type; - buffer.memory = memory; - buffer.index = index; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_QBUF, &buffer); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_qbuf_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index) -{ - return exynos_v4l2_qbuf(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - V4L2_MEMORY_MMAP, index); -} - -int exynos_v4l2_qbuf_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index) -{ - return exynos_v4l2_qbuf(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - V4L2_MEMORY_USERPTR, index); -} - -int exynos_v4l2_dqbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory) -{ - struct v4l2_buffer buffer; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - memset(&buffer, 0, sizeof(buffer)); - buffer.type = type; - buffer.memory = memory; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_DQBUF, &buffer); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return buffer.index; -} - -int exynos_v4l2_dqbuf_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_dqbuf(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - V4L2_MEMORY_MMAP); -} - -int exynos_v4l2_dqbuf_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_dqbuf(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - V4L2_MEMORY_USERPTR); -} - -int exynos_v4l2_reqbufs(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory, int count) -{ - struct v4l2_requestbuffers requestbuffers; - int rc; - - if (exynos_camera == NULL || count < 0) - return -EINVAL; - - requestbuffers.type = type; - requestbuffers.count = count; - requestbuffers.memory = memory; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_REQBUFS, &requestbuffers); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return requestbuffers.count; -} - -int exynos_v4l2_reqbufs_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int count) -{ - return exynos_v4l2_reqbufs(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - V4L2_MEMORY_MMAP, count); -} - -int exynos_v4l2_reqbufs_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int count) -{ - return exynos_v4l2_reqbufs(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - V4L2_MEMORY_USERPTR, count); -} - -int exynos_v4l2_querybuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int memory, int index) -{ - struct v4l2_buffer buffer; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - memset(&buffer, 0, sizeof(buffer)); - buffer.type = type; - buffer.memory = memory; - buffer.index = index; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_QUERYBUF, &buffer); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return buffer.length; -} - -int exynos_v4l2_querybuf_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index) -{ - return exynos_v4l2_querybuf(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - V4L2_MEMORY_MMAP, index); -} - -int exynos_v4l2_querybuf_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int index) -{ - return exynos_v4l2_querybuf(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - V4L2_MEMORY_USERPTR, index); -} - -int exynos_v4l2_querycap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int flags) -{ - struct v4l2_capability cap; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_QUERYCAP, &cap); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - if (!(cap.capabilities & flags)) - return -1; - - return 0; -} - -int exynos_v4l2_querycap_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_querycap(exynos_camera, exynos_v4l2_id, V4L2_CAP_VIDEO_CAPTURE); -} - -int exynos_v4l2_querycap_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_querycap(exynos_camera, exynos_v4l2_id, V4L2_CAP_VIDEO_OUTPUT); -} - -int exynos_v4l2_streamon(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type) -{ - enum v4l2_buf_type buf_type; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - buf_type = type; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_STREAMON, &buf_type); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_streamon_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_streamon(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE); -} - -int exynos_v4l2_streamon_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_streamon(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT); -} - -int exynos_v4l2_streamoff(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type) -{ - enum v4l2_buf_type buf_type; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - buf_type = type; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_STREAMOFF, &buf_type); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_streamoff_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_streamoff(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE); -} - -int exynos_v4l2_streamoff_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id) -{ - return exynos_v4l2_streamoff(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT); -} - -int exynos_v4l2_g_fmt(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int *width, int *height, int *fmt) -{ - struct v4l2_format format; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - format.type = type; - format.fmt.pix.field = V4L2_FIELD_NONE; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_G_FMT, &format); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - if (width != NULL) - *width = format.fmt.pix.width; - if (height != NULL) - *height = format.fmt.pix.height; - if (fmt != NULL) - *fmt = format.fmt.pix.pixelformat; - - return 0; -} - -int exynos_v4l2_g_fmt_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int *width, int *height, int *fmt) -{ - return exynos_v4l2_g_fmt(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - width, height, fmt); -} - -int exynos_v4l2_g_fmt_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int *width, int *height, int *fmt) -{ - return exynos_v4l2_g_fmt(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - width, height, fmt); -} - -int exynos_v4l2_s_fmt_pix(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int width, int height, int fmt, int priv) -{ - struct v4l2_format format; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - memset(&format, 0, sizeof(format)); - format.type = type; - format.fmt.pix.width = width; - format.fmt.pix.height = height; - format.fmt.pix.pixelformat = fmt; - format.fmt.pix.field = V4L2_FIELD_NONE; - format.fmt.pix.priv = priv; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_S_FMT, &format); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_s_fmt_pix_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int width, int height, int fmt, int priv) -{ - return exynos_v4l2_s_fmt_pix(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - width, height, fmt, priv); -} - -int exynos_v4l2_s_fmt_pix_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int width, int height, int fmt, int priv) -{ - return exynos_v4l2_s_fmt_pix(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - width, height, fmt, priv); -} - -int exynos_v4l2_s_fmt_win(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int left, int top, int width, int height) -{ - struct v4l2_format format; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - memset(&format, 0, sizeof(format)); - format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY; - format.fmt.win.w.left = left; - format.fmt.win.w.top = top; - format.fmt.win.w.width = width; - format.fmt.win.w.height = height; - - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_S_FMT, &format); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_enum_fmt(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int fmt) -{ - struct v4l2_fmtdesc fmtdesc; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - fmtdesc.type = type; - fmtdesc.index = 0; - - do { - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_ENUM_FMT, &fmtdesc); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - if (fmtdesc.pixelformat == (unsigned int) fmt) - return 0; - - fmtdesc.index++; - } while (rc >= 0); - - return -1; -} - -int exynos_v4l2_enum_fmt_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int fmt) -{ - return exynos_v4l2_enum_fmt(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - fmt); -} - -int exynos_v4l2_enum_fmt_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int fmt) -{ - return exynos_v4l2_enum_fmt(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - fmt); -} - -int exynos_v4l2_enum_input(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id) -{ - struct v4l2_input input; - int rc; - - if (exynos_camera == NULL || id < 0) - return -EINVAL; - - input.index = id; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_ENUMINPUT, &input); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - if (input.name[0] == '\0') - return -1; - - return 0; -} - -int exynos_v4l2_s_input(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id) -{ - struct v4l2_input input; - int rc; - - if (exynos_camera == NULL || id < 0) - return -EINVAL; - - input.index = id; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_S_INPUT, &input); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_g_ext_ctrls(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - struct v4l2_ext_control *control, int count) -{ - struct v4l2_ext_controls controls; - int rc; - - if (exynos_camera == NULL || control == NULL) - return -EINVAL; - - memset(&controls, 0, sizeof(controls)); - controls.ctrl_class = V4L2_CTRL_CLASS_CAMERA; - controls.count = count; - controls.controls = control; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_G_EXT_CTRLS, &controls); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_g_ctrl(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id, int *value) -{ - struct v4l2_control control; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - control.id = id; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_G_CTRL, &control); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - if (value != NULL) - *value = control.value; - - return 0; -} - -int exynos_v4l2_s_ctrl(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int id, int value) -{ - struct v4l2_control control; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - control.id = id; - control.value = value; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_S_CTRL, &control); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return control.value; -} - -int exynos_v4l2_s_parm(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, struct v4l2_streamparm *streamparm) -{ - int rc; - - if (exynos_camera == NULL || streamparm == NULL) - return -EINVAL; - - streamparm->type = type; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_S_PARM, streamparm); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_s_parm_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - struct v4l2_streamparm *streamparm) -{ - return exynos_v4l2_s_parm(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - streamparm); -} - -int exynos_v4l2_s_parm_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - struct v4l2_streamparm *streamparm) -{ - return exynos_v4l2_s_parm(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - streamparm); -} - -int exynos_v4l2_s_crop(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int type, int left, int top, int width, int height) -{ - struct v4l2_crop crop; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - crop.type = type; - crop.c.left = left; - crop.c.top = top; - crop.c.width = width; - crop.c.height = height; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_S_CROP, &crop); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} - -int exynos_v4l2_s_crop_cap(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int left, int top, int width, int height) -{ - return exynos_v4l2_s_crop(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_CAPTURE, - left, top, width, height); -} - -int exynos_v4l2_s_crop_out(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - int left, int top, int width, int height) -{ - return exynos_v4l2_s_crop(exynos_camera, exynos_v4l2_id, V4L2_BUF_TYPE_VIDEO_OUTPUT, - left, top, width, height); -} - -int exynos_v4l2_g_fbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - void **base, int *width, int *height, int *fmt) -{ - struct v4l2_framebuffer framebuffer; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_G_FBUF, &framebuffer); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - if (base != NULL) - *base = framebuffer.base; - if (width != NULL) - *width = framebuffer.fmt.width; - if (height != NULL) - *height = framebuffer.fmt.height; - if (fmt != NULL) - *fmt = framebuffer.fmt.pixelformat; - - return 0; -} - -int exynos_v4l2_s_fbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id, - void *base, int width, int height, int fmt) -{ - struct v4l2_framebuffer framebuffer; - int rc; - - if (exynos_camera == NULL) - return -EINVAL; - - memset(&framebuffer, 0, sizeof(framebuffer)); - framebuffer.base = base; - framebuffer.fmt.width = width; - framebuffer.fmt.height = height; - framebuffer.fmt.pixelformat = fmt; - - rc = exynos_v4l2_ioctl(exynos_camera, exynos_v4l2_id, VIDIOC_S_FBUF, &framebuffer); - if (rc < 0) { - ALOGE("%s: ioctl failed", __func__); - return -1; - } - - return 0; -} |