diff options
Diffstat (limited to 'camera/smdk4x12_camera.h')
-rw-r--r-- | camera/smdk4x12_camera.h | 694 |
1 files changed, 694 insertions, 0 deletions
diff --git a/camera/smdk4x12_camera.h b/camera/smdk4x12_camera.h new file mode 100644 index 0000000..b264f39 --- /dev/null +++ b/camera/smdk4x12_camera.h @@ -0,0 +1,694 @@ +/* + * Copyright (C) 2013-2014 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_camera.h> +#include <videodev2_exynos_media.h> +#include <fimc.h> + +#include <s5c73m3.h> + +#include <jpeg_hal.h> +#include <Exif.h> + +#include <hardware/hardware.h> +#include <hardware/camera.h> + +#ifndef _SMDK4x12_CAMERA_H_ +#define _SMDK4x12_CAMERA_H_ + +#define SMDK4x12_CAMERA_MAX_V4L2_NODES_COUNT 4 + +#define SMDK4x12_CAMERA_CAPTURE_BUFFERS_COUNT 6 +#define SMDK4x12_CAMERA_PREVIEW_BUFFERS_COUNT 6 +#define SMDK4x12_CAMERA_RECORDING_BUFFERS_COUNT 6 +#define SMDK4x12_CAMERA_GRALLOC_BUFFERS_COUNT 3 + +#define SMDK4x12_CAMERA_PICTURE_OUTPUT_FORMAT V4L2_PIX_FMT_YUYV + +#define SMDK4x12_CAMERA_MSG_ENABLED(msg) (smdk4x12_camera->messages_enabled & msg) +#define SMDK4x12_CAMERA_CALLBACK_DEFINED(cb) (smdk4x12_camera->callbacks.cb != NULL) + +#define SMDK4x12_CAMERA_ALIGN(value) ((value + (0x10000 - 1)) & ~(0x10000 - 1)) + +/* + * Structures + */ + +struct smdk4x12_camera; + +struct list_head { + struct list_head *next; + struct list_head *prev; +}; + +enum smdk4x12_param_type { + EXYNOS_PARAM_INT, + EXYNOS_PARAM_FLOAT, + EXYNOS_PARAM_STRING, +}; + +union smdk4x12_param_data { + int integer; + float floating; + char *string; +}; + +struct smdk4x12_param { + struct list_head list; + + char *key; + union smdk4x12_param_data data; + enum smdk4x12_param_type type; +}; + +struct smdk4x12_camera_buffer { + void *pointer; + int address; + int length; + + int width; + int height; + int format; +}; + +struct smdk4x12_camera_capture_listener { + struct list_head list; + + int width; + int height; + int format; + + int (*callback)(struct smdk4x12_camera *smdk4x12_camera, struct smdk4x12_camera_buffer *buffers, int buffers_count); + int busy; +}; + +struct smdk4x12_camera_mbus_resolution { + int width; + int height; + int mbus_width; + int mbus_height; +}; + +struct smdk4x12_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 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; + char *image_stabilization_values; +}; + +struct smdk4x12_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 smdk4x12_camera_params params; + struct smdk4x12_camera_mbus_resolution *mbus_resolutions; + int mbus_resolutions_count; +}; + +struct smdk4x12_v4l2_node { + int id; + char *node; +}; + +struct smdk4x12_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 smdk4x12_exif { + int enabled; + + exif_attribute_t attributes; + void *jpeg_thumbnail_data; + int jpeg_thumbnail_size; + + camera_memory_t *memory; + int memory_size; +}; + +struct smdk4x12_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; +}; + +struct exynox_camera_config { + struct smdk4x12_camera_preset *presets; + int presets_count; + + struct smdk4x12_v4l2_node *v4l2_nodes; + int v4l2_nodes_count; +}; + +struct smdk4x12_camera_callbacks { + camera_notify_callback notify; + camera_data_callback data; + camera_data_timestamp_callback data_timestamp; + camera_request_memory request_memory; + void *user; +}; + +struct smdk4x12_camera { + int v4l2_fds[SMDK4x12_CAMERA_MAX_V4L2_NODES_COUNT]; + int ion_fd; + + struct exynox_camera_config *config; + struct smdk4x12_param *params; + + struct smdk4x12_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 smdk4x12_camera_capture_listener *capture_listeners; + camera_memory_t *capture_memory; + int capture_memory_address; + int capture_memory_index; + void *capture_yuv_buffer; + void *capture_jpeg_buffer; + int capture_exif_flash; + int capture_exif_iso; + int capture_exif_exposure; + int capture_exif_exposure_bias; + int capture_exif_exposure_time; + int capture_hybrid; + int capture_width; + int capture_height; + int capture_format; + int capture_buffers_count; + int capture_buffer_length; + + // Preview + + pthread_t preview_thread; + pthread_mutex_t preview_mutex; + pthread_mutex_t preview_lock_mutex; + int preview_thread_running; + int preview_thread_enabled; + + int preview_output_enabled; + struct smdk4x12_camera_capture_listener *preview_listener; + struct preview_stream_ops *preview_window; + struct smdk4x12_camera_buffer preview_buffer; + struct smdk4x12_v4l2_output preview_output; + + // Picture + + pthread_t picture_thread; + pthread_mutex_t picture_mutex; + pthread_mutex_t picture_lock_mutex; + int picture_thread_running; + int picture_thread_enabled; + + int picture_enabled; + int picture_completed; + struct smdk4x12_camera_capture_listener *picture_listener; + camera_memory_t *picture_memory; + struct smdk4x12_camera_buffer picture_jpeg_buffer; + struct smdk4x12_camera_buffer picture_jpeg_thumbnail_buffer; + struct smdk4x12_camera_buffer picture_yuv_buffer; + struct smdk4x12_camera_buffer picture_yuv_thumbnail_buffer; + time_t picture_focus_timestamp; + + // Recording + + pthread_t recording_thread; + pthread_mutex_t recording_mutex; + pthread_mutex_t recording_lock_mutex; + int recording_thread_running; + int recording_thread_enabled; + + int recording_output_enabled; + struct smdk4x12_camera_capture_listener *recording_listener; + camera_memory_t *recording_memory; + int recording_memory_index; + struct smdk4x12_camera_buffer recording_buffer; + struct smdk4x12_v4l2_output recording_output; + int recording_buffers_count; + int recording_buffer_length; + int recording_metadata; + + // Auto-focus + + pthread_t auto_focus_thread; + pthread_mutex_t auto_focus_mutex; + int auto_focus_thread_enabled; + int auto_focus_thread_running; + + int auto_focus_result; + + // 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 smdk4x12_camera_mbus_resolution *camera_mbus_resolutions; + int camera_mbus_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; +}; + +struct smdk4x12_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 smdk4x12_v4l2_ext_control { + __u32 id; + __u32 size; + __u32 reserved2[1]; + union { + __s32 value; + __s64 value64; + char *string; + } data; +} __attribute__ ((packed)); + +/* + * Camera + */ + +// Camera +int smdk4x12_camera_start(struct smdk4x12_camera *smdk4x12_camera, int id); +void smdk4x12_camera_stop(struct smdk4x12_camera *smdk4x12_camera); + +// Params +int smdk4x12_camera_params_init(struct smdk4x12_camera *smdk4x12_camera, int id); +int smdk4x12_camera_params_apply(struct smdk4x12_camera *smdk4x12_camera, int force); + +// Capture +int smdk4x12_camera_capture(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_capture_thread_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_capture_thread_stop(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_capture_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_capture_stop(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_capture_setup(struct smdk4x12_camera *smdk4x12_camera); +struct smdk4x12_camera_capture_listener *smdk4x12_camera_capture_listener_register( + struct smdk4x12_camera *smdk4x12_camera, int width, int height, int format, + int (*callback)(struct smdk4x12_camera *smdk4x12_camera, struct smdk4x12_camera_buffer *buffers, int buffers_count)); +void smdk4x12_camera_capture_listener_unregister( + struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_camera_capture_listener *listener); + +// Preview +int smdk4x12_camera_preview_output_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_preview_output_stop(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_preview_callback(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_camera_buffer *buffers, int buffers_count); +int smdk4x12_camera_preview(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_preview_thread_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_preview_thread_stop(struct smdk4x12_camera *smdk4x12_camera); + +// Picture +int smdk4x12_camera_picture_callback(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_camera_buffer *buffers, int buffers_count); +int smdk4x12_camera_picture(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_picture_thread_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_picture_thread_stop(struct smdk4x12_camera *smdk4x12_camera); + +// Recording +int smdk4x12_camera_recording_output_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_recording_output_stop(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_recording_callback(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_camera_buffer *buffers, int buffers_count); +void smdk4x12_camera_recording_frame_release(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_recording(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_camera_recording_thread_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_recording_thread_stop(struct smdk4x12_camera *smdk4x12_camera); + +// Auto-focus +int smdk4x12_camera_auto_focus(struct smdk4x12_camera *smdk4x12_camera, int auto_focus_status); +int smdk4x12_camera_auto_focus_thread_start(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_camera_auto_focus_thread_stop(struct smdk4x12_camera *smdk4x12_camera); + +/* + * EXIF + */ + +int smdk4x12_exif_start(struct smdk4x12_camera *smdk4x12_camera, struct smdk4x12_exif *exif); +void smdk4x12_exif_stop(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_exif *exif); +int smdk4x12_exif(struct smdk4x12_camera *smdk4x12_camera, struct smdk4x12_exif *exif); + +/* + * ION + */ + +#ifdef EXYNOS_ION +int smdk4x12_ion_init(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_ion_open(struct smdk4x12_camera *smdk4x12_camera); +void smdk4x12_ion_close(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_ion_alloc(struct smdk4x12_camera *smdk4x12_camera, int size); +int smdk4x12_ion_free(struct smdk4x12_camera *smdk4x12_camera, int fd); +int smdk4x12_ion_phys(struct smdk4x12_camera *smdk4x12_camera, int fd); +int smdk4x12_ion_msync(struct smdk4x12_camera *smdk4x12_camera, int fd, + int offset, int size); +#endif + +/* + * Jpeg + */ + +int smdk4x12_jpeg_start(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_jpeg *jpeg); +void smdk4x12_jpeg_stop(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_jpeg *jpeg); +int smdk4x12_jpeg(struct smdk4x12_camera *smdk4x12_camera, struct smdk4x12_jpeg *jpeg); + +/* + * Param + */ + +int smdk4x12_param_int_get(struct smdk4x12_camera *smdk4x12_camera, + char *key); +float smdk4x12_param_float_get(struct smdk4x12_camera *smdk4x12_camera, + char *key); +char *smdk4x12_param_string_get(struct smdk4x12_camera *smdk4x12_camera, + char *key); +int smdk4x12_param_int_set(struct smdk4x12_camera *smdk4x12_camera, + char *key, int integer); +int smdk4x12_param_float_set(struct smdk4x12_camera *smdk4x12_camera, + char *key, float floating); +int smdk4x12_param_string_set(struct smdk4x12_camera *smdk4x12_camera, + char *key, char *string); +char *smdk4x12_params_string_get(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_params_string_set(struct smdk4x12_camera *smdk4x12_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 smdk4x12_camera_buffer_length(int width, int height, int format); +void smdk4x12_camera_yuv_planes(int width, int height, int format, int address, int *address_y, int *address_cb, int *address_cr); + +/* + * V4L2 + */ + +int smdk4x12_v4l2_init(struct smdk4x12_camera *smdk4x12_camera); +int smdk4x12_v4l2_index(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id); +int smdk4x12_v4l2_fd(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id); + +int smdk4x12_v4l2_open(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id); +void smdk4x12_v4l2_close(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id); +int smdk4x12_v4l2_ioctl(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int request, void *data); +int smdk4x12_v4l2_poll(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id); +int smdk4x12_v4l2_qbuf(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int type, int memory, int index, unsigned long userptr); +int smdk4x12_v4l2_qbuf_cap(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int index); +int smdk4x12_v4l2_qbuf_out(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int index, unsigned long userptr); +int smdk4x12_v4l2_dqbuf(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int type, int memory); +int smdk4x12_v4l2_dqbuf_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_dqbuf_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_reqbufs(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int type, int memory, int count); +int smdk4x12_v4l2_reqbufs_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int count); +int smdk4x12_v4l2_reqbufs_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int count); +int smdk4x12_v4l2_querybuf(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int type, int memory, int index); +int smdk4x12_v4l2_querybuf_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int index); +int smdk4x12_v4l2_querybuf_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int index); +int smdk4x12_v4l2_querycap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int flags); +int smdk4x12_v4l2_querycap_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_querycap_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_streamon(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int type); +int smdk4x12_v4l2_streamon_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_streamon_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_streamoff(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int type); +int smdk4x12_v4l2_streamoff_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_streamoff_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id); +int smdk4x12_v4l2_g_fmt(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int type, int *width, int *height, int *fmt); +int smdk4x12_v4l2_g_fmt_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int *width, int *height, int *fmt); +int smdk4x12_v4l2_g_fmt_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int *width, int *height, int *fmt); +int smdk4x12_v4l2_s_fmt_pix(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int type, int width, int height, int fmt, int field, + int priv); +int smdk4x12_v4l2_s_fmt_pix_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int width, int height, int fmt, int priv); +int smdk4x12_v4l2_s_fmt_pix_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int width, int height, int fmt, int priv); +int smdk4x12_v4l2_s_fmt_win(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int left, int top, int width, int height); +int smdk4x12_v4l2_enum_fmt(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int type, int fmt); +int smdk4x12_v4l2_enum_fmt_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int fmt); +int smdk4x12_v4l2_enum_fmt_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int fmt); +int smdk4x12_v4l2_enum_input(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int id); +int smdk4x12_v4l2_s_input(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int id); +int smdk4x12_v4l2_g_ext_ctrls(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, struct v4l2_ext_control *control, int count); +int smdk4x12_v4l2_g_ctrl(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int id, int *value); +int smdk4x12_v4l2_s_ctrl(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int id, int value); +int smdk4x12_v4l2_s_parm(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int type, struct v4l2_streamparm *streamparm); +int smdk4x12_v4l2_s_parm_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, struct v4l2_streamparm *streamparm); +int smdk4x12_v4l2_s_parm_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, struct v4l2_streamparm *streamparm); +int smdk4x12_v4l2_s_crop(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + int type, int left, int top, int width, int height); +int smdk4x12_v4l2_s_crop_cap(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int left, int top, int width, int height); +int smdk4x12_v4l2_s_crop_out(struct smdk4x12_camera *smdk4x12_camera, + int smdk4x12_v4l2_id, int left, int top, int width, int height); +int smdk4x12_v4l2_g_fbuf(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + void **base, int *width, int *height, int *fmt); +int smdk4x12_v4l2_s_fbuf(struct smdk4x12_camera *smdk4x12_camera, int smdk4x12_v4l2_id, + void *base, int width, int height, int fmt); + +/* + * V4L2 Output + */ + +int smdk4x12_v4l2_output_start(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_v4l2_output *output); +void smdk4x12_v4l2_output_stop(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_v4l2_output *output); +int smdk4x12_v4l2_output(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_v4l2_output *output, int buffer_address); +int smdk4x12_v4l2_output_release(struct smdk4x12_camera *smdk4x12_camera, + struct smdk4x12_v4l2_output *output); + +#endif |