diff options
Diffstat (limited to 'camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h')
| -rwxr-xr-x | camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h | 501 |
1 files changed, 0 insertions, 501 deletions
diff --git a/camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h b/camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h deleted file mode 100755 index 8241538..0000000 --- a/camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h +++ /dev/null @@ -1,501 +0,0 @@ -/* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef MM_JPEG_H_ -#define MM_JPEG_H_ - -#include <cam_semaphore.h> -#include "mm_jpeg_interface.h" -#include "cam_list.h" -#include "OMX_Types.h" -#include "OMX_Index.h" -#include "OMX_Core.h" -#include "OMX_Component.h" -#include "QOMX_JpegExtensions.h" -#include "mm_jpeg_ionbuf.h" - -#define MM_JPEG_MAX_THREADS 30 -#define MM_JPEG_CIRQ_SIZE 30 -#define MM_JPEG_MAX_SESSION 10 -#define MAX_EXIF_TABLE_ENTRIES 50 -#define MAX_JPEG_SIZE 20000000 -#define MAX_OMX_HANDLES (5) - - -/** mm_jpeg_abort_state_t: - * @MM_JPEG_ABORT_NONE: Abort is not issued - * @MM_JPEG_ABORT_INIT: Abort is issued from the client - * @MM_JPEG_ABORT_DONE: Abort is completed - * - * State representing the abort state - **/ -typedef enum { - MM_JPEG_ABORT_NONE, - MM_JPEG_ABORT_INIT, - MM_JPEG_ABORT_DONE, -} mm_jpeg_abort_state_t; - - -/* define max num of supported concurrent jpeg jobs by OMX engine. - * Current, only one per time */ -#define NUM_MAX_JPEG_CNCURRENT_JOBS 2 - -#define JOB_ID_MAGICVAL 0x1 -#define JOB_HIST_MAX 10000 - -/** DUMP_TO_FILE: - * @filename: file name - * @p_addr: address of the buffer - * @len: buffer length - * - * dump the image to the file - **/ -#define DUMP_TO_FILE(filename, p_addr, len) ({ \ - size_t rc = 0; \ - FILE *fp = fopen(filename, "w+"); \ - if (fp) { \ - rc = fwrite(p_addr, 1, len, fp); \ - CDBG_ERROR("%s:%d] written size %zu", __func__, __LINE__, len); \ - fclose(fp); \ - } else { \ - CDBG_ERROR("%s:%d] open %s failed", __func__, __LINE__, filename); \ - } \ -}) - -/** DUMP_TO_FILE2: - * @filename: file name - * @p_addr: address of the buffer - * @len: buffer length - * - * dump the image to the file if the memory is non-contiguous - **/ -#define DUMP_TO_FILE2(filename, p_addr1, len1, paddr2, len2) ({ \ - size_t rc = 0; \ - FILE *fp = fopen(filename, "w+"); \ - if (fp) { \ - rc = fwrite(p_addr1, 1, len1, fp); \ - rc = fwrite(p_addr2, 1, len2, fp); \ - CDBG_ERROR("%s:%d] written %zu %zu", __func__, __LINE__, len1, len2); \ - fclose(fp); \ - } else { \ - CDBG_ERROR("%s:%d] open %s failed", __func__, __LINE__, filename); \ - } \ -}) - -/** MM_JPEG_CHK_ABORT: - * @p: client pointer - * @ret: return value - * @label: label to jump to - * - * check the abort failure - **/ -#define MM_JPEG_CHK_ABORT(p, ret, label) ({ \ - if (MM_JPEG_ABORT_INIT == p->abort_state) { \ - CDBG_ERROR("%s:%d] jpeg abort", __func__, __LINE__); \ - ret = OMX_ErrorNone; \ - goto label; \ - } \ -}) - -#define GET_CLIENT_IDX(x) ((x) & 0xff) -#define GET_SESSION_IDX(x) (((x) >> 8) & 0xff) -#define GET_JOB_IDX(x) (((x) >> 16) & 0xff) - -typedef struct { - union { - int i_data[MM_JPEG_CIRQ_SIZE]; - void *p_data[MM_JPEG_CIRQ_SIZE]; - }; - int front; - int rear; - int count; - pthread_mutex_t lock; -} mm_jpeg_cirq_t; - -/** cirq_reset: - * - * Arguments: - * @q: circular queue - * - * Return: - * none - * - * Description: - * Resets the circular queue - * - **/ -static inline void cirq_reset(mm_jpeg_cirq_t *q) -{ - q->front = 0; - q->rear = 0; - q->count = 0; - pthread_mutex_init(&q->lock, NULL); -} - -/** cirq_empty: - * - * Arguments: - * @q: circular queue - * - * Return: - * none - * - * Description: - * check if the curcular queue is empty - * - **/ -#define cirq_empty(q) (q->count == 0) - -/** cirq_full: - * - * Arguments: - * @q: circular queue - * - * Return: - * none - * - * Description: - * check if the curcular queue is full - * - **/ -#define cirq_full(q) (q->count == MM_JPEG_CIRQ_SIZE) - -/** cirq_enqueue: - * - * Arguments: - * @q: circular queue - * @data: data to be inserted - * - * Return: - * true/false - * - * Description: - * enqueue an element into circular queue - * - **/ -#define cirq_enqueue(q, type, data) ({ \ - int rc = 0; \ - pthread_mutex_lock(&q->lock); \ - if (cirq_full(q)) { \ - rc = -1; \ - } else { \ - q->type[q->rear] = data; \ - q->rear = (q->rear + 1) % MM_JPEG_CIRQ_SIZE; \ - q->count++; \ - } \ - pthread_mutex_unlock(&q->lock); \ - rc; \ -}) - -/** cirq_dequeue: - * - * Arguments: - * @q: circular queue - * @data: data to be popped - * - * Return: - * true/false - * - * Description: - * dequeue an element from the circular queue - * - **/ -#define cirq_dequeue(q, type, data) ({ \ - int rc = 0; \ - pthread_mutex_lock(&q->lock); \ - if (cirq_empty(q)) { \ - pthread_mutex_unlock(&q->lock); \ - rc = -1; \ - } else { \ - data = q->type[q->front]; \ - q->count--; \ - } \ - pthread_mutex_unlock(&q->lock); \ - rc; \ -}) - - -typedef union { - uint32_t u32; - void* p; -} mm_jpeg_q_data_t; - - typedef struct { - struct cam_list list; - mm_jpeg_q_data_t data; -} mm_jpeg_q_node_t; - -typedef struct { - mm_jpeg_q_node_t head; /* dummy head */ - uint32_t size; - pthread_mutex_t lock; -} mm_jpeg_queue_t; - -typedef enum { - MM_JPEG_CMD_TYPE_JOB, /* job cmd */ - MM_JPEG_CMD_TYPE_EXIT, /* EXIT cmd for exiting jobMgr thread */ - MM_JPEG_CMD_TYPE_DECODE_JOB, - MM_JPEG_CMD_TYPE_MAX -} mm_jpeg_cmd_type_t; - -typedef struct mm_jpeg_job_session { - uint32_t client_hdl; /* client handler */ - uint32_t jobId; /* job ID */ - uint32_t sessionId; /* session ID */ - mm_jpeg_encode_params_t params; /* encode params */ - mm_jpeg_decode_params_t dec_params; /* encode params */ - mm_jpeg_encode_job_t encode_job; /* job description */ - mm_jpeg_decode_job_t decode_job; - pthread_t encode_pid; /* encode thread handler*/ - - void *jpeg_obj; /* ptr to mm_jpeg_obj */ - jpeg_job_status_t job_status; /* job status */ - - int state_change_pending; /* flag to indicate if state change is pending */ - OMX_ERRORTYPE error_flag; /* variable to indicate error during encoding */ - mm_jpeg_abort_state_t abort_state; /* variable to indicate abort during encoding */ - - /* OMX related */ - OMX_HANDLETYPE omx_handle; /* handle to omx engine */ - OMX_CALLBACKTYPE omx_callbacks; /* callbacks to omx engine */ - - /* buffer headers */ - OMX_BUFFERHEADERTYPE *p_in_omx_buf[MM_JPEG_MAX_BUF]; - OMX_BUFFERHEADERTYPE *p_in_omx_thumb_buf[MM_JPEG_MAX_BUF]; - OMX_BUFFERHEADERTYPE *p_out_omx_buf[MM_JPEG_MAX_BUF]; - - OMX_PARAM_PORTDEFINITIONTYPE inputPort; - OMX_PARAM_PORTDEFINITIONTYPE outputPort; - OMX_PARAM_PORTDEFINITIONTYPE inputTmbPort; - - /* event locks */ - pthread_mutex_t lock; - pthread_cond_t cond; - - QEXIF_INFO_DATA exif_info_local[MAX_EXIF_TABLE_ENTRIES]; //all exif tags for JPEG encoder - int exif_count_local; - - mm_jpeg_cirq_t cb_q; - int32_t ebd_count; - int32_t fbd_count; - - /* this flag represents whether the job is active */ - OMX_BOOL active; - - /* this flag indicates if the configration is complete */ - OMX_BOOL config; - - /* job history count to generate unique id */ - unsigned int job_hist; - - OMX_BOOL encoding; - - buffer_t work_buffer; - - OMX_EVENTTYPE omxEvent; - int event_pending; - - uint8_t *meta_enc_key; - size_t meta_enc_keylen; - - struct mm_jpeg_job_session *next_session; - - uint32_t curr_out_buf_idx; - - uint32_t num_omx_sessions; - OMX_BOOL auto_out_buf; - - mm_jpeg_queue_t *session_handle_q; - mm_jpeg_queue_t *out_buf_q; - - uint32_t job_index; -} mm_jpeg_job_session_t; - -typedef struct { - mm_jpeg_encode_job_t encode_job; - uint32_t job_id; - uint32_t client_handle; -} mm_jpeg_encode_job_info_t; - -typedef struct { - mm_jpeg_decode_job_t decode_job; - uint32_t job_id; - uint32_t client_handle; -} mm_jpeg_decode_job_info_t; - -typedef struct { - mm_jpeg_cmd_type_t type; - union { - mm_jpeg_encode_job_info_t enc_info; - mm_jpeg_decode_job_info_t dec_info; - }; -} mm_jpeg_job_q_node_t; - -typedef struct { - uint8_t is_used; /* flag: if is a valid client */ - uint32_t client_handle; /* client handle */ - mm_jpeg_job_session_t session[MM_JPEG_MAX_SESSION]; - pthread_mutex_t lock; /* job lock */ -} mm_jpeg_client_t; - -typedef struct { - pthread_t pid; /* job cmd thread ID */ - cam_semaphore_t job_sem; /* semaphore for job cmd thread */ - mm_jpeg_queue_t job_queue; /* queue for job to do */ -} mm_jpeg_job_cmd_thread_t; - -#define MAX_JPEG_CLIENT_NUM 8 -typedef struct mm_jpeg_obj_t { - /* ClientMgr */ - int num_clients; /* num of clients */ - mm_jpeg_client_t clnt_mgr[MAX_JPEG_CLIENT_NUM]; /* client manager */ - - /* JobMkr */ - pthread_mutex_t job_lock; /* job lock */ - mm_jpeg_job_cmd_thread_t job_mgr; /* job mgr thread including todo_q*/ - mm_jpeg_queue_t ongoing_job_q; /* queue for ongoing jobs */ - buffer_t ionBuffer[MM_JPEG_CONCURRENT_SESSIONS_COUNT]; - - - /* Max pic dimension for work buf calc*/ - uint32_t max_pic_w; - uint32_t max_pic_h; - - /* previous work buffer dimensions */ - uint32_t prev_w; - uint32_t prev_h; - - uint32_t work_buf_cnt; - -#ifdef LOAD_ADSP_RPC_LIB - void *adsprpc_lib_handle; -#endif - - uint32_t num_sessions; - -} mm_jpeg_obj; - -/** mm_jpeg_pending_func_t: - * - * Intermediate function for transition change - **/ -typedef OMX_ERRORTYPE (*mm_jpeg_transition_func_t)(void *); - -extern int32_t mm_jpeg_init(mm_jpeg_obj *my_obj); -extern int32_t mm_jpeg_deinit(mm_jpeg_obj *my_obj); -extern uint32_t mm_jpeg_new_client(mm_jpeg_obj *my_obj); -extern int32_t mm_jpeg_start_job(mm_jpeg_obj *my_obj, - mm_jpeg_job_t* job, - uint32_t* jobId); -extern int32_t mm_jpeg_abort_job(mm_jpeg_obj *my_obj, - uint32_t jobId); -extern int32_t mm_jpeg_close(mm_jpeg_obj *my_obj, - uint32_t client_hdl); -extern int32_t mm_jpeg_create_session(mm_jpeg_obj *my_obj, - uint32_t client_hdl, - mm_jpeg_encode_params_t *p_params, - uint32_t* p_session_id); -extern int32_t mm_jpeg_destroy_session_by_id(mm_jpeg_obj *my_obj, - uint32_t session_id); - -extern int32_t mm_jpegdec_init(mm_jpeg_obj *my_obj); -extern int32_t mm_jpegdec_deinit(mm_jpeg_obj *my_obj); -extern int32_t mm_jpeg_jobmgr_thread_release(mm_jpeg_obj * my_obj); -extern int32_t mm_jpeg_jobmgr_thread_launch(mm_jpeg_obj *my_obj); -extern int32_t mm_jpegdec_start_decode_job(mm_jpeg_obj *my_obj, - mm_jpeg_job_t* job, - uint32_t* jobId); - -extern int32_t mm_jpegdec_create_session(mm_jpeg_obj *my_obj, - uint32_t client_hdl, - mm_jpeg_decode_params_t *p_params, - uint32_t* p_session_id); - -extern int32_t mm_jpegdec_destroy_session_by_id(mm_jpeg_obj *my_obj, - uint32_t session_id); - -extern int32_t mm_jpegdec_abort_job(mm_jpeg_obj *my_obj, - uint32_t jobId); - -int32_t mm_jpegdec_process_decoding_job(mm_jpeg_obj *my_obj, - mm_jpeg_job_q_node_t* job_node); - -/* utiltity fucntion declared in mm-camera-inteface2.c - * and need be used by mm-camera and below*/ -uint32_t mm_jpeg_util_generate_handler(uint8_t index); -uint8_t mm_jpeg_util_get_index_by_handler(uint32_t handler); - -/* basic queue functions */ -extern int32_t mm_jpeg_queue_init(mm_jpeg_queue_t* queue); -extern int32_t mm_jpeg_queue_enq(mm_jpeg_queue_t* queue, - mm_jpeg_q_data_t data); -extern int32_t mm_jpeg_queue_enq_head(mm_jpeg_queue_t* queue, - mm_jpeg_q_data_t data); -extern mm_jpeg_q_data_t mm_jpeg_queue_deq(mm_jpeg_queue_t* queue); -extern int32_t mm_jpeg_queue_deinit(mm_jpeg_queue_t* queue); -extern int32_t mm_jpeg_queue_flush(mm_jpeg_queue_t* queue); -extern uint32_t mm_jpeg_queue_get_size(mm_jpeg_queue_t* queue); -extern mm_jpeg_q_data_t mm_jpeg_queue_peek(mm_jpeg_queue_t* queue); -extern int32_t addExifEntry(QOMX_EXIF_INFO *p_exif_info, exif_tag_id_t tagid, - exif_tag_type_t type, uint32_t count, void *data); -extern int32_t releaseExifEntry(QEXIF_INFO_DATA *p_exif_data); -extern int process_meta_data(cam_metadata_info_t *p_meta, - QOMX_EXIF_INFO *exif_info, mm_jpeg_exif_params_t *p_cam3a_params); - -OMX_ERRORTYPE mm_jpeg_session_change_state(mm_jpeg_job_session_t* p_session, - OMX_STATETYPE new_state, - mm_jpeg_transition_func_t p_exec); - -int map_jpeg_format(mm_jpeg_color_format color_fmt); - -OMX_BOOL mm_jpeg_session_abort(mm_jpeg_job_session_t *p_session); -/** - * - * special queue functions for job queue - **/ -mm_jpeg_job_q_node_t* mm_jpeg_queue_remove_job_by_client_id( - mm_jpeg_queue_t* queue, uint32_t client_hdl); -mm_jpeg_job_q_node_t* mm_jpeg_queue_remove_job_by_job_id( - mm_jpeg_queue_t* queue, uint32_t job_id); -mm_jpeg_job_q_node_t* mm_jpeg_queue_remove_job_by_session_id( - mm_jpeg_queue_t* queue, uint32_t session_id); -mm_jpeg_job_q_node_t* mm_jpeg_queue_remove_job_unlk( - mm_jpeg_queue_t* queue, uint32_t job_id); - - -/** mm_jpeg_queue_func_t: - * - * Intermediate function for queue operation - **/ -typedef void (*mm_jpeg_queue_func_t)(void *); - - -#endif /* MM_JPEG_H_ */ - - |
