Home | History | Annotate | Download | only in inc
      1 /* Copyright (c) 2012, The Linux Foundation. All rights reserved.
      2  *
      3  * Redistribution and use in source and binary forms, with or without
      4  * modification, are permitted provided that the following conditions are
      5  * met:
      6  *     * Redistributions of source code must retain the above copyright
      7  *       notice, this list of conditions and the following disclaimer.
      8  *     * Redistributions in binary form must reproduce the above
      9  *       copyright notice, this list of conditions and the following
     10  *       disclaimer in the documentation and/or other materials provided
     11  *       with the distribution.
     12  *     * Neither the name of The Linux Foundation nor the names of its
     13  *       contributors may be used to endorse or promote products derived
     14  *       from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  *
     28  */
     29 
     30 #ifndef __MM_QCAMERA_APP_H__
     31 #define __MM_QCAMERA_APP_H__
     32 
     33 #include <pthread.h>
     34 #include <errno.h>
     35 #include <sys/ioctl.h>
     36 #include <sys/types.h>
     37 #include <sys/stat.h>
     38 #include <fcntl.h>
     39 #include <poll.h>
     40 
     41 #include "mm_camera_interface.h"
     42 #include "mm_jpeg_interface.h"
     43 
     44 #define MM_QCAMERA_APP_INTERATION 1
     45 
     46 #define MM_APP_MAX_DUMP_FRAME_NUM 1000
     47 
     48 #define PREVIEW_BUF_NUM 7
     49 #define VIDEO_BUF_NUM 7
     50 #define ISP_PIX_BUF_NUM 9
     51 #define STATS_BUF_NUM 4
     52 #define RDI_BUF_NUM 8
     53 
     54 #define DEFAULT_PREVIEW_FORMAT    CAM_FORMAT_YUV_420_NV21
     55 #define DEFAULT_PREVIEW_WIDTH     800
     56 #define DEFAULT_PREVIEW_HEIGHT    480
     57 #define DEFAULT_PREVIEW_PADDING   CAM_PAD_TO_WORD
     58 #define DEFAULT_VIDEO_FORMAT      CAM_FORMAT_YUV_420_NV12
     59 #define DEFAULT_VIDEO_WIDTH       800
     60 #define DEFAULT_VIDEO_HEIGHT      480
     61 #define DEFAULT_VIDEO_PADDING     CAM_PAD_TO_2K
     62 #define DEFAULT_SNAPSHOT_FORMAT   CAM_FORMAT_YUV_420_NV21
     63 #define DEFAULT_SNAPSHOT_WIDTH    1280
     64 #define DEFAULT_SNAPSHOT_HEIGHT   960
     65 #define DEFAULT_SNAPSHOT_PADDING  CAM_PAD_TO_WORD
     66 
     67 #ifndef TRUE
     68 #define TRUE 1
     69 #endif
     70 
     71 #ifndef FALSE
     72 #define FALSE 0
     73 #endif
     74 
     75 typedef enum {
     76     MM_CAMERA_OK,
     77     MM_CAMERA_E_GENERAL,
     78     MM_CAMERA_E_NO_MEMORY,
     79     MM_CAMERA_E_NOT_SUPPORTED,
     80     MM_CAMERA_E_INVALID_INPUT,
     81     MM_CAMERA_E_INVALID_OPERATION, /* 5 */
     82     MM_CAMERA_E_ENCODE,
     83     MM_CAMERA_E_BUFFER_REG,
     84     MM_CAMERA_E_PMEM_ALLOC,
     85     MM_CAMERA_E_CAPTURE_FAILED,
     86     MM_CAMERA_E_CAPTURE_TIMEOUT, /* 10 */
     87 } mm_camera_status_type_t;
     88 
     89 typedef enum {
     90     MM_CHANNEL_TYPE_ZSL,      /* preview, and snapshot main */
     91     MM_CHANNEL_TYPE_CAPTURE,  /* snapshot main, and postview */
     92     MM_CHANNEL_TYPE_PREVIEW,  /* preview only */
     93     MM_CHANNEL_TYPE_SNAPSHOT, /* snapshot main only */
     94     MM_CHANNEL_TYPE_VIDEO,    /* video only */
     95     MM_CHANNEL_TYPE_RDI,      /* rdi only */
     96     MM_CHANNEL_TYPE_MAX
     97 } mm_camera_channel_type_t;
     98 
     99 typedef struct {
    100     int                     fd;
    101     int                     main_ion_fd;
    102     struct ion_handle *     handle;
    103     uint32_t                size;
    104     void *                  data;
    105 } mm_camera_app_meminfo_t;
    106 
    107 typedef struct {
    108     mm_camera_buf_def_t buf;
    109     mm_camera_app_meminfo_t mem_info;
    110 } mm_camera_app_buf_t;
    111 
    112 typedef struct {
    113     uint32_t s_id;
    114     mm_camera_stream_config_t s_config;
    115     cam_frame_len_offset_t offset;
    116     uint8_t num_of_bufs;
    117     mm_camera_app_buf_t s_bufs[MM_CAMERA_MAX_NUM_FRAMES];
    118     mm_camera_app_buf_t s_info_buf;
    119 } mm_camera_stream_t;
    120 
    121 typedef struct {
    122     uint32_t ch_id;
    123     uint8_t num_streams;
    124     mm_camera_stream_t streams[MAX_STREAM_NUM_IN_BUNDLE];
    125 } mm_camera_channel_t;
    126 
    127 typedef struct {
    128     mm_camera_vtbl_t *cam;
    129     uint8_t num_channels;
    130     mm_camera_channel_t channels[MM_CHANNEL_TYPE_MAX];
    131     mm_jpeg_ops_t jpeg_ops;
    132     uint32_t jpeg_hdl;
    133     mm_camera_app_buf_t cap_buf;
    134     mm_camera_app_buf_t parm_buf;
    135 
    136     uint32_t current_jpeg_sess_id;
    137     mm_camera_super_buf_t* current_job_frames;
    138     uint32_t current_job_id;
    139     mm_camera_app_buf_t jpeg_buf;
    140 } mm_camera_test_obj_t;
    141 
    142 typedef struct {
    143   void *ptr;
    144   void* ptr_jpeg;
    145 
    146   uint8_t (*get_num_of_cameras) ();
    147   mm_camera_vtbl_t *(*mm_camera_open) (uint8_t camera_idx);
    148   uint32_t (*jpeg_open) (mm_jpeg_ops_t *ops);
    149 } hal_interface_lib_t;
    150 
    151 typedef struct {
    152     uint8_t num_cameras;
    153     hal_interface_lib_t hal_lib;
    154 } mm_camera_app_t;
    155 
    156 typedef int (*mm_app_test_t) (mm_camera_app_t *cam_apps);
    157 typedef struct {
    158     mm_app_test_t f;
    159     int r;
    160 } mm_app_tc_t;
    161 
    162 extern int mm_app_unit_test_entry(mm_camera_app_t *cam_app);
    163 extern int mm_app_dual_test_entry(mm_camera_app_t *cam_app);
    164 extern void mm_app_dump_frame(mm_camera_buf_def_t *frame,
    165                               char *name,
    166                               char *ext,
    167                               int frame_idx);
    168 extern void mm_app_dump_jpeg_frame(const void * data,
    169                                    uint32_t size,
    170                                    char* name,
    171                                    char* ext,
    172                                    int index);
    173 extern int mm_camera_app_timedwait(uint8_t seconds);
    174 extern int mm_camera_app_wait();
    175 extern void mm_camera_app_done();
    176 extern int mm_app_alloc_bufs(mm_camera_app_buf_t* app_bufs,
    177                              cam_frame_len_offset_t *frame_offset_info,
    178                              uint8_t num_bufs,
    179                              uint8_t is_streambuf);
    180 extern int mm_app_release_bufs(uint8_t num_bufs,
    181                                mm_camera_app_buf_t* app_bufs);
    182 extern int mm_app_stream_initbuf(cam_frame_len_offset_t *frame_offset_info,
    183                                  uint8_t *num_bufs,
    184                                  uint8_t **initial_reg_flag,
    185                                  mm_camera_buf_def_t **bufs,
    186                                  mm_camera_map_unmap_ops_tbl_t *ops_tbl,
    187                                  void *user_data);
    188 extern int32_t mm_app_stream_deinitbuf(mm_camera_map_unmap_ops_tbl_t *ops_tbl,
    189                                        void *user_data);
    190 extern int mm_app_cache_ops(mm_camera_app_meminfo_t *mem_info,
    191                             unsigned int cmd);
    192 extern int32_t mm_app_stream_clean_invalidate_buf(int index, void *user_data);
    193 extern int32_t mm_app_stream_invalidate_buf(int index, void *user_data);
    194 extern int mm_app_open(mm_camera_app_t *cam_app,
    195                        uint8_t cam_id,
    196                        mm_camera_test_obj_t *test_obj);
    197 extern int mm_app_close(mm_camera_test_obj_t *test_obj);
    198 extern mm_camera_channel_t * mm_app_add_channel(
    199                                          mm_camera_test_obj_t *test_obj,
    200                                          mm_camera_channel_type_t ch_type,
    201                                          mm_camera_channel_attr_t *attr,
    202                                          mm_camera_buf_notify_t channel_cb,
    203                                          void *userdata);
    204 extern int mm_app_del_channel(mm_camera_test_obj_t *test_obj,
    205                               mm_camera_channel_t *channel);
    206 extern mm_camera_stream_t * mm_app_add_stream(mm_camera_test_obj_t *test_obj,
    207                                               mm_camera_channel_t *channel);
    208 extern int mm_app_del_stream(mm_camera_test_obj_t *test_obj,
    209                              mm_camera_channel_t *channel,
    210                              mm_camera_stream_t *stream);
    211 extern int mm_app_config_stream(mm_camera_test_obj_t *test_obj,
    212                                 mm_camera_channel_t *channel,
    213                                 mm_camera_stream_t *stream,
    214                                 mm_camera_stream_config_t *config);
    215 extern int mm_app_start_channel(mm_camera_test_obj_t *test_obj,
    216                                 mm_camera_channel_t *channel);
    217 extern int mm_app_stop_channel(mm_camera_test_obj_t *test_obj,
    218                                mm_camera_channel_t *channel);
    219 extern mm_camera_channel_t *mm_app_get_channel_by_type(
    220                                     mm_camera_test_obj_t *test_obj,
    221                                     mm_camera_channel_type_t ch_type);
    222 
    223 extern int mm_app_start_preview(mm_camera_test_obj_t *test_obj);
    224 extern int mm_app_stop_preview(mm_camera_test_obj_t *test_obj);
    225 extern int mm_app_start_preview_zsl(mm_camera_test_obj_t *test_obj);
    226 extern int mm_app_stop_preview_zsl(mm_camera_test_obj_t *test_obj);
    227 extern mm_camera_channel_t * mm_app_add_preview_channel(
    228                                 mm_camera_test_obj_t *test_obj);
    229 extern int mm_app_stop_and_del_channel(mm_camera_test_obj_t *test_obj,
    230                                        mm_camera_channel_t *channel);
    231 extern mm_camera_channel_t * mm_app_add_snapshot_channel(
    232                                                mm_camera_test_obj_t *test_obj);
    233 extern mm_camera_stream_t * mm_app_add_snapshot_stream(
    234                                                 mm_camera_test_obj_t *test_obj,
    235                                                 mm_camera_channel_t *channel,
    236                                                 mm_camera_buf_notify_t stream_cb,
    237                                                 void *userdata,
    238                                                 uint8_t num_bufs,
    239                                                 uint8_t num_burst);
    240 extern int mm_app_start_record_preview(mm_camera_test_obj_t *test_obj);
    241 extern int mm_app_stop_record_preview(mm_camera_test_obj_t *test_obj);
    242 extern int mm_app_start_record(mm_camera_test_obj_t *test_obj);
    243 extern int mm_app_stop_record(mm_camera_test_obj_t *test_obj);
    244 extern int mm_app_start_live_snapshot(mm_camera_test_obj_t *test_obj);
    245 extern int mm_app_stop_live_snapshot(mm_camera_test_obj_t *test_obj);
    246 extern int mm_app_start_capture(mm_camera_test_obj_t *test_obj,
    247                                 uint8_t num_snapshots);
    248 extern int mm_app_stop_capture(mm_camera_test_obj_t *test_obj);
    249 extern int mm_app_start_rdi(mm_camera_test_obj_t *test_obj, uint8_t num_burst);
    250 extern int mm_app_stop_rdi(mm_camera_test_obj_t *test_obj);
    251 
    252 #endif /* __MM_QCAMERA_APP_H__ */
    253 
    254 
    255 
    256 
    257 
    258 
    259 
    260 
    261 
    262