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