1 /*-------------------------------------------------------------------------- 2 Copyright (c) 2010-2012, Code Aurora Forum. 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 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 copyright 9 notice, this list of conditions and the following disclaimer in the 10 documentation and/or other materials provided with the distribution. 11 * Neither the name of Code Aurora nor 12 the names of its contributors may be used to endorse or promote 13 products derived from this software without specific prior written 14 permission. 15 16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 20 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 23 OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 26 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 --------------------------------------------------------------------------*/ 28 29 #ifndef __OMX_VIDEO_BASE_H__ 30 #define __OMX_VIDEO_BASE_H__ 31 /*============================================================================ 32 O p e n M A X Component 33 Video Encoder 34 35 *//** @file comx_video_base.h 36 This module contains the class definition for openMAX decoder component. 37 38 *//*========================================================================*/ 39 40 ////////////////////////////////////////////////////////////////////////////// 41 // Include Files 42 ////////////////////////////////////////////////////////////////////////////// 43 44 #include<stdlib.h> 45 #include <stdio.h> 46 #include <sys/mman.h> 47 #ifdef _ANDROID_ 48 #include <binder/MemoryHeapBase.h> 49 #ifdef _ANDROID_ICS_ 50 #include "QComOMXMetadata.h" 51 #endif 52 #endif // _ANDROID_ 53 #include <pthread.h> 54 #include <semaphore.h> 55 #include <linux/msm_vidc_enc.h> 56 #include "OMX_Core.h" 57 #include "OMX_QCOMExtns.h" 58 #include "qc_omx_component.h" 59 #include "omx_video_common.h" 60 #include "extra_data_handler.h" 61 #include <linux/videodev2.h> 62 #include <dlfcn.h> 63 #include "C2DColorConverter.h" 64 65 #ifdef _ANDROID_ 66 using namespace android; 67 // local pmem heap object 68 class VideoHeap : public MemoryHeapBase 69 { 70 public: 71 VideoHeap(int fd, size_t size, void* base); ~VideoHeap()72 virtual ~VideoHeap() {} 73 }; 74 75 #include <utils/Log.h> 76 #define LOG_TAG "OMX-VENC-720p" 77 #ifdef ENABLE_DEBUG_LOW 78 #define DEBUG_PRINT_LOW ALOGV 79 #else 80 #define DEBUG_PRINT_LOW 81 #endif 82 #ifdef ENABLE_DEBUG_HIGH 83 #define DEBUG_PRINT_HIGH ALOGV 84 #else 85 #define DEBUG_PRINT_HIGH 86 #endif 87 #ifdef ENABLE_DEBUG_ERROR 88 #define DEBUG_PRINT_ERROR ALOGE 89 #else 90 #define DEBUG_PRINT_ERROR 91 #endif 92 93 #else //_ANDROID_ 94 #define DEBUG_PRINT_LOW 95 #define DEBUG_PRINT_HIGH 96 #define DEBUG_PRINT_ERROR 97 #endif // _ANDROID_ 98 99 #ifdef USE_ION 100 static const char* MEM_DEVICE = "/dev/ion"; 101 #define MEM_HEAP_ID ION_CP_MM_HEAP_ID 102 #elif MAX_RES_720P 103 static const char* MEM_DEVICE = "/dev/pmem_adsp"; 104 #elif MAX_RES_1080P_EBI 105 static const char* MEM_DEVICE = "/dev/pmem_adsp"; 106 #elif MAX_RES_1080P 107 static const char* MEM_DEVICE = "/dev/pmem_smipool"; 108 #else 109 #error MEM_DEVICE cannot be determined. 110 #endif 111 112 ////////////////////////////////////////////////////////////////////////////// 113 // Module specific globals 114 ////////////////////////////////////////////////////////////////////////////// 115 116 #define OMX_SPEC_VERSION 0x00000101 117 118 119 ////////////////////////////////////////////////////////////////////////////// 120 // Macros 121 ////////////////////////////////////////////////////////////////////////////// 122 #define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\ 123 (unsigned) bufHdr,\ 124 (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\ 125 (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\ 126 (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp) 127 128 // BitMask Management logic 129 #define BITS_PER_BYTE 32 130 #define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE) 131 #define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE) 132 #define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE)) 133 #define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 134 &= ~(BITMASK_FLAG(mIndex)) 135 #define BITMASK_SET(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 136 |= BITMASK_FLAG(mIndex) 137 #define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 138 & BITMASK_FLAG(mIndex)) 139 #define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 140 & BITMASK_FLAG(mIndex)) == 0x0) 141 #define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 142 & BITMASK_FLAG(mIndex)) 143 #define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 144 & BITMASK_FLAG(mIndex)) == 0x0) 145 #ifdef _ANDROID_ICS_ 146 #define MAX_NUM_INPUT_BUFFERS 32 147 #endif 148 void* message_thread(void *); 149 // OMX video class 150 class omx_video: public qc_omx_component 151 { 152 protected: 153 #ifdef _ANDROID_ICS_ 154 bool meta_mode_enable; 155 bool c2d_opened; 156 encoder_media_buffer_type meta_buffers[MAX_NUM_INPUT_BUFFERS]; 157 OMX_BUFFERHEADERTYPE *opaque_buffer_hdr[MAX_NUM_INPUT_BUFFERS]; 158 bool mUseProxyColorFormat; 159 OMX_BUFFERHEADERTYPE *psource_frame; 160 OMX_BUFFERHEADERTYPE *pdest_frame; 161 bool secure_session; 162 int secure_color_format; 163 class omx_c2d_conv { 164 public: 165 omx_c2d_conv(); 166 ~omx_c2d_conv(); 167 bool init(); 168 bool open(unsigned int height,unsigned int width, 169 ColorConvertFormat src, 170 ColorConvertFormat dest, 171 unsigned int srcStride); 172 bool convert(int src_fd, void *src_base, void *src_viraddr, 173 int dest_fd, void* dest_base, void *dest_viraddr); 174 bool get_buffer_size(int port,unsigned int &buf_size); 175 int get_src_format(); 176 void close(); 177 private: 178 C2DColorConverterBase *c2dcc; 179 void *mLibHandle; 180 ColorConvertFormat src_format; 181 createC2DColorConverter_t *mConvertOpen; 182 destroyC2DColorConverter_t *mConvertClose; 183 }; 184 omx_c2d_conv c2d_conv; 185 #endif 186 public: 187 omx_video(); // constructor 188 virtual ~omx_video(); // destructor 189 190 // virtual int async_message_process (void *context, void* message); 191 void process_event_cb(void *ctxt,unsigned char id); 192 193 OMX_ERRORTYPE allocate_buffer( 194 OMX_HANDLETYPE hComp, 195 OMX_BUFFERHEADERTYPE **bufferHdr, 196 OMX_U32 port, 197 OMX_PTR appData, 198 OMX_U32 bytes 199 ); 200 201 202 virtual OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp)= 0; 203 204 virtual OMX_ERRORTYPE component_init(OMX_STRING role)= 0; 205 206 virtual OMX_U32 dev_stop(void) = 0; 207 virtual OMX_U32 dev_pause(void) = 0; 208 virtual OMX_U32 dev_start(void) = 0; 209 virtual OMX_U32 dev_flush(unsigned) = 0; 210 virtual OMX_U32 dev_resume(void) = 0; 211 virtual OMX_U32 dev_start_done(void) = 0; 212 virtual OMX_U32 dev_stop_done(void) = 0; 213 virtual bool dev_use_buf(void *,unsigned,unsigned) = 0; 214 virtual bool dev_free_buf(void *,unsigned) = 0; 215 virtual bool dev_empty_buf(void *, void *,unsigned,unsigned) = 0; 216 virtual bool dev_fill_buf(void *buffer, void *,unsigned,unsigned) = 0; 217 virtual bool dev_get_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32) = 0; 218 virtual bool dev_get_seq_hdr(void *, unsigned, unsigned *) = 0; 219 virtual bool dev_loaded_start(void) = 0; 220 virtual bool dev_loaded_stop(void) = 0; 221 virtual bool dev_loaded_start_done(void) = 0; 222 virtual bool dev_loaded_stop_done(void) = 0; 223 virtual bool is_secure_session(void) = 0; 224 #ifdef _ANDROID_ICS_ 225 void omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer); 226 #endif 227 OMX_ERRORTYPE component_role_enum( 228 OMX_HANDLETYPE hComp, 229 OMX_U8 *role, 230 OMX_U32 index 231 ); 232 233 OMX_ERRORTYPE component_tunnel_request( 234 OMX_HANDLETYPE hComp, 235 OMX_U32 port, 236 OMX_HANDLETYPE peerComponent, 237 OMX_U32 peerPort, 238 OMX_TUNNELSETUPTYPE *tunnelSetup 239 ); 240 241 OMX_ERRORTYPE empty_this_buffer( 242 OMX_HANDLETYPE hComp, 243 OMX_BUFFERHEADERTYPE *buffer 244 ); 245 246 247 248 OMX_ERRORTYPE fill_this_buffer( 249 OMX_HANDLETYPE hComp, 250 OMX_BUFFERHEADERTYPE *buffer 251 ); 252 253 254 OMX_ERRORTYPE free_buffer( 255 OMX_HANDLETYPE hComp, 256 OMX_U32 port, 257 OMX_BUFFERHEADERTYPE *buffer 258 ); 259 260 OMX_ERRORTYPE get_component_version( 261 OMX_HANDLETYPE hComp, 262 OMX_STRING componentName, 263 OMX_VERSIONTYPE *componentVersion, 264 OMX_VERSIONTYPE *specVersion, 265 OMX_UUIDTYPE *componentUUID 266 ); 267 268 OMX_ERRORTYPE get_config( 269 OMX_HANDLETYPE hComp, 270 OMX_INDEXTYPE configIndex, 271 OMX_PTR configData 272 ); 273 274 OMX_ERRORTYPE get_extension_index( 275 OMX_HANDLETYPE hComp, 276 OMX_STRING paramName, 277 OMX_INDEXTYPE *indexType 278 ); 279 280 OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp, 281 OMX_INDEXTYPE paramIndex, 282 OMX_PTR paramData); 283 284 OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp, 285 OMX_STATETYPE *state); 286 287 288 289 OMX_ERRORTYPE send_command(OMX_HANDLETYPE hComp, 290 OMX_COMMANDTYPE cmd, 291 OMX_U32 param1, 292 OMX_PTR cmdData); 293 294 295 OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE hComp, 296 OMX_CALLBACKTYPE *callbacks, 297 OMX_PTR appData); 298 299 virtual OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp, 300 OMX_INDEXTYPE configIndex, 301 OMX_PTR configData) = 0; 302 303 virtual OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp, 304 OMX_INDEXTYPE paramIndex, 305 OMX_PTR paramData) =0; 306 307 OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE hComp, 308 OMX_BUFFERHEADERTYPE **bufferHdr, 309 OMX_U32 port, 310 OMX_PTR appData, 311 OMX_U32 bytes, 312 OMX_U8 *buffer); 313 314 315 OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE hComp, 316 OMX_BUFFERHEADERTYPE **bufferHdr, 317 OMX_U32 port, 318 OMX_PTR appData, 319 void * eglImage); 320 321 322 323 int m_pipe_in; 324 int m_pipe_out; 325 326 pthread_t msg_thread_id; 327 pthread_t async_thread_id; 328 329 OMX_U8 m_nkind[128]; 330 331 332 //int *input_pmem_fd; 333 //int *output_pmem_fd; 334 struct pmem *m_pInput_pmem; 335 struct pmem *m_pOutput_pmem; 336 #ifdef USE_ION 337 struct venc_ion *m_pInput_ion; 338 struct venc_ion *m_pOutput_ion; 339 #endif 340 341 342 343 public: 344 // Bit Positions 345 enum flags_bit_positions 346 { 347 // Defer transition to IDLE 348 OMX_COMPONENT_IDLE_PENDING =0x1, 349 // Defer transition to LOADING 350 OMX_COMPONENT_LOADING_PENDING =0x2, 351 // First Buffer Pending 352 OMX_COMPONENT_FIRST_BUFFER_PENDING =0x3, 353 // Second Buffer Pending 354 OMX_COMPONENT_SECOND_BUFFER_PENDING =0x4, 355 // Defer transition to Enable 356 OMX_COMPONENT_INPUT_ENABLE_PENDING =0x5, 357 // Defer transition to Enable 358 OMX_COMPONENT_OUTPUT_ENABLE_PENDING =0x6, 359 // Defer transition to Disable 360 OMX_COMPONENT_INPUT_DISABLE_PENDING =0x7, 361 // Defer transition to Disable 362 OMX_COMPONENT_OUTPUT_DISABLE_PENDING =0x8, 363 //defer flush notification 364 OMX_COMPONENT_OUTPUT_FLUSH_PENDING =0x9, 365 OMX_COMPONENT_INPUT_FLUSH_PENDING =0xA, 366 OMX_COMPONENT_PAUSE_PENDING =0xB, 367 OMX_COMPONENT_EXECUTE_PENDING =0xC, 368 OMX_COMPONENT_LOADED_START_PENDING = 0xD, 369 OMX_COMPONENT_LOADED_STOP_PENDING = 0xF, 370 371 }; 372 373 // Deferred callback identifiers 374 enum 375 { 376 //Event Callbacks from the venc component thread context 377 OMX_COMPONENT_GENERATE_EVENT = 0x1, 378 //Buffer Done callbacks from the venc component thread context 379 OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2, 380 //Frame Done callbacks from the venc component thread context 381 OMX_COMPONENT_GENERATE_FRAME_DONE = 0x3, 382 //Buffer Done callbacks from the venc component thread context 383 OMX_COMPONENT_GENERATE_FTB = 0x4, 384 //Frame Done callbacks from the venc component thread context 385 OMX_COMPONENT_GENERATE_ETB = 0x5, 386 //Command 387 OMX_COMPONENT_GENERATE_COMMAND = 0x6, 388 //Push-Pending Buffers 389 OMX_COMPONENT_PUSH_PENDING_BUFS = 0x7, 390 // Empty Buffer Done callbacks 391 OMX_COMPONENT_GENERATE_EBD = 0x8, 392 //Flush Event Callbacks from the venc component thread context 393 OMX_COMPONENT_GENERATE_EVENT_FLUSH = 0x9, 394 OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A, 395 OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B, 396 OMX_COMPONENT_GENERATE_FBD = 0xc, 397 OMX_COMPONENT_GENERATE_START_DONE = 0xD, 398 OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE, 399 OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF, 400 OMX_COMPONENT_GENERATE_STOP_DONE = 0x10, 401 OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11, 402 OMX_COMPONENT_GENERATE_ETB_OPQ = 0x12 403 }; 404 405 struct omx_event 406 { 407 unsigned param1; 408 unsigned param2; 409 unsigned id; 410 }; 411 412 struct omx_cmd_queue 413 { 414 omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE]; 415 unsigned m_read; 416 unsigned m_write; 417 unsigned m_size; 418 419 omx_cmd_queue(); 420 ~omx_cmd_queue(); 421 bool insert_entry(unsigned p1, unsigned p2, unsigned id); 422 bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id); 423 // get msgtype of the first ele from the queue 424 unsigned get_q_msg_type(); 425 426 }; 427 428 bool allocate_done(void); 429 bool allocate_input_done(void); 430 bool allocate_output_done(void); 431 432 OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 433 OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 434 435 OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE hComp, 436 OMX_BUFFERHEADERTYPE **bufferHdr, 437 OMX_U32 port, 438 OMX_PTR appData, 439 OMX_U32 bytes); 440 #ifdef _ANDROID_ICS_ 441 OMX_ERRORTYPE allocate_input_meta_buffer(OMX_HANDLETYPE hComp, 442 OMX_BUFFERHEADERTYPE **bufferHdr, 443 OMX_PTR appData, 444 OMX_U32 bytes); 445 #endif 446 OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE hComp, 447 OMX_BUFFERHEADERTYPE **bufferHdr, 448 OMX_U32 port,OMX_PTR appData, 449 OMX_U32 bytes); 450 451 OMX_ERRORTYPE use_input_buffer(OMX_HANDLETYPE hComp, 452 OMX_BUFFERHEADERTYPE **bufferHdr, 453 OMX_U32 port, 454 OMX_PTR appData, 455 OMX_U32 bytes, 456 OMX_U8 *buffer); 457 458 OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp, 459 OMX_BUFFERHEADERTYPE **bufferHdr, 460 OMX_U32 port, 461 OMX_PTR appData, 462 OMX_U32 bytes, 463 OMX_U8 *buffer); 464 465 bool execute_omx_flush(OMX_U32); 466 bool execute_output_flush(void); 467 bool execute_input_flush(void); 468 OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp, 469 OMX_BUFFERHEADERTYPE * buffer); 470 471 OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp, 472 OMX_BUFFERHEADERTYPE * buffer); 473 OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp, 474 OMX_BUFFERHEADERTYPE *buffer); 475 OMX_ERRORTYPE empty_this_buffer_opaque(OMX_HANDLETYPE hComp, 476 OMX_BUFFERHEADERTYPE *buffer); 477 OMX_ERRORTYPE push_input_buffer(OMX_HANDLETYPE hComp); 478 OMX_ERRORTYPE convert_queue_buffer(OMX_HANDLETYPE hComp, 479 struct pmem &Input_pmem_info,unsigned &index); 480 OMX_ERRORTYPE queue_meta_buffer(OMX_HANDLETYPE hComp, 481 struct pmem &Input_pmem_info); 482 OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE hComp, 483 OMX_BUFFERHEADERTYPE *buffer); 484 bool release_done(); 485 486 bool release_output_done(); 487 bool release_input_done(); 488 489 OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE hComp, 490 OMX_COMMANDTYPE cmd, 491 OMX_U32 param1, 492 OMX_PTR cmdData); 493 bool post_event( unsigned int p1, 494 unsigned int p2, 495 unsigned int id 496 ); 497 OMX_ERRORTYPE get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType); omx_report_error()498 inline void omx_report_error () 499 { 500 if(m_pCallbacks.EventHandler && !m_error_propogated) 501 { 502 m_error_propogated = true; 503 m_pCallbacks.EventHandler(&m_cmp,m_app_data, 504 OMX_EventError,OMX_ErrorHardware,0,NULL); 505 } 506 } 507 508 void complete_pending_buffer_done_cbs(); 509 510 //************************************************************* 511 //*******************MEMBER VARIABLES ************************* 512 //************************************************************* 513 514 pthread_mutex_t m_lock; 515 sem_t m_cmd_lock; 516 bool m_error_propogated; 517 518 //sem to handle the minimum procesing of commands 519 520 521 // compression format 522 //OMX_VIDEO_CODINGTYPE eCompressionFormat; 523 // OMX State 524 OMX_STATETYPE m_state; 525 // Application data 526 OMX_PTR m_app_data; 527 OMX_BOOL m_use_input_pmem; 528 OMX_BOOL m_use_output_pmem; 529 // Application callbacks 530 OMX_CALLBACKTYPE m_pCallbacks; 531 OMX_PORT_PARAM_TYPE m_sPortParam; 532 OMX_VIDEO_PARAM_PROFILELEVELTYPE m_sParamProfileLevel; 533 OMX_VIDEO_PARAM_PORTFORMATTYPE m_sInPortFormat; 534 OMX_VIDEO_PARAM_PORTFORMATTYPE m_sOutPortFormat; 535 OMX_PARAM_PORTDEFINITIONTYPE m_sInPortDef; 536 OMX_PARAM_PORTDEFINITIONTYPE m_sOutPortDef; 537 OMX_VIDEO_PARAM_MPEG4TYPE m_sParamMPEG4; 538 OMX_VIDEO_PARAM_H263TYPE m_sParamH263; 539 OMX_VIDEO_PARAM_AVCTYPE m_sParamAVC; 540 OMX_PORT_PARAM_TYPE m_sPortParam_img; 541 OMX_PORT_PARAM_TYPE m_sPortParam_audio; 542 OMX_VIDEO_CONFIG_BITRATETYPE m_sConfigBitrate; 543 OMX_CONFIG_FRAMERATETYPE m_sConfigFramerate; 544 OMX_VIDEO_PARAM_BITRATETYPE m_sParamBitrate; 545 OMX_PRIORITYMGMTTYPE m_sPriorityMgmt; 546 OMX_PARAM_BUFFERSUPPLIERTYPE m_sInBufSupplier; 547 OMX_PARAM_BUFFERSUPPLIERTYPE m_sOutBufSupplier; 548 OMX_CONFIG_ROTATIONTYPE m_sConfigFrameRotation; 549 OMX_CONFIG_INTRAREFRESHVOPTYPE m_sConfigIntraRefreshVOP; 550 OMX_VIDEO_PARAM_QUANTIZATIONTYPE m_sSessionQuantization; 551 OMX_VIDEO_PARAM_AVCSLICEFMO m_sAVCSliceFMO; 552 QOMX_VIDEO_INTRAPERIODTYPE m_sIntraperiod; 553 OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE m_sErrorCorrection; 554 OMX_VIDEO_PARAM_INTRAREFRESHTYPE m_sIntraRefresh; 555 OMX_U32 m_sExtraData; 556 OMX_U32 m_sDebugSliceinfo; 557 OMX_U32 m_input_msg_id; 558 // fill this buffer queue 559 omx_cmd_queue m_ftb_q; 560 // Command Q for rest of the events 561 omx_cmd_queue m_cmd_q; 562 omx_cmd_queue m_etb_q; 563 omx_cmd_queue m_opq_meta_q; 564 omx_cmd_queue m_opq_pmem_q; 565 // Input memory pointer 566 OMX_BUFFERHEADERTYPE *m_inp_mem_ptr; 567 OMX_BUFFERHEADERTYPE meta_buffer_hdr[MAX_NUM_INPUT_BUFFERS]; 568 // Output memory pointer 569 OMX_BUFFERHEADERTYPE *m_out_mem_ptr; 570 571 bool input_flush_progress; 572 bool output_flush_progress; 573 bool input_use_buffer; 574 bool output_use_buffer; 575 int pending_input_buffers; 576 int pending_output_buffers; 577 578 unsigned int m_out_bm_count; 579 unsigned int m_inp_bm_count; 580 unsigned int m_flags; 581 unsigned int m_etb_count; 582 unsigned int m_fbd_count; 583 #ifdef _ANDROID_ 584 // Heap pointer to frame buffers 585 sp<MemoryHeapBase> m_heap_ptr; 586 #endif //_ANDROID_ 587 // to know whether Event Port Settings change has been triggered or not. 588 bool m_event_port_settings_sent; 589 OMX_U8 m_cRole[OMX_MAX_STRINGNAME_SIZE]; 590 extra_data_handler extra_data_handle; 591 592 private: 593 #ifdef USE_ION 594 int alloc_map_ion_memory(int size,struct ion_allocation_data *alloc_data, 595 struct ion_fd_data *fd_data,int flag); 596 void free_ion_memory(struct venc_ion *buf_ion_info); 597 #endif 598 }; 599 600 #endif // __OMX_VIDEO_BASE_H__ 601