1 /* Copyright (c) 2012-2013, 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_CAMERA_INTERFACE_H__ 31 #define __MM_CAMERA_INTERFACE_H__ 32 #include <linux/msm_ion.h> 33 #include <linux/videodev2.h> 34 #include <media/msmb_camera.h> 35 #include "cam_intf.h" 36 #include "cam_queue.h" 37 38 #define MM_CAMERA_MAX_NUM_SENSORS MSM_MAX_CAMERA_SENSORS 39 #define MM_CAMERA_MAX_NUM_FRAMES CAM_MAX_NUM_BUFS_PER_STREAM 40 /* num of channels allowed in a camera obj */ 41 #define MM_CAMERA_CHANNEL_MAX 16 42 43 #define PAD_TO_SIZE(size, padding) ((size + padding - 1) & ~(padding - 1)) 44 45 /** mm_camera_buf_def_t: structure for stream frame buf 46 * @stream_id : stream handler to uniquely identify a stream 47 * object 48 * @buf_idx : index of the buf within the stream bufs, to be 49 * filled during mem allocation 50 * @timespec_ts : time stamp, to be filled when DQBUF is 51 * called 52 * @frame_idx : frame sequence num, to be filled when DQBUF 53 * @num_planes : num of planes for the frame buffer, to be 54 * filled during mem allocation 55 * @planes : plane info for the frame buffer, to be filled 56 * during mem allocation 57 * @fd : file descriptor of the frame buffer, to be filled 58 * during mem allocation 59 * @buffer : pointer to the frame buffer, to be filled during 60 * mem allocation 61 * @frame_len : length of the whole frame, to be filled during 62 * mem allocation 63 * @mem_info : user specific pointer to additional mem info 64 **/ 65 typedef struct { 66 uint32_t stream_id; 67 cam_stream_type_t stream_type; 68 int8_t buf_idx; 69 struct timespec ts; 70 uint32_t frame_idx; 71 int8_t num_planes; 72 struct v4l2_plane planes[VIDEO_MAX_PLANES]; 73 int fd; 74 void *buffer; 75 uint32_t frame_len; 76 void *mem_info; 77 } mm_camera_buf_def_t; 78 79 /** mm_camera_super_buf_t: super buf structure for bundled 80 * stream frames 81 * @camera_handle : camera handler to uniquely identify 82 * a camera object 83 * @ch_id : channel handler to uniquely ideentify a channel 84 * object 85 * @num_bufs : number of buffers in the super buf, should not 86 * exceeds MAX_STREAM_NUM_IN_BUNDLE 87 * @bufs : array of buffers in the bundle 88 **/ 89 typedef struct { 90 uint32_t camera_handle; 91 uint32_t ch_id; 92 uint8_t num_bufs; 93 mm_camera_buf_def_t* bufs[MAX_STREAM_NUM_IN_BUNDLE]; 94 } mm_camera_super_buf_t; 95 96 /** mm_camera_event_t: structure for event 97 * @server_event_type : event type from serer 98 * @status : status of an event, value could be 99 * CAM_STATUS_SUCCESS 100 * CAM_STATUS_FAILED 101 **/ 102 typedef struct { 103 cam_event_type_t server_event_type; 104 uint32_t status; 105 } mm_camera_event_t; 106 107 /** mm_camera_event_notify_t: function definition for event 108 * notify handling 109 * @camera_handle : camera handler 110 * @evt : pointer to an event struct 111 * @user_data: user data pointer 112 **/ 113 typedef void (*mm_camera_event_notify_t)(uint32_t camera_handle, 114 mm_camera_event_t *evt, 115 void *user_data); 116 117 /** mm_camera_buf_notify_t: function definition for frame notify 118 * handling 119 * @mm_camera_super_buf_t : received frame buffers 120 * @user_data: user data pointer 121 **/ 122 typedef void (*mm_camera_buf_notify_t) (mm_camera_super_buf_t *bufs, 123 void *user_data); 124 125 /** map_stream_buf_op_t: function definition for operation of 126 * mapping stream buffers via domain socket 127 * @frame_idx : buffer index within stream buffers 128 * @plane_idx : plane index. If all planes share the same 129 * fd, plane_idx = -1; otherwise, plean_idx is 130 * the index to plane (0..num_of_planes) 131 * @fd : file descriptor of the stream buffer 132 * @size: size of the stream buffer 133 * @userdata : user data pointer 134 **/ 135 typedef int32_t (*map_stream_buf_op_t) (uint32_t frame_idx, 136 int32_t plane_idx, 137 int fd, 138 uint32_t size, 139 void *userdata); 140 141 /** unmap_stream_buf_op_t: function definition for operation of 142 * unmapping stream buffers via domain 143 * socket 144 * @frame_idx : buffer index within stream buffers 145 * @plane_idx : plane index. If all planes share the same 146 * fd, plane_idx = -1; otherwise, plean_idx is 147 * the index to plane (0..num_of_planes) 148 * @userdata : user data pointer 149 **/ 150 typedef int32_t (*unmap_stream_buf_op_t) (uint32_t frame_idx, 151 int32_t plane_idx, 152 void *userdata); 153 154 /** mm_camera_map_unmap_ops_tbl_t: virtual table 155 * for mapping/unmapping stream buffers via 156 * domain socket 157 * @map_ops : operation for mapping 158 * @unmap_ops : operation for unmapping 159 * @userdata: user data pointer 160 **/ 161 typedef struct { 162 map_stream_buf_op_t map_ops; 163 unmap_stream_buf_op_t unmap_ops; 164 void *userdata; 165 } mm_camera_map_unmap_ops_tbl_t; 166 167 /** mm_camera_stream_mem_vtbl_t: virtual table for stream 168 * memory allocation and deallocation 169 * @get_bufs : function definition for allocating 170 * stream buffers 171 * @put_bufs : function definition for deallocating 172 * stream buffers 173 * @user_data: user data pointer 174 **/ 175 typedef struct { 176 void *user_data; 177 int32_t (*get_bufs) (cam_frame_len_offset_t *offset, 178 uint8_t *num_bufs, 179 uint8_t **initial_reg_flag, 180 mm_camera_buf_def_t **bufs, 181 mm_camera_map_unmap_ops_tbl_t *ops_tbl, 182 void *user_data); 183 int32_t (*put_bufs) (mm_camera_map_unmap_ops_tbl_t *ops_tbl, 184 void *user_data); 185 int32_t (*invalidate_buf)(int index, void *user_data); 186 int32_t (*clean_invalidate_buf)(int index, void *user_data); 187 } mm_camera_stream_mem_vtbl_t; 188 189 /** mm_camera_stream_config_t: structure for stream 190 * configuration 191 * @stream_info : pointer to a stream info structure 192 * @padding_info: padding info obtained from querycapability 193 * @mem_tbl : memory operation table for 194 * allocating/deallocating stream buffers 195 * @stream_cb : callback handling stream frame notify 196 * @userdata : user data pointer 197 **/ 198 typedef struct { 199 cam_stream_info_t *stream_info; 200 cam_padding_info_t padding_info; 201 mm_camera_stream_mem_vtbl_t mem_vtbl; 202 mm_camera_buf_notify_t stream_cb; 203 void *userdata; 204 } mm_camera_stream_config_t; 205 206 /** mm_camera_super_buf_notify_mode_t: enum for super uffer 207 * notification mode 208 * @MM_CAMERA_SUPER_BUF_NOTIFY_BURST : 209 * ZSL use case: get burst of frames 210 * @MM_CAMERA_SUPER_BUF_NOTIFY_CONTINUOUS : 211 * get continuous frames: when the super buf is ready 212 * dispatch it to HAL 213 **/ 214 typedef enum { 215 MM_CAMERA_SUPER_BUF_NOTIFY_BURST = 0, 216 MM_CAMERA_SUPER_BUF_NOTIFY_CONTINUOUS, 217 MM_CAMERA_SUPER_BUF_NOTIFY_MAX 218 } mm_camera_super_buf_notify_mode_t; 219 220 /** mm_camera_super_buf_priority_t: enum for super buffer 221 * matching priority 222 * @MM_CAMERA_SUPER_BUF_PRIORITY_NORMAL : 223 * Save the frame no matter focused or not. Currently only 224 * this type is supported. 225 * @MM_CAMERA_SUPER_BUF_PRIORITY_FOCUS : 226 * only queue the frame that is focused. Will enable meta 227 * data header to carry focus info 228 * @MM_CAMERA_SUPER_BUF_PRIORITY_EXPOSURE_BRACKETING : 229 * after shutter, only queue matched exposure index 230 **/ 231 typedef enum { 232 MM_CAMERA_SUPER_BUF_PRIORITY_NORMAL = 0, 233 MM_CAMERA_SUPER_BUF_PRIORITY_FOCUS, 234 MM_CAMERA_SUPER_BUF_PRIORITY_EXPOSURE_BRACKETING, 235 MM_CAMERA_SUPER_BUF_PRIORITY_MAX 236 } mm_camera_super_buf_priority_t; 237 238 /** mm_camera_channel_attr_t: structure for defining channel 239 * attributes 240 * @notify_mode : notify mode: burst or continuous 241 * @water_mark : queue depth. Only valid for burst mode 242 * @look_back : look back how many frames from last buf. 243 * Only valid for burst mode 244 * @post_frame_skip : after send first frame to HAL, how many 245 * frames needing to be skipped for next 246 * delivery. Only valid for burst mode 247 * @max_unmatched_frames : max number of unmatched frames in 248 * queue 249 * @priority : save matched priority frames only 250 **/ 251 typedef struct { 252 mm_camera_super_buf_notify_mode_t notify_mode; 253 uint8_t water_mark; 254 uint8_t look_back; 255 uint8_t post_frame_skip; 256 uint8_t max_unmatched_frames; 257 mm_camera_super_buf_priority_t priority; 258 } mm_camera_channel_attr_t; 259 260 typedef struct { 261 /** query_capability: fucntion definition for querying static 262 * camera capabilities 263 * @camera_handle : camer handler 264 * Return value: 0 -- success 265 * -1 -- failure 266 * Note: would assume cam_capability_t is already mapped 267 **/ 268 int32_t (*query_capability) (uint32_t camera_handle); 269 270 /** register_event_notify: fucntion definition for registering 271 * for event notification 272 * @camera_handle : camer handler 273 * @evt_cb : callback for event notify 274 * @user_data : user data poiner 275 * Return value: 0 -- success 276 * -1 -- failure 277 **/ 278 int32_t (*register_event_notify) (uint32_t camera_handle, 279 mm_camera_event_notify_t evt_cb, 280 void *user_data); 281 282 /** close_camera: fucntion definition for closing a camera 283 * @camera_handle : camer handler 284 * Return value: 0 -- success 285 * -1 -- failure 286 **/ 287 int32_t (*close_camera) (uint32_t camera_handle); 288 289 /** map_buf: fucntion definition for mapping a camera buffer 290 * via domain socket 291 * @camera_handle : camer handler 292 * @buf_type : type of mapping buffers, can be value of 293 * CAM_MAPPING_BUF_TYPE_CAPABILITY 294 * CAM_MAPPING_BUF_TYPE_SETPARM_BUF 295 * CAM_MAPPING_BUF_TYPE_GETPARM_BUF 296 * @fd : file descriptor of the stream buffer 297 * @size : size of the stream buffer 298 * Return value: 0 -- success 299 * -1 -- failure 300 **/ 301 int32_t (*map_buf) (uint32_t camera_handle, 302 uint8_t buf_type, 303 int fd, 304 uint32_t size); 305 306 /** unmap_buf: fucntion definition for unmapping a camera buffer 307 * via domain socket 308 * @camera_handle : camer handler 309 * @buf_type : type of mapping buffers, can be value of 310 * CAM_MAPPING_BUF_TYPE_CAPABILITY 311 * CAM_MAPPING_BUF_TYPE_SETPARM_BUF 312 * CAM_MAPPING_BUF_TYPE_GETPARM_BUF 313 * Return value: 0 -- success 314 * -1 -- failure 315 **/ 316 int32_t (*unmap_buf) (uint32_t camera_handle, 317 uint8_t buf_type); 318 319 /** set_parms: fucntion definition for setting camera 320 * based parameters to server 321 * @camera_handle : camer handler 322 * @parms : batch for parameters to be set, stored in 323 * parm_buffer_t 324 * Return value: 0 -- success 325 * -1 -- failure 326 * Note: would assume parm_buffer_t is already mapped, and 327 * according parameter entries to be set are filled in the 328 * buf before this call 329 **/ 330 int32_t (*set_parms) (uint32_t camera_handle, 331 parm_buffer_t *parms); 332 333 /** get_parms: fucntion definition for querying camera 334 * based parameters from server 335 * @camera_handle : camer handler 336 * @parms : batch for parameters to be queried, stored in 337 * parm_buffer_t 338 * Return value: 0 -- success 339 * -1 -- failure 340 * Note: would assume parm_buffer_t is already mapped, and 341 * according parameter entries to be queried are filled in 342 * the buf before this call 343 **/ 344 int32_t (*get_parms) (uint32_t camera_handle, 345 parm_buffer_t *parms); 346 347 /** do_auto_focus: fucntion definition for performing auto focus 348 * @camera_handle : camer handler 349 * Return value: 0 -- success 350 * -1 -- failure 351 * Note: if this call success, we will always assume there will 352 * be an auto_focus event following up. 353 **/ 354 int32_t (*do_auto_focus) (uint32_t camera_handle); 355 356 /** cancel_auto_focus: fucntion definition for cancelling 357 * previous auto focus request 358 * @camera_handle : camer handler 359 * Return value: 0 -- success 360 * -1 -- failure 361 **/ 362 int32_t (*cancel_auto_focus) (uint32_t camera_handle); 363 364 /** prepare_snapshot: fucntion definition for preparing hardware 365 * for snapshot. 366 * @camera_handle : camer handler 367 * @do_af_flag : flag indicating if AF needs to be done 368 * 0 -- no AF needed 369 * 1 -- AF needed 370 * Return value: 0 -- success 371 * -1 -- failure 372 **/ 373 int32_t (*prepare_snapshot) (uint32_t camera_handle, 374 int32_t do_af_flag); 375 376 /** start_zsl_snapshot: function definition for starting 377 * zsl snapshot. 378 * @camera_handle : camer handler 379 * Return value: 0 -- success 380 * -1 -- failure 381 **/ 382 int32_t (*start_zsl_snapshot) (uint32_t camera_handle); 383 384 /** stop_zsl_snapshot: function definition for stopping 385 * zsl snapshot. 386 * @camera_handle : camer handler 387 * Return value: 0 -- success 388 * -1 -- failure 389 **/ 390 int32_t (*stop_zsl_snapshot) (uint32_t camera_handle); 391 392 /** add_channel: fucntion definition for adding a channel 393 * @camera_handle : camer handler 394 * @ch_id : channel handler 395 * @attr : pointer to channel attribute structure 396 * @channel_cb : callbak to handle bundled super buffer 397 * @userdata : user data pointer 398 * Return value: channel id, zero is invalid ch_id 399 * Note: attr, channel_cb, and userdata can be NULL if no 400 * superbufCB is needed 401 **/ 402 uint32_t (*add_channel) (uint32_t camera_handle, 403 mm_camera_channel_attr_t *attr, 404 mm_camera_buf_notify_t channel_cb, 405 void *userdata); 406 407 /** delete_channel: fucntion definition for deleting a channel 408 * @camera_handle : camer handler 409 * @ch_id : channel handler 410 * Return value: 0 -- success 411 * -1 -- failure 412 **/ 413 int32_t (*delete_channel) (uint32_t camera_handle, 414 uint32_t ch_id); 415 416 /** get_bundle_info: function definition for querying bundle 417 * info of the channel 418 * @camera_handle : camera handler 419 * @ch_id : channel handler 420 * @bundle_info : bundle info to be filled in 421 * Return value: 0 -- success 422 * -1 -- failure 423 **/ 424 int32_t (*get_bundle_info) (uint32_t camera_handle, 425 uint32_t ch_id, 426 cam_bundle_config_t *bundle_info); 427 428 /** add_stream: fucntion definition for adding a stream 429 * @camera_handle : camer handler 430 * @ch_id : channel handler 431 * Return value: stream_id. zero is invalid stream_id 432 **/ 433 uint32_t (*add_stream) (uint32_t camera_handle, 434 uint32_t ch_id); 435 436 /** delete_stream: fucntion definition for deleting a stream 437 * @camera_handle : camer handler 438 * @ch_id : channel handler 439 * @stream_id : stream handler 440 * Return value: 0 -- success 441 * -1 -- failure 442 **/ 443 int32_t (*delete_stream) (uint32_t camera_handle, 444 uint32_t ch_id, 445 uint32_t stream_id); 446 447 /** config_stream: fucntion definition for configuring a stream 448 * @camera_handle : camer handler 449 * @ch_id : channel handler 450 * @stream_id : stream handler 451 * @confid : pointer to a stream configuration structure 452 * Return value: 0 -- success 453 * -1 -- failure 454 **/ 455 int32_t (*config_stream) (uint32_t camera_handle, 456 uint32_t ch_id, 457 uint32_t stream_id, 458 mm_camera_stream_config_t *config); 459 460 /** map_stream_buf: fucntion definition for mapping 461 * stream buffer via domain socket 462 * @camera_handle : camer handler 463 * @ch_id : channel handler 464 * @stream_id : stream handler 465 * @buf_type : type of mapping buffers, can be value of 466 * CAM_MAPPING_BUF_TYPE_STREAM_BUF 467 * CAM_MAPPING_BUF_TYPE_STREAM_INFO 468 * CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF 469 * @buf_idx : buffer index within the stream buffers 470 * @plane_idx : plane index. If all planes share the same fd, 471 * plane_idx = -1; otherwise, plean_idx is the 472 * index to plane (0..num_of_planes) 473 * @fd : file descriptor of the stream buffer 474 * @size : size of the stream buffer 475 * Return value: 0 -- success 476 * -1 -- failure 477 **/ 478 int32_t (*map_stream_buf) (uint32_t camera_handle, 479 uint32_t ch_id, 480 uint32_t stream_id, 481 uint8_t buf_type, 482 uint32_t buf_idx, 483 int32_t plane_idx, 484 int fd, 485 uint32_t size); 486 487 /** unmap_stream_buf: fucntion definition for unmapping 488 * stream buffer via domain socket 489 * @camera_handle : camer handler 490 * @ch_id : channel handler 491 * @stream_id : stream handler 492 * @buf_type : type of mapping buffers, can be value of 493 * CAM_MAPPING_BUF_TYPE_STREAM_BUF 494 * CAM_MAPPING_BUF_TYPE_STREAM_INFO 495 * CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF 496 * @buf_idx : buffer index within the stream buffers 497 * @plane_idx : plane index. If all planes share the same fd, 498 * plane_idx = -1; otherwise, plean_idx is the 499 * index to plane (0..num_of_planes) 500 * Return value: 0 -- success 501 * -1 -- failure 502 **/ 503 int32_t (*unmap_stream_buf) (uint32_t camera_handle, 504 uint32_t ch_id, 505 uint32_t stream_id, 506 uint8_t buf_type, 507 uint32_t buf_idx, 508 int32_t plane_idx); 509 510 /** set_stream_parms: fucntion definition for setting stream 511 * specific parameters to server 512 * @camera_handle : camer handler 513 * @ch_id : channel handler 514 * @stream_id : stream handler 515 * @parms : batch for parameters to be set 516 * Return value: 0 -- success 517 * -1 -- failure 518 * Note: would assume parm buffer is already mapped, and 519 * according parameter entries to be set are filled in the 520 * buf before this call 521 **/ 522 int32_t (*set_stream_parms) (uint32_t camera_handle, 523 uint32_t ch_id, 524 uint32_t s_id, 525 cam_stream_parm_buffer_t *parms); 526 527 /** get_stream_parms: fucntion definition for querying stream 528 * specific parameters from server 529 * @camera_handle : camer handler 530 * @ch_id : channel handler 531 * @stream_id : stream handler 532 * @parms : batch for parameters to be queried 533 * Return value: 0 -- success 534 * -1 -- failure 535 * Note: would assume parm buffer is already mapped, and 536 * according parameter entries to be queried are filled in 537 * the buf before this call 538 **/ 539 int32_t (*get_stream_parms) (uint32_t camera_handle, 540 uint32_t ch_id, 541 uint32_t s_id, 542 cam_stream_parm_buffer_t *parms); 543 544 /** start_channel: fucntion definition for starting a channel 545 * @camera_handle : camer handler 546 * @ch_id : channel handler 547 * Return value: 0 -- success 548 * -1 -- failure 549 * This call will start all streams belongs to the channel 550 **/ 551 int32_t (*start_channel) (uint32_t camera_handle, 552 uint32_t ch_id); 553 554 /** stop_channel: fucntion definition for stopping a channel 555 * @camera_handle : camer handler 556 * @ch_id : channel handler 557 * Return value: 0 -- success 558 * -1 -- failure 559 * This call will stop all streams belongs to the channel 560 **/ 561 int32_t (*stop_channel) (uint32_t camera_handle, 562 uint32_t ch_id); 563 564 /** qbuf: fucntion definition for queuing a frame buffer back to 565 * kernel for reuse 566 * @camera_handle : camer handler 567 * @ch_id : channel handler 568 * @buf : a frame buffer to be queued back to kernel 569 * Return value: 0 -- success 570 * -1 -- failure 571 **/ 572 int32_t (*qbuf) (uint32_t camera_handle, 573 uint32_t ch_id, 574 mm_camera_buf_def_t *buf); 575 576 /** request_super_buf: fucntion definition for requesting frames 577 * from superbuf queue in burst mode 578 * @camera_handle : camer handler 579 * @ch_id : channel handler 580 * @num_buf_requested : number of super buffers requested 581 * Return value: 0 -- success 582 * -1 -- failure 583 **/ 584 int32_t (*request_super_buf) (uint32_t camera_handle, 585 uint32_t ch_id, 586 uint32_t num_buf_requested); 587 588 /** cancel_super_buf_request: fucntion definition for canceling 589 * frames dispatched from superbuf queue in 590 * burst mode 591 * @camera_handle : camer handler 592 * @ch_id : channel handler 593 * Return value: 0 -- success 594 * -1 -- failure 595 **/ 596 int32_t (*cancel_super_buf_request) (uint32_t camera_handle, 597 uint32_t ch_id); 598 599 /** flush_super_buf_queue: function definition for flushing out 600 * all frames in the superbuf queue up to frame_idx, 601 * even if frames with frame_idx come in later than 602 * this call. 603 * @camera_handle : camer handler 604 * @ch_id : channel handler 605 * @frame_idx : frame index up until which all superbufs are flushed 606 * Return value: 0 -- success 607 * -1 -- failure 608 **/ 609 int32_t (*flush_super_buf_queue) (uint32_t camera_handle, 610 uint32_t ch_id, uint32_t frame_idx); 611 612 /** configure_notify_mode: function definition for configuring the 613 * notification mode of channel 614 * @camera_handle : camera handler 615 * @ch_id : channel handler 616 * @notify_mode : notification mode 617 * Return value: 0 -- success 618 * -1 -- failure 619 **/ 620 int32_t (*configure_notify_mode) (uint32_t camera_handle, 621 uint32_t ch_id, 622 mm_camera_super_buf_notify_mode_t notify_mode); 623 } mm_camera_ops_t; 624 625 /** mm_camera_vtbl_t: virtual table for camera operations 626 * @camera_handle : camera handler which uniquely identifies a 627 * camera object 628 * @ops : API call table 629 **/ 630 typedef struct { 631 uint32_t camera_handle; 632 mm_camera_ops_t *ops; 633 } mm_camera_vtbl_t; 634 635 /* return number of cameras */ 636 uint8_t get_num_of_cameras(); 637 638 /* return reference pointer of camera vtbl */ 639 mm_camera_vtbl_t * camera_open(uint8_t camera_idx); 640 641 #endif /*__MM_CAMERA_INTERFACE_H__*/ 642