• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 	bool convert(int src_fd, void *src_viraddr,
172 				 int dest_fd,void *dest_viraddr);
173 	bool get_buffer_size(int port,unsigned int &buf_size);
174 	int get_src_format();
175 	void close();
176   private:
177      C2DColorConverterBase *c2dcc;
178     void *mLibHandle;
179 	ColorConvertFormat src_format;
180     createC2DColorConverter_t *mConvertOpen;
181     destroyC2DColorConverter_t *mConvertClose;
182   };
183   omx_c2d_conv c2d_conv;
184 #endif
185 public:
186   omx_video();  // constructor
187   virtual ~omx_video();  // destructor
188 
189   // virtual int async_message_process (void *context, void* message);
190   void process_event_cb(void *ctxt,unsigned char id);
191 
192   OMX_ERRORTYPE allocate_buffer(
193                                OMX_HANDLETYPE hComp,
194                                OMX_BUFFERHEADERTYPE **bufferHdr,
195                                OMX_U32 port,
196                                OMX_PTR appData,
197                                OMX_U32 bytes
198                                );
199 
200 
201   virtual OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp)= 0;
202 
203   virtual OMX_ERRORTYPE component_init(OMX_STRING role)= 0;
204 
205   virtual OMX_U32 dev_stop(void) = 0;
206   virtual OMX_U32 dev_pause(void) = 0;
207   virtual OMX_U32 dev_start(void) = 0;
208   virtual OMX_U32 dev_flush(unsigned) = 0;
209   virtual OMX_U32 dev_resume(void) = 0;
210   virtual OMX_U32 dev_start_done(void) = 0;
211   virtual OMX_U32 dev_stop_done(void) = 0;
212   virtual bool dev_use_buf(void *,unsigned,unsigned) = 0;
213   virtual bool dev_free_buf(void *,unsigned) = 0;
214   virtual bool dev_empty_buf(void *, void *,unsigned,unsigned) = 0;
215   virtual bool dev_fill_buf(void *buffer, void *,unsigned,unsigned) = 0;
216   virtual bool dev_get_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32) = 0;
217   virtual bool dev_get_seq_hdr(void *, unsigned, unsigned *) = 0;
218   virtual bool dev_loaded_start(void) = 0;
219   virtual bool dev_loaded_stop(void) = 0;
220   virtual bool dev_loaded_start_done(void) = 0;
221   virtual bool dev_loaded_stop_done(void) = 0;
222   virtual bool is_secure_session(void) = 0;
223 #ifdef _ANDROID_ICS_
224   void omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer);
225 #endif
226   OMX_ERRORTYPE component_role_enum(
227                                    OMX_HANDLETYPE hComp,
228                                    OMX_U8 *role,
229                                    OMX_U32 index
230                                    );
231 
232   OMX_ERRORTYPE component_tunnel_request(
233                                         OMX_HANDLETYPE hComp,
234                                         OMX_U32 port,
235                                         OMX_HANDLETYPE  peerComponent,
236                                         OMX_U32 peerPort,
237                                         OMX_TUNNELSETUPTYPE *tunnelSetup
238                                         );
239 
240   OMX_ERRORTYPE empty_this_buffer(
241                                  OMX_HANDLETYPE hComp,
242                                  OMX_BUFFERHEADERTYPE *buffer
243                                  );
244 
245 
246 
247   OMX_ERRORTYPE fill_this_buffer(
248                                 OMX_HANDLETYPE hComp,
249                                 OMX_BUFFERHEADERTYPE *buffer
250                                 );
251 
252 
253   OMX_ERRORTYPE free_buffer(
254                            OMX_HANDLETYPE hComp,
255                            OMX_U32 port,
256                            OMX_BUFFERHEADERTYPE *buffer
257                            );
258 
259   OMX_ERRORTYPE get_component_version(
260                                      OMX_HANDLETYPE hComp,
261                                      OMX_STRING componentName,
262                                      OMX_VERSIONTYPE *componentVersion,
263                                      OMX_VERSIONTYPE *specVersion,
264                                      OMX_UUIDTYPE *componentUUID
265                                      );
266 
267   OMX_ERRORTYPE get_config(
268                           OMX_HANDLETYPE hComp,
269                           OMX_INDEXTYPE configIndex,
270                           OMX_PTR configData
271                           );
272 
273   OMX_ERRORTYPE get_extension_index(
274                                    OMX_HANDLETYPE hComp,
275                                    OMX_STRING paramName,
276                                    OMX_INDEXTYPE *indexType
277                                    );
278 
279   OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
280                               OMX_INDEXTYPE  paramIndex,
281                               OMX_PTR        paramData);
282 
283   OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
284                           OMX_STATETYPE *state);
285 
286 
287 
288   OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
289                              OMX_COMMANDTYPE cmd,
290                              OMX_U32         param1,
291                              OMX_PTR         cmdData);
292 
293 
294   OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
295                               OMX_CALLBACKTYPE *callbacks,
296                               OMX_PTR          appData);
297 
298   virtual OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
299                            OMX_INDEXTYPE  configIndex,
300                            OMX_PTR        configData) = 0;
301 
302   virtual OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
303                                       OMX_INDEXTYPE  paramIndex,
304                                       OMX_PTR        paramData) =0;
305 
306   OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
307                            OMX_BUFFERHEADERTYPE **bufferHdr,
308                            OMX_U32              port,
309                            OMX_PTR              appData,
310                            OMX_U32              bytes,
311                            OMX_U8               *buffer);
312 
313 
314   OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
315                               OMX_BUFFERHEADERTYPE **bufferHdr,
316                               OMX_U32              port,
317                               OMX_PTR              appData,
318                               void *               eglImage);
319 
320 
321 
322   int  m_pipe_in;
323   int  m_pipe_out;
324 
325   pthread_t msg_thread_id;
326   pthread_t async_thread_id;
327 
328   OMX_U8 m_nkind[128];
329 
330 
331   //int *input_pmem_fd;
332   //int *output_pmem_fd;
333   struct pmem *m_pInput_pmem;
334   struct pmem *m_pOutput_pmem;
335 #ifdef USE_ION
336   struct venc_ion *m_pInput_ion;
337   struct venc_ion *m_pOutput_ion;
338 #endif
339 
340 
341 
342 public:
343   // Bit Positions
344   enum flags_bit_positions
345   {
346     // Defer transition to IDLE
347     OMX_COMPONENT_IDLE_PENDING            =0x1,
348     // Defer transition to LOADING
349     OMX_COMPONENT_LOADING_PENDING         =0x2,
350     // First  Buffer Pending
351     OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
352     // Second Buffer Pending
353     OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
354     // Defer transition to Enable
355     OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
356     // Defer transition to Enable
357     OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
358     // Defer transition to Disable
359     OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
360     // Defer transition to Disable
361     OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
362     //defer flush notification
363     OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
364     OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
365     OMX_COMPONENT_PAUSE_PENDING          =0xB,
366     OMX_COMPONENT_EXECUTE_PENDING        =0xC,
367     OMX_COMPONENT_LOADED_START_PENDING = 0xD,
368     OMX_COMPONENT_LOADED_STOP_PENDING = 0xF,
369 
370   };
371 
372   // Deferred callback identifiers
373   enum
374   {
375     //Event Callbacks from the venc component thread context
376     OMX_COMPONENT_GENERATE_EVENT       = 0x1,
377     //Buffer Done callbacks from the venc component thread context
378     OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
379     //Frame Done callbacks from the venc component thread context
380     OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
381     //Buffer Done callbacks from the venc component thread context
382     OMX_COMPONENT_GENERATE_FTB         = 0x4,
383     //Frame Done callbacks from the venc component thread context
384     OMX_COMPONENT_GENERATE_ETB         = 0x5,
385     //Command
386     OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
387     //Push-Pending Buffers
388     OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
389     // Empty Buffer Done callbacks
390     OMX_COMPONENT_GENERATE_EBD         = 0x8,
391     //Flush Event Callbacks from the venc component thread context
392     OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
393     OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
394     OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
395     OMX_COMPONENT_GENERATE_FBD = 0xc,
396     OMX_COMPONENT_GENERATE_START_DONE = 0xD,
397     OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
398     OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
399     OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
400     OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
401     OMX_COMPONENT_GENERATE_ETB_OPQ = 0x12
402   };
403 
404   struct omx_event
405   {
406     unsigned param1;
407     unsigned param2;
408     unsigned id;
409   };
410 
411   struct omx_cmd_queue
412   {
413     omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
414     unsigned m_read;
415     unsigned m_write;
416     unsigned m_size;
417 
418     omx_cmd_queue();
419     ~omx_cmd_queue();
420     bool insert_entry(unsigned p1, unsigned p2, unsigned id);
421     bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id);
422     // get msgtype of the first ele from the queue
423     unsigned get_q_msg_type();
424 
425   };
426 
427   bool allocate_done(void);
428   bool allocate_input_done(void);
429   bool allocate_output_done(void);
430 
431   OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
432   OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
433 
434   OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
435                                       OMX_BUFFERHEADERTYPE **bufferHdr,
436                                       OMX_U32              port,
437                                       OMX_PTR              appData,
438                                       OMX_U32              bytes);
439 #ifdef _ANDROID_ICS_
440   OMX_ERRORTYPE allocate_input_meta_buffer(OMX_HANDLETYPE       hComp,
441                                       OMX_BUFFERHEADERTYPE **bufferHdr,
442                                       OMX_PTR              appData,
443                                       OMX_U32              bytes);
444 #endif
445   OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
446                                        OMX_BUFFERHEADERTYPE **bufferHdr,
447                                        OMX_U32 port,OMX_PTR appData,
448                                        OMX_U32              bytes);
449 
450   OMX_ERRORTYPE use_input_buffer(OMX_HANDLETYPE hComp,
451                                  OMX_BUFFERHEADERTYPE  **bufferHdr,
452                                  OMX_U32               port,
453                                  OMX_PTR               appData,
454                                  OMX_U32               bytes,
455                                  OMX_U8                *buffer);
456 
457   OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
458                                   OMX_BUFFERHEADERTYPE   **bufferHdr,
459                                   OMX_U32                port,
460                                   OMX_PTR                appData,
461                                   OMX_U32                bytes,
462                                   OMX_U8                 *buffer);
463 
464   bool execute_omx_flush(OMX_U32);
465   bool execute_output_flush(void);
466   bool execute_input_flush(void);
467   OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
468                                   OMX_BUFFERHEADERTYPE * buffer);
469 
470   OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
471                                  OMX_BUFFERHEADERTYPE * buffer);
472   OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp,
473                                         OMX_BUFFERHEADERTYPE *buffer);
474   OMX_ERRORTYPE empty_this_buffer_opaque(OMX_HANDLETYPE hComp,
475                                   OMX_BUFFERHEADERTYPE *buffer);
476   OMX_ERRORTYPE push_input_buffer(OMX_HANDLETYPE hComp);
477   OMX_ERRORTYPE convert_queue_buffer(OMX_HANDLETYPE hComp,
478      struct pmem &Input_pmem_info,unsigned &index);
479   OMX_ERRORTYPE queue_meta_buffer(OMX_HANDLETYPE hComp,
480      struct pmem &Input_pmem_info);
481   OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
482                                        OMX_BUFFERHEADERTYPE *buffer);
483   bool release_done();
484 
485   bool release_output_done();
486   bool release_input_done();
487 
488   OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
489                                    OMX_COMMANDTYPE cmd,
490                                    OMX_U32         param1,
491                                    OMX_PTR         cmdData);
492   bool post_event( unsigned int p1,
493                    unsigned int p2,
494                    unsigned int id
495                  );
496   OMX_ERRORTYPE get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
omx_report_error()497   inline void omx_report_error ()
498   {
499     if(m_pCallbacks.EventHandler && !m_error_propogated)
500     {
501       m_error_propogated = true;
502       m_pCallbacks.EventHandler(&m_cmp,m_app_data,
503                                 OMX_EventError,OMX_ErrorHardware,0,NULL);
504     }
505   }
506 
507   void complete_pending_buffer_done_cbs();
508 
509   //*************************************************************
510   //*******************MEMBER VARIABLES *************************
511   //*************************************************************
512 
513   pthread_mutex_t       m_lock;
514   sem_t                 m_cmd_lock;
515   bool              m_error_propogated;
516 
517   //sem to handle the minimum procesing of commands
518 
519 
520   // compression format
521   //OMX_VIDEO_CODINGTYPE eCompressionFormat;
522   // OMX State
523   OMX_STATETYPE m_state;
524   // Application data
525   OMX_PTR m_app_data;
526   OMX_BOOL m_use_input_pmem;
527   OMX_BOOL m_use_output_pmem;
528   // Application callbacks
529   OMX_CALLBACKTYPE m_pCallbacks;
530   OMX_PORT_PARAM_TYPE m_sPortParam;
531   OMX_VIDEO_PARAM_PROFILELEVELTYPE m_sParamProfileLevel;
532   OMX_VIDEO_PARAM_PORTFORMATTYPE m_sInPortFormat;
533   OMX_VIDEO_PARAM_PORTFORMATTYPE m_sOutPortFormat;
534   OMX_PARAM_PORTDEFINITIONTYPE m_sInPortDef;
535   OMX_PARAM_PORTDEFINITIONTYPE m_sOutPortDef;
536   OMX_VIDEO_PARAM_MPEG4TYPE m_sParamMPEG4;
537   OMX_VIDEO_PARAM_H263TYPE m_sParamH263;
538   OMX_VIDEO_PARAM_AVCTYPE m_sParamAVC;
539   OMX_PORT_PARAM_TYPE m_sPortParam_img;
540   OMX_PORT_PARAM_TYPE m_sPortParam_audio;
541   OMX_VIDEO_CONFIG_BITRATETYPE m_sConfigBitrate;
542   OMX_CONFIG_FRAMERATETYPE m_sConfigFramerate;
543   OMX_VIDEO_PARAM_BITRATETYPE m_sParamBitrate;
544   OMX_PRIORITYMGMTTYPE m_sPriorityMgmt;
545   OMX_PARAM_BUFFERSUPPLIERTYPE m_sInBufSupplier;
546   OMX_PARAM_BUFFERSUPPLIERTYPE m_sOutBufSupplier;
547   OMX_CONFIG_ROTATIONTYPE m_sConfigFrameRotation;
548   OMX_CONFIG_INTRAREFRESHVOPTYPE m_sConfigIntraRefreshVOP;
549   OMX_VIDEO_PARAM_QUANTIZATIONTYPE m_sSessionQuantization;
550   OMX_VIDEO_PARAM_AVCSLICEFMO m_sAVCSliceFMO;
551   QOMX_VIDEO_INTRAPERIODTYPE m_sIntraperiod;
552   OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE m_sErrorCorrection;
553   OMX_VIDEO_PARAM_INTRAREFRESHTYPE m_sIntraRefresh;
554   OMX_U32 m_sExtraData;
555   OMX_U32 m_sDebugSliceinfo;
556   OMX_U32 m_input_msg_id;
557   // fill this buffer queue
558   omx_cmd_queue         m_ftb_q;
559   // Command Q for rest of the events
560   omx_cmd_queue         m_cmd_q;
561   omx_cmd_queue         m_etb_q;
562   omx_cmd_queue         m_opq_meta_q;
563   omx_cmd_queue         m_opq_pmem_q;
564   // Input memory pointer
565   OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
566   OMX_BUFFERHEADERTYPE meta_buffer_hdr[MAX_NUM_INPUT_BUFFERS];
567   // Output memory pointer
568   OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
569 
570   bool input_flush_progress;
571   bool output_flush_progress;
572   bool input_use_buffer;
573   bool output_use_buffer;
574   int pending_input_buffers;
575   int pending_output_buffers;
576 
577   unsigned int m_out_bm_count;
578   unsigned int m_inp_bm_count;
579   unsigned int m_flags;
580   unsigned int m_etb_count;
581   unsigned int m_fbd_count;
582 #ifdef _ANDROID_
583   // Heap pointer to frame buffers
584   sp<MemoryHeapBase>    m_heap_ptr;
585 #endif //_ANDROID_
586   // to know whether Event Port Settings change has been triggered or not.
587   bool m_event_port_settings_sent;
588   OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
589   extra_data_handler extra_data_handle;
590 
591 private:
592 #ifdef USE_ION
593   int alloc_map_ion_memory(int size,struct ion_allocation_data *alloc_data,
594                                     struct ion_fd_data *fd_data,int flag);
595   void free_ion_memory(struct venc_ion *buf_ion_info);
596 #endif
597 };
598 
599 #endif // __OMX_VIDEO_BASE_H__
600