1/*--------------------------------------------------------------------------
2Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
3
4Redistribution and use in source and binary forms, with or without
5modification, 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
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26ADVISED 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_
66using namespace android;
67// local pmem heap object
68class VideoHeap : public MemoryHeapBase
69{
70public:
71  VideoHeap(int fd, size_t size, void* base);
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
103static const char* MEM_DEVICE = "/dev/pmem_adsp";
104#elif MAX_RES_1080P_EBI
105static const char* MEM_DEVICE  = "/dev/pmem_adsp";
106#elif MAX_RES_1080P
107static 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
148void* message_thread(void *);
149// OMX video class
150class omx_video: public qc_omx_component
151{
152protected:
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
186public:
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
343public:
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);
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
592private:
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