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