summaryrefslogtreecommitdiffstats
path: root/camera/exynos_camera.h
diff options
context:
space:
mode:
Diffstat (limited to 'camera/exynos_camera.h')
-rw-r--r--camera/exynos_camera.h674
1 files changed, 0 insertions, 674 deletions
diff --git a/camera/exynos_camera.h b/camera/exynos_camera.h
deleted file mode 100644
index e411b73..0000000
--- a/camera/exynos_camera.h
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
- * Copyright (C) 2013 Paul Kocialkowski
- *
- * 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 <linux/videodev2.h>
-#include <linux/videodev2_exynos_camera.h>
-#include <linux/videodev2_exynos_media.h>
-#include <linux/fimc.h>
-
-#include <linux/s5c73m3.h>
-
-#ifdef EXYNOS_JPEG_HW
-#include <jpeg_hal.h>
-#endif
-#include <Exif.h>
-
-#include <hardware/hardware.h>
-#include <hardware/camera.h>
-
-#ifndef _EXYNOS_CAMERA_H_
-#define _EXYNOS_CAMERA_H_
-
-#define EXYNOS_CAMERA_MAX_V4L2_NODES_COUNT 4
-
-#define EXYNOS_CAMERA_CAPTURE_BUFFERS_COUNT 6
-#define EXYNOS_CAMERA_PREVIEW_BUFFERS_COUNT 6
-#define EXYNOS_CAMERA_RECORDING_BUFFERS_COUNT 6
-#define EXYNOS_CAMERA_GRALLOC_BUFFERS_COUNT 3
-
-#define EXYNOS_CAMERA_PICTURE_OUTPUT_FORMAT V4L2_PIX_FMT_YUYV
-
-#define EXYNOS_CAMERA_MSG_ENABLED(msg) (exynos_camera->messages_enabled & msg)
-#define EXYNOS_CAMERA_CALLBACK_DEFINED(cb) (exynos_camera->callbacks.cb != NULL)
-
-#define EXYNOS_CAMERA_ALIGN(value) ((value + (0x10000 - 1)) & ~(0x10000 - 1))
-
-/*
- * Structures
- */
-
-struct exynos_camera;
-
-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_buffer {
- void *pointer;
- int address;
- int length;
-
- int width;
- int height;
- int format;
-};
-
-struct exynos_camera_mbus_resolution {
- int width;
- int height;
- int mbus_width;
- int mbus_height;
-};
-
-struct exynos_camera_videosnapshot_resolution {
- int video_width;
- int video_height;
- int snapshot_width;
- int snapshot_height;
-};
-
-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;
-
- int video_snapshot_supported;
- int full_video_snap_supported;
-
- 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 max_detected_faces;
-
- int zoom_supported;
- int smooth_zoom_supported;
- char *zoom_ratios;
- int zoom;
- int max_zoom;
-
- int auto_exposure_lock_supported;
- int auto_exposure_lock;
-
- int auto_white_balance_lock_supported;
- int auto_white_balance_lock;
-
- 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 *antibanding;
- char *antibanding_values;
-
- char *scene_mode;
- char *scene_mode_values;
-
- char *effect;
- char *effect_values;
-
- char *iso;
- char *iso_values;
-
- char *image_stabilization; // Anti-shake
- char *image_stabilization_values;
-};
-
-struct exynos_camera_preset {
- char *name;
- int facing;
- int orientation;
-
- int rotation;
- int hflip;
- int vflip;
-
- int capture_format;
- int picture_format;
- int fimc_is;
-
- float focal_length;
- float horizontal_view_angle;
- float vertical_view_angle;
-
- int metering;
-
- struct exynos_camera_params params;
- struct exynos_camera_mbus_resolution *mbus_resolutions;
- int mbus_resolutions_count;
- struct exynos_camera_videosnapshot_resolution *videosnapshot_resolutions;
- int videosnapshot_resolutions_count;
-};
-
-struct exynos_v4l2_node {
- int id;
- char *node;
-};
-
-struct exynos_v4l2_output {
- int enabled;
-
- int v4l2_id;
-
- int width;
- int height;
- int format;
-
- int buffer_width;
- int buffer_height;
- int buffer_format;
-
- camera_memory_t *memory;
- int memory_address;
-#ifdef EXYNOS_ION
- int memory_ion_fd;
-#endif
- int memory_index;
- int buffers_count;
- int buffer_length;
-};
-
-struct exynos_exif {
- int enabled;
-
- exif_attribute_t attributes;
- void *jpeg_thumbnail_data;
- int jpeg_thumbnail_size;
-
- camera_memory_t *memory;
- int memory_size;
-};
-
-#ifdef EXYNOS_JPEG_HW
-struct exynos_jpeg {
- int enabled;
-
- int fd;
- struct jpeg_buf buffer_in;
- struct jpeg_buf buffer_out;
- camera_memory_t *memory_in;
- void *memory_in_pointer;
-#ifdef EXYNOS_ION
- int memory_in_ion_fd;
-#endif
- camera_memory_t *memory_out;
- void *memory_out_pointer;
- int memory_out_size;
-#ifdef EXYNOS_ION
- int memory_out_ion_fd;
-#endif
-
- int width;
- int height;
- int format;
-
- int quality;
-};
-#endif
-
-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];
- int ion_fd;
-
- struct exynox_camera_config *config;
- struct exynos_param *params;
-
- struct exynos_camera_callbacks callbacks;
- int callback_lock;
- int messages_enabled;
-
- gralloc_module_t *gralloc;
-
- // Capture
-
- pthread_t capture_thread;
- pthread_mutex_t capture_mutex;
- pthread_mutex_t capture_lock_mutex;
- int capture_thread_running;
- int capture_thread_enabled;
-
- int capture_enabled;
- struct exynos_exif exif;
- camera_memory_t *capture_memory;
- int capture_memory_address;
- int capture_memory_index;
- void *capture_yuv_buffer;
- void *capture_jpeg_buffer;
- int capture_width;
- int capture_height;
- int capture_format;
- int capture_buffers_count;
- int capture_buffer_length;
-
- // Preview
- int preview_enabled;
- int preview_stopping;
-
- int preview_output_enabled;
- struct preview_stream_ops *preview_window;
- struct exynos_camera_buffer preview_buffer;
- struct exynos_v4l2_output preview_output;
-
- // Picture
-
- pthread_t picture_thread;
- int picture_running;
- int picture_enabled;
-
- int picture_completed;
- camera_memory_t *picture_memory;
- struct exynos_camera_buffer picture_jpeg_buffer;
- struct exynos_camera_buffer picture_yuv_buffer;
-
- // Face Detection
- camera_frame_metadata_t mFaceData;
- camera_memory_t *face_data;
- int max_detected_faces;
-
- // Recording
-
- int recording_running;
- int recording_enabled;
-
- int recording_output_enabled;
- camera_memory_t *recording_memory;
- int recording_memory_index;
- struct exynos_camera_buffer recording_buffer;
- struct exynos_v4l2_output recording_output;
- int recording_buffers_count;
- int recording_buffer_length;
- int recording_metadata;
-
- // Auto-focus
-
- int auto_focus_enabled;
- int auto_focus_started;
-
- // Camera params
-
- int camera_rotation;
- int camera_hflip;
- int camera_vflip;
- int camera_capture_format;
- int camera_picture_format;
- int camera_fimc_is;
- int camera_focal_length;
- int camera_metering;
-
- struct exynos_camera_mbus_resolution *camera_mbus_resolutions;
- int camera_mbus_resolutions_count;
- struct exynos_camera_videosnapshot_resolution *camera_videosnapshot_resolutions;
- int camera_videosnapshot_resolutions_count;
-
- int camera_sensor_mode;
- int fimc_is_mode;
-
- // Params
-
- int preview_width;
- int preview_height;
- int preview_format;
- 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 ae_lock;
- int awb_lock;
- int flash_mode;
- int exposure_compensation;
- int whitebalance;
- int antibanding;
- int scene_mode;
- int effect;
- int iso;
- int metering;
- int image_stabilization;
- char raw_focus_areas[PAGE_SIZE];
- char raw_focus_mode[64];
- char raw_flash_mode[64];
-};
-
-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));
-
-/*
- * Camera
- */
-
-// Camera
-int exynos_camera_start(struct exynos_camera *exynos_camera, int id);
-void exynos_camera_stop(struct exynos_camera *exynos_camera);
-
-// Params
-int exynos_camera_params_init(struct exynos_camera *exynos_camera, int id);
-int exynos_camera_params_apply(struct exynos_camera *exynos_camera, int force);
-
-// Capture
-int exynos_camera_capture(struct exynos_camera *exynos_camera);
-int exynos_camera_capture_start(struct exynos_camera *exynos_camera);
-void exynos_camera_capture_stop(struct exynos_camera *exynos_camera);
-int exynos_camera_capture_setup(struct exynos_camera *exynos_camera);
-
-// Preview
-int exynos_camera_preview_output_start(struct exynos_camera *exynos_camera);
-void exynos_camera_preview_output_stop(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);
-
-// Picture
-void *exynos_camera_picture(void *data);
-int exynos_camera_picture_start(struct exynos_camera *exynos_camera);
-void exynos_camera_picture_thread_start(struct exynos_camera *exynos_camera);
-void exynos_camera_picture_stop(struct exynos_camera *exynos_camera);
-
-// Recording
-int exynos_camera_recording_output_start(struct exynos_camera *exynos_camera);
-void exynos_camera_recording_output_stop(struct exynos_camera *exynos_camera);
-void exynos_camera_recording_frame_release(struct exynos_camera *exynos_camera);
-int exynos_camera_recording(struct exynos_camera *exynos_camera);
-int exynos_camera_recording_start(struct exynos_camera *exynos_camera);
-void exynos_camera_recording_stop(struct exynos_camera *exynos_camera);
-
-// Auto-focus
-int exynos_camera_auto_focus(struct exynos_camera *exynos_camera, int auto_focus_status);
-int exynos_camera_continuous_auto_focus(struct exynos_camera *exynos_camera, int auto_focus_status);
-int exynos_camera_auto_focus_start(struct exynos_camera *exynos_camera);
-void exynos_camera_auto_focus_finish(struct exynos_camera *exynos_camera);
-void exynos_camera_auto_focus_stop(struct exynos_camera *exynos_camera);
-
-/*
- * EXIF
- */
-
-int exynos_exif_start(struct exynos_camera *exynos_camera, struct exynos_exif *exif);
-int exynos_exif_create(struct exynos_camera *exynos_camera, struct exynos_exif *exif);
-void exynos_exif_stop(struct exynos_camera *exynos_camera,
- struct exynos_exif *exif);
-int exynos_exif(struct exynos_camera *exynos_camera, struct exynos_exif *exif);
-
-/*
- * ION
- */
-
-#ifdef EXYNOS_ION
-int exynos_ion_init(struct exynos_camera *exynos_camera);
-int exynos_ion_open(struct exynos_camera *exynos_camera);
-void exynos_ion_close(struct exynos_camera *exynos_camera);
-int exynos_ion_alloc(struct exynos_camera *exynos_camera, int size);
-int exynos_ion_free(struct exynos_camera *exynos_camera, int fd);
-int exynos_ion_phys(struct exynos_camera *exynos_camera, int fd);
-int exynos_ion_msync(struct exynos_camera *exynos_camera, int fd,
- int offset, int size);
-#endif
-
-/*
- * Jpeg
- */
-
-int exynos_jpeg_start(struct exynos_camera *exynos_camera,
- struct exynos_jpeg *jpeg);
-void exynos_jpeg_stop(struct exynos_camera *exynos_camera,
- struct exynos_jpeg *jpeg);
-int exynos_jpeg(struct exynos_camera *exynos_camera, struct exynos_jpeg *jpeg);
-
-/*
- * 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);
-
-/*
- * Utils
- */
-
-int list_head_insert(struct list_head *list, struct list_head *prev,
- struct list_head *next);
-void list_head_remove(struct list_head *list);
-
-int exynos_camera_buffer_length(int width, int height, int format);
-void exynos_camera_yuv_planes(int width, int height, int format, int address, int *address_y, int *address_cb, int *address_cr);
-
-/*
- * V4L2
- */
-
-int exynos_v4l2_init(struct exynos_camera *exynos_camera);
-int exynos_v4l2_index(struct exynos_camera *exynos_camera, int exynos_v4l2_id);
-int exynos_v4l2_fd(struct exynos_camera *exynos_camera, int exynos_v4l2_id);
-
-int exynos_v4l2_open(struct exynos_camera *exynos_camera, int exynos_v4l2_id);
-void exynos_v4l2_close(struct exynos_camera *exynos_camera, int exynos_v4l2_id);
-int exynos_v4l2_ioctl(struct exynos_camera *exynos_camera, int exynos_v4l2_id,
- int request, void *data);
-int exynos_v4l2_poll(struct exynos_camera *exynos_camera, int exynos_v4l2_id);
-int exynos_v4l2_qbuf(struct exynos_camera *exynos_camera, int exynos_v4l2_id,
- int type, int memory, int index, unsigned long userptr);
-int exynos_v4l2_s_ext_ctrl_face_detection(struct exynos_camera *exynos_camera,
- int id, void *value);
-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, unsigned long userptr);
-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 field,
- 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);
-
-/*
- * V4L2 Output
- */
-
-int exynos_v4l2_output_start(struct exynos_camera *exynos_camera,
- struct exynos_v4l2_output *output);
-void exynos_v4l2_output_stop(struct exynos_camera *exynos_camera,
- struct exynos_v4l2_output *output);
-int exynos_v4l2_output(struct exynos_camera *exynos_camera,
- struct exynos_v4l2_output *output, int buffer_address);
-int exynos_v4l2_output_release(struct exynos_camera *exynos_camera,
- struct exynos_v4l2_output *output);
-
-#endif