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