• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2  Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
3  
4  Redistribution and use in source and binary forms, with or without
5  modification, are permitted provided that the following conditions are
6  met:
7      * Redistributions of source code must retain the above copyright
8        notice, this list of conditions and the following disclaimer.
9      * Redistributions in binary form must reproduce the above
10        copyright notice, this list of conditions and the following
11        disclaimer in the documentation and/or other materials provided
12        with the distribution.
13      * Neither the name of The Linux Foundation nor the names of its
14        contributors may be used to endorse or promote products derived
15        from this software without specific prior written permission.
16  
17  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29  
30  #ifndef __MM_QCAMERA_APP_H__
31  #define __MM_QCAMERA_APP_H__
32  
33  #include "camera.h"
34  #include "mm_qcamera_main_menu.h"
35  #include "mm_camera_interface.h"
36  #include "mm_jpeg_interface.h"
37  
38  #define MM_QCAMERA_APP_INTERATION 1
39  
40  #define MM_APP_MAX_DUMP_FRAME_NUM 1000
41  
42  #define PREVIEW_BUF_NUM 7
43  #define VIDEO_BUF_NUM 7
44  #define ISP_PIX_BUF_NUM 9
45  
46  #define STATS_BUF_NUM 4
47  
48  typedef enum {
49      MM_CAMERA_OK,
50      MM_CAMERA_E_GENERAL,
51      MM_CAMERA_E_NO_MEMORY,
52      MM_CAMERA_E_NOT_SUPPORTED,
53      MM_CAMERA_E_INVALID_INPUT,
54      MM_CAMERA_E_INVALID_OPERATION, /* 5 */
55      MM_CAMERA_E_ENCODE,
56      MM_CAMERA_E_BUFFER_REG,
57      MM_CAMERA_E_PMEM_ALLOC,
58      MM_CAMERA_E_CAPTURE_FAILED,
59      MM_CAMERA_E_CAPTURE_TIMEOUT, /* 10 */
60  }mm_camera_status_type_t;
61  
62  typedef struct {
63      int num;
64      mm_camera_buf_def_t bufs[MM_CAMERA_MAX_NUM_FRAMES];
65      struct ion_allocation_data alloc[MM_CAMERA_MAX_NUM_FRAMES];
66      struct ion_fd_data ion_info_fd[MM_CAMERA_MAX_NUM_FRAMES];
67  } mm_camear_app_buf_t;
68  
69  typedef struct {
70      uint32_t id;
71      mm_camera_stream_config_t str_config;
72      mm_camear_app_buf_t app_bufs;
73  }mm_camear_stream_t;
74  
75  typedef enum{
76      CAMERA_STATE_OPEN,
77      CAMERA_STATE_PREVIEW,
78      CAMERA_STATE_RECORD,
79      CAMERA_STATE_SNAPSHOT,
80      CAMERA_STATE_RDI
81  }camera_state;
82  
83  typedef enum{
84      CAMERA_MODE,
85      RECORDER_MODE,
86      ZSL_MODE,
87      RDI_MODE
88  }camera_mode;
89  
90  #define MM_QCAM_APP_MAX_STREAM_NUM MM_CAMERA_IMG_MODE_MAX
91  
92  typedef struct {
93      mm_camera_buf_def_t *frame;
94      uint8_t ref_cnt;
95  } repro_src_buf_info;
96  
97  typedef struct {
98      struct cam_list list;
99      void* data;
100  } mm_qcamera_q_node_t;
101  
102  typedef struct {
103      mm_qcamera_q_node_t head; /* dummy head */
104      uint32_t size;
105      pthread_mutex_t lock;
106  } mm_qcamera_queue_t;
107  
108  typedef struct {
109      mm_camera_vtbl_t *cam;
110      mm_camear_mem_vtbl_t *mem_cam;
111      int8_t my_id;
112      //mm_camera_op_mode_type_t op_mode;
113      uint32_t ch_id;
114      cam_ctrl_dimension_t dim;
115      int open_flag;
116      int ionfd;
117      mm_camear_stream_t stream[MM_QCAM_APP_MAX_STREAM_NUM];
118      camera_mode cam_mode;
119      camera_state cam_state;
120      int fullSizeSnapshot;
121  
122      mm_jpeg_ops_t jpeg_ops;
123      uint32_t jpeg_hdl;
124      mm_camera_super_buf_t* current_job_frames;
125      uint32_t current_job_id;
126      mm_camear_app_buf_t jpeg_buf;
127  
128      uint32_t isp_repro_handle;
129      uint8_t repro_dest_num;
130      mm_qcamera_queue_t repro_q;
131      repro_src_buf_info repro_buf_info[ISP_PIX_BUF_NUM];
132      mm_camera_repro_config_data_t repro_config;
133  } mm_camera_app_obj_t;
134  
135  typedef struct {
136    void *ptr;
137    void* ptr_jpeg;
138  
139    mm_camera_info_t *(*mm_camera_query) (uint8_t *num_cameras);
140    mm_camera_vtbl_t *(*mm_camera_open) (uint8_t camera_idx,
141                                 mm_camear_mem_vtbl_t *mem_vtbl);
142    uint32_t (*jpeg_open) (mm_jpeg_ops_t *ops);
143  
144    /*uint8_t *(*mm_camera_do_mmap)(uint32_t size, int *pmemFd);
145    int (*mm_camera_do_munmap)(int pmem_fd, void *addr, size_t size);
146  
147     uint8_t *(*mm_camera_do_mmap_ion)(int ion_fd, struct ion_allocation_data *alloc,
148               struct ion_fd_data *ion_info_fd, int *mapFd);
149    int (*mm_camera_do_munmap_ion) (int ion_fd, struct ion_fd_data *ion_info_fd,
150                     void *addr, size_t size);*/
151  #if 0
152    uint32_t (*mm_camera_get_msm_frame_len)(cam_format_t fmt_type,
153                                              camera_mode_t mode,
154                                              int width,
155                                              int height,
156                                              int image_type,
157                                              uint8_t *num_planes,
158                                              uint32_t planes[]);
159  #ifndef DISABLE_JPEG_ENCODING
160    void (*set_callbacks)(jpegfragment_callback_t fragcallback,
161      jpeg_callback_t eventcallback, void* userdata, void* output_buffer,
162      int * outBufferSize);
163    int8_t (*omxJpegOpen)(void);
164    void (*omxJpegClose)(void);
165    int8_t (*omxJpegStart)(void);
166    int8_t (*omxJpegEncode)(omx_jpeg_encode_params *encode_params);
167    void (*omxJpegFinish)(void);
168    int8_t (*mm_jpeg_encoder_setMainImageQuality)(uint32_t quality);
169  #endif
170  #endif
171  } hal_interface_lib_t;
172  
173  typedef struct {
174      //mm_camera_vtbl_t *cam;
175      uint8_t num_cameras;
176      mm_camera_app_obj_t *obj[2];
177      mm_camera_info_t *cam_info;
178      int use_overlay;
179      int use_user_ptr;
180      hal_interface_lib_t hal_lib;
181      int cam_open;
182      int run_sanity;
183  } mm_camera_app_t;
184  
185  extern mm_camera_app_t my_cam_app;
186  extern USER_INPUT_DISPLAY_T input_display;
187  extern int mm_app_dl_render(int frame_fd, struct crop_info * cropinfo);
188  extern mm_camera_app_obj_t *mm_app_get_cam_obj(int8_t cam_id);
189  extern int mm_app_load_hal();
190  extern int mm_app_init();
191  extern void mm_app_user_ptr(int use_user_ptr);
192  extern int mm_app_open_ch(int cam_id);
193  extern void mm_app_close_ch(int cam_id, int ch_type);
194  extern int mm_app_set_dim(int8_t cam_id, cam_ctrl_dimension_t *dim);
195  extern int mm_app_run_unit_test();
196  extern int mm_app_unit_test_entry(mm_camera_app_t *cam_app);
197  extern int mm_app_unit_test();
198  extern void mm_app_set_dim_def(cam_ctrl_dimension_t *dim);
199  extern int mm_app_open(uint8_t camera_idx);
200  extern int mm_app_close(int8_t cam_id);
201  extern int startPreview(int cam_id);
202  extern int mm_app_stop_preview(int cam_id);
203  extern int mm_app_stop_video(int cam_id);
204  extern int startRecording(int cam_id);
205  extern int stopRecording(int cam_id);
206  extern int mm_app_take_picture(int cam_id);
207  extern int mm_app_take_raw_picture(int cam_id);
208  extern int mm_app_get_dim(int8_t cam_id, cam_ctrl_dimension_t *dim);
209  extern int mm_app_streamon_preview(int cam_id);
210  extern int mm_app_set_snapshot_fmt(int cam_id,mm_camera_image_fmt_t *fmt);
211  
212  extern int mm_app_dual_test_entry(mm_camera_app_t *cam_app);
213  extern int mm_app_dual_test();
214  
215  extern int mm_camera_app_wait();
216  extern void mm_camera_app_done();
217  
218  extern int mm_stream_initbuf(uint32_t camera_handle,
219                               uint32_t ch_id, uint32_t stream_id,
220                               void *user_data,
221                               mm_camera_frame_len_offset *frame_offset_info,
222                               uint8_t num_bufs,
223                               uint8_t *initial_reg_flag,
224                               mm_camera_buf_def_t *bufs);
225  
226  extern int mm_stream_deinitbuf(uint32_t camera_handle,
227                               uint32_t ch_id, uint32_t stream_id,
228                               void *user_data, uint8_t num_bufs,
229                               mm_camera_buf_def_t *bufs);
230  
231  extern void mm_app_preview_notify_cb(mm_camera_super_buf_t *bufs,
232                                       void *user_data);
233  #endif /* __MM_QCAMERA_APP_H__ */
234  
235  
236  
237  
238  
239  
240  
241  
242  
243