Home | History | Annotate | Download | only in inc
      1 /*--------------------------------------------------------------------------
      2 Copyright (c) 2010, 2014 The Linux Foundation. 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 The Linux Foundation 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 #ifndef _QCELP13_ENC_H_
     29 #define _QCELP13_ENC_H_
     30 /*============================================================================
     31                     Audio Encoder
     32 
     33 @file omx_qcelp13_aenc.h
     34 This module contains the class definition for openMAX encoder component.
     35 
     36 
     37 
     38 ============================================================================*/
     39 
     40 //////////////////////////////////////////////////////////////////////////////
     41 //                             Include Files
     42 //////////////////////////////////////////////////////////////////////////////
     43 
     44 /* Uncomment out below line #define LOG_NDEBUG 0 if we want to see
     45  *  all DEBUG_PRINT or LOGV messaging */
     46 #include<stdlib.h>
     47 #include <stdio.h>
     48 #include <pthread.h>
     49 #include <time.h>
     50 #include <inttypes.h>
     51 #include <unistd.h>
     52 #include "QOMX_AudioExtensions.h"
     53 #include "QOMX_AudioIndexExtensions.h"
     54 #include "OMX_Core.h"
     55 #include "OMX_Audio.h"
     56 #include "aenc_svr.h"
     57 #include "qc_omx_component.h"
     58 #include "Map.h"
     59 #include <semaphore.h>
     60 #include <linux/msm_audio.h>
     61 #include <linux/msm_audio_qcp.h>
     62 extern "C" {
     63     void * get_omx_component_factory_fn(void);
     64 }
     65 
     66 
     67 //////////////////////////////////////////////////////////////////////////////
     68 //                       Module specific globals
     69 //////////////////////////////////////////////////////////////////////////////
     70 
     71 
     72 
     73 #define OMX_SPEC_VERSION  0x00000101
     74 #define MIN(x,y) (((x) < (y)) ? (x) : (y))
     75 #define MAX(x,y) (x >= y?x:y)
     76 
     77 //////////////////////////////////////////////////////////////////////////////
     78 //               Macros
     79 //////////////////////////////////////////////////////////////////////////////
     80 //
     81 
     82 
     83 #define PrintFrameHdr(i,bufHdr) \
     84                            DEBUG_PRINT("i=%d OMX bufHdr[%p]buf[%p]size[%d]TS[%lld]nFlags[0x%x]\n",\
     85                            i,\
     86                            bufHdr,                                     \
     87                            ((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,   \
     88                            (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
     89                            ((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp, \
     90                            (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFlags)
     91 
     92 
     93 // BitMask Management logic
     94 #define BITS_PER_BYTE 8
     95 #define BITMASK_SIZE(mIndex) \
     96             (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
     97 #define BITMASK_OFFSET(mIndex)\
     98             ((mIndex)/BITS_PER_BYTE)
     99 #define BITMASK_FLAG(mIndex) \
    100             (1 << ((mIndex) % BITS_PER_BYTE))
    101 #define BITMASK_CLEAR(mArray,mIndex)\
    102             (mArray)[BITMASK_OFFSET(mIndex)] &=  ~(BITMASK_FLAG(mIndex))
    103 #define BITMASK_SET(mArray,mIndex)\
    104             (mArray)[BITMASK_OFFSET(mIndex)] |=  BITMASK_FLAG(mIndex)
    105 #define BITMASK_PRESENT(mArray,mIndex)\
    106             ((mArray)[BITMASK_OFFSET(mIndex)] & BITMASK_FLAG(mIndex))
    107 #define BITMASK_ABSENT(mArray,mIndex)\
    108             (((mArray)[BITMASK_OFFSET(mIndex)] & \
    109             BITMASK_FLAG(mIndex)) == 0x0)
    110 
    111 #define OMX_CORE_NUM_INPUT_BUFFERS    2
    112 #define OMX_CORE_NUM_OUTPUT_BUFFERS   16
    113 
    114 #define OMX_CORE_INPUT_BUFFER_SIZE    8160 // Multiple of 160
    115 #define OMX_CORE_CONTROL_CMDQ_SIZE   100
    116 #define OMX_AENC_VOLUME_STEP         0x147
    117 #define OMX_AENC_MIN                 0
    118 #define OMX_AENC_MAX                 100
    119 #define NON_TUNNEL                   1
    120 #define TUNNEL                       0
    121 #define IP_PORT_BITMASK                 0x02
    122 #define OP_PORT_BITMASK                 0x01
    123 #define IP_OP_PORT_BITMASK              0x03
    124 
    125 #define OMX_QCELP13_DEFAULT_SF            8000
    126 #define OMX_QCELP13_DEFAULT_CH_CFG        1
    127 #define OMX_QCELP13_DEFAULT_VOL         25
    128 // 14 bytes for input meta data
    129 #define OMX_AENC_SIZEOF_META_BUF     (OMX_CORE_INPUT_BUFFER_SIZE+14)
    130 
    131 #define TRUE 1
    132 #define FALSE 0
    133 
    134 #define NUMOFFRAMES                   1
    135 #define MAXFRAMELENGTH                35
    136 #define OMX_QCELP13_OUTPUT_BUFFER_SIZE    ((NUMOFFRAMES * (sizeof(ENC_META_OUT) + MAXFRAMELENGTH) \
    137                         + 1))
    138 
    139 #define OMX_QCELP13_DEFAULT_MINRATE 4
    140 #define OMX_QCELP13_DEFAULT_MAXRATE 4
    141 
    142 class omx_qcelp13_aenc;
    143 
    144 // OMX mo3 audio encoder class
    145 class omx_qcelp13_aenc: public qc_omx_component
    146 {
    147 public:
    148     omx_qcelp13_aenc();                             // constructor
    149     virtual ~omx_qcelp13_aenc();                    // destructor
    150 
    151     OMX_ERRORTYPE allocate_buffer(OMX_HANDLETYPE             hComp,
    152                                   OMX_BUFFERHEADERTYPE **bufferHdr,
    153                                   OMX_U32                     port,
    154                                   OMX_PTR                  appData,
    155                                   OMX_U32                    bytes);
    156 
    157 
    158     OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
    159 
    160     OMX_ERRORTYPE component_init(OMX_STRING role);
    161 
    162     OMX_ERRORTYPE component_role_enum(OMX_HANDLETYPE hComp,
    163                                       OMX_U8         *role,
    164                                       OMX_U32        index);
    165 
    166     OMX_ERRORTYPE component_tunnel_request(OMX_HANDLETYPE             hComp,
    167                                            OMX_U32                     port,
    168                                            OMX_HANDLETYPE     peerComponent,
    169                                            OMX_U32                 peerPort,
    170                                            OMX_TUNNELSETUPTYPE *tunnelSetup);
    171 
    172     OMX_ERRORTYPE empty_this_buffer(OMX_HANDLETYPE         hComp,
    173                                     OMX_BUFFERHEADERTYPE *buffer);
    174 
    175 
    176     OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE         hComp,
    177                                           OMX_BUFFERHEADERTYPE *buffer);
    178 
    179 
    180     OMX_ERRORTYPE fill_this_buffer(OMX_HANDLETYPE         hComp,
    181                                    OMX_BUFFERHEADERTYPE *buffer);
    182 
    183 
    184     OMX_ERRORTYPE free_buffer(OMX_HANDLETYPE         hComp,
    185                               OMX_U32                 port,
    186                               OMX_BUFFERHEADERTYPE *buffer);
    187 
    188     OMX_ERRORTYPE get_component_version(OMX_HANDLETYPE              hComp,
    189                                         OMX_STRING          componentName,
    190                                         OMX_VERSIONTYPE *componentVersion,
    191                                         OMX_VERSIONTYPE *     specVersion,
    192                                         OMX_UUIDTYPE       *componentUUID);
    193 
    194     OMX_ERRORTYPE get_config(OMX_HANDLETYPE      hComp,
    195                              OMX_INDEXTYPE configIndex,
    196                              OMX_PTR        configData);
    197 
    198     OMX_ERRORTYPE get_extension_index(OMX_HANDLETYPE     hComp,
    199                                       OMX_STRING     paramName,
    200                                       OMX_INDEXTYPE *indexType);
    201 
    202     OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
    203                                 OMX_INDEXTYPE paramIndex,
    204                                 OMX_PTR paramData);
    205 
    206     OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
    207                             OMX_STATETYPE *state);
    208 
    209     static void process_in_port_msg(void          *client_data,
    210                                     unsigned char id);
    211 
    212     static void process_out_port_msg(void          *client_data,
    213                                      unsigned char id);
    214 
    215     static void process_command_msg(void          *client_data,
    216                                     unsigned char id);
    217 
    218     static void process_event_cb(void          *client_data,
    219                                    unsigned char id);
    220 
    221 
    222     OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE hComp,
    223                                 OMX_CALLBACKTYPE *callbacks,
    224                                 OMX_PTR appData);
    225 
    226     OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
    227                              OMX_INDEXTYPE configIndex,
    228                              OMX_PTR configData);
    229 
    230     OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
    231                                 OMX_INDEXTYPE paramIndex,
    232                                 OMX_PTR paramData);
    233 
    234     OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE             hComp,
    235                              OMX_BUFFERHEADERTYPE **bufferHdr,
    236                              OMX_U32                     port,
    237                              OMX_PTR                  appData,
    238                              OMX_U32                    bytes,
    239                              OMX_U8                  *buffer);
    240 
    241     OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE             hComp,
    242                                 OMX_BUFFERHEADERTYPE **bufferHdr,
    243                                 OMX_U32                     port,
    244                                 OMX_PTR                  appData,
    245                                 void *                  eglImage);
    246 
    247     bool post_command(unsigned int p1, unsigned int p2,
    248         unsigned char id);
    249 
    250     // Deferred callback identifiers
    251     enum
    252     {
    253         //Event Callbacks from the component thread context
    254         OMX_COMPONENT_GENERATE_EVENT       = 0x1,
    255         //Buffer Done callbacks from component thread context
    256         OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
    257         OMX_COMPONENT_GENERATE_ETB         = 0x3,
    258         //Command
    259         OMX_COMPONENT_GENERATE_COMMAND     = 0x4,
    260         OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x05,
    261         OMX_COMPONENT_GENERATE_FTB         = 0x06,
    262         OMX_COMPONENT_GENERATE_EOS         = 0x07,
    263         OMX_COMPONENT_PORTSETTINGS_CHANGED = 0x08,
    264         OMX_COMPONENT_SUSPEND              = 0x09,
    265         OMX_COMPONENT_RESUME               = 0x0a
    266     };
    267 private:
    268 
    269     ///////////////////////////////////////////////////////////
    270     // Type definitions
    271     ///////////////////////////////////////////////////////////
    272     // Bit Positions
    273     enum flags_bit_positions
    274     {
    275         // Defer transition to IDLE
    276         OMX_COMPONENT_IDLE_PENDING            =0x1,
    277         // Defer transition to LOADING
    278         OMX_COMPONENT_LOADING_PENDING         =0x2,
    279 
    280         OMX_COMPONENT_MUTED                   =0x3,
    281 
    282         // Defer transition to Enable
    283         OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x4,
    284         // Defer transition to Enable
    285         OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x5,
    286         // Defer transition to Disable
    287         OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x6,
    288         // Defer transition to Disable
    289         OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x7
    290     };
    291 
    292 
    293     typedef Map<OMX_BUFFERHEADERTYPE*, OMX_BUFFERHEADERTYPE*>
    294     input_buffer_map;
    295 
    296     typedef Map<OMX_BUFFERHEADERTYPE*, OMX_BUFFERHEADERTYPE*>
    297     output_buffer_map;
    298 
    299     enum port_indexes
    300     {
    301         OMX_CORE_INPUT_PORT_INDEX        =0,
    302         OMX_CORE_OUTPUT_PORT_INDEX       =1
    303     };
    304 
    305     struct omx_event
    306     {
    307         unsigned long param1;
    308         unsigned long param2;
    309         unsigned char id;
    310     };
    311 
    312     struct omx_cmd_queue
    313     {
    314         omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
    315         unsigned m_read;
    316         unsigned m_write;
    317         unsigned m_size;
    318 
    319         omx_cmd_queue();
    320         ~omx_cmd_queue();
    321         bool insert_entry(unsigned long p1, unsigned long p2, unsigned char id);
    322         bool pop_entry(unsigned long *p1,unsigned long *p2, unsigned char *id);
    323         bool get_msg_id(unsigned char *id);
    324         bool get_msg_with_id(unsigned *p1,unsigned *p2, unsigned id);
    325     };
    326 
    327     typedef struct TIMESTAMP
    328     {
    329         unsigned int LowPart;
    330         unsigned int HighPart;
    331     }__attribute__((packed)) TIMESTAMP;
    332 
    333     typedef struct metadata_input
    334     {
    335         unsigned short offsetVal;
    336         TIMESTAMP      nTimeStamp;
    337         unsigned int   nFlags;
    338     }__attribute__((packed)) META_IN;
    339 
    340     typedef struct enc_meta_out
    341     {
    342         unsigned int offset_to_frame;
    343         unsigned int frame_size;
    344         unsigned int encoded_pcm_samples;
    345         unsigned int msw_ts;
    346         unsigned int lsw_ts;
    347         unsigned int nflags;
    348     } __attribute__ ((packed))ENC_META_OUT;
    349 
    350     typedef struct
    351     {
    352         OMX_U32 tot_in_buf_len;
    353         OMX_U32 tot_out_buf_len;
    354         OMX_TICKS tot_pb_time;
    355         OMX_U32 fbd_cnt;
    356         OMX_U32 ftb_cnt;
    357         OMX_U32 etb_cnt;
    358         OMX_U32 ebd_cnt;
    359     }QCELP13_PB_STATS;
    360 
    361     ///////////////////////////////////////////////////////////
    362     // Member variables
    363     ///////////////////////////////////////////////////////////
    364     OMX_U8                         *m_tmp_meta_buf;
    365     OMX_U8                         *m_tmp_out_meta_buf;
    366     OMX_U8                         m_flush_cnt ;
    367     OMX_U8                         m_comp_deinit;
    368 
    369     // the below var doesnt hold good if combo of use and alloc bufs are used
    370     OMX_S32                        m_volume;//Unit to be determined
    371     OMX_PTR                        m_app_data;// Application data
    372     int                            nNumInputBuf;
    373     int                            nNumOutputBuf;
    374     int                            m_drv_fd;   // Kernel device node file handle
    375     bool                           bFlushinprogress;
    376     bool                           is_in_th_sleep;
    377     bool                           is_out_th_sleep;
    378     unsigned int                   m_flags;      //encapsulate the waiting states.
    379     OMX_TICKS                      nTimestamp;
    380     unsigned int                   pcm_input; //tunnel or non-tunnel
    381     unsigned int                   m_inp_act_buf_count;    // Num of Input Buffers
    382     unsigned int                   m_out_act_buf_count;    // Numb of Output Buffers
    383     unsigned int                   m_inp_current_buf_count;    // Num of Input Buffers
    384     unsigned int                   m_out_current_buf_count;    // Numb of Output Buffers
    385     unsigned int                   output_buffer_size;
    386     unsigned int                   input_buffer_size;
    387     unsigned short                 m_session_id;
    388     // store I/P PORT state
    389     OMX_BOOL                       m_inp_bEnabled;
    390     // store O/P PORT state
    391     OMX_BOOL                       m_out_bEnabled;
    392     //Input port Populated
    393     OMX_BOOL                       m_inp_bPopulated;
    394     //Output port Populated
    395     OMX_BOOL                       m_out_bPopulated;
    396     sem_t                          sem_States;
    397     sem_t                          sem_read_msg;
    398     sem_t                          sem_write_msg;
    399 
    400     volatile int                   m_is_event_done;
    401     volatile int                   m_is_in_th_sleep;
    402     volatile int                   m_is_out_th_sleep;
    403     input_buffer_map               m_input_buf_hdrs;
    404     output_buffer_map              m_output_buf_hdrs;
    405     omx_cmd_queue                  m_input_q;
    406     omx_cmd_queue                  m_input_ctrl_cmd_q;
    407     omx_cmd_queue                  m_input_ctrl_ebd_q;
    408     omx_cmd_queue                  m_command_q;
    409     omx_cmd_queue                  m_output_q;
    410     omx_cmd_queue                  m_output_ctrl_cmd_q;
    411     omx_cmd_queue                  m_output_ctrl_fbd_q;
    412     pthread_mutexattr_t            m_outputlock_attr;
    413     pthread_mutexattr_t            m_commandlock_attr;
    414     pthread_mutexattr_t            m_lock_attr;
    415     pthread_mutexattr_t            m_state_attr;
    416     pthread_mutexattr_t            m_flush_attr;
    417     pthread_mutexattr_t            m_in_th_attr_1;
    418     pthread_mutexattr_t            m_out_th_attr_1;
    419     pthread_mutexattr_t            m_event_attr;
    420     pthread_mutexattr_t            m_in_th_attr;
    421     pthread_mutexattr_t            m_out_th_attr;
    422     pthread_mutexattr_t            out_buf_count_lock_attr;
    423     pthread_mutexattr_t            in_buf_count_lock_attr;
    424     pthread_cond_t                 cond;
    425     pthread_cond_t                 in_cond;
    426     pthread_cond_t                 out_cond;
    427     pthread_mutex_t                m_lock;
    428     pthread_mutex_t                m_commandlock;
    429     pthread_mutex_t                m_outputlock;
    430     // Mutexes for state change
    431     pthread_mutex_t                m_state_lock;
    432     // Mutexes for  flush acks from input and output threads
    433     pthread_mutex_t                m_flush_lock;
    434     pthread_mutex_t                m_event_lock;
    435     pthread_mutex_t                m_in_th_lock;
    436     pthread_mutex_t                m_out_th_lock;
    437     pthread_mutex_t                m_in_th_lock_1;
    438     pthread_mutex_t                m_out_th_lock_1;
    439     pthread_mutex_t                out_buf_count_lock;
    440     pthread_mutex_t                in_buf_count_lock;
    441 
    442     OMX_STATETYPE                  m_state;      // OMX State
    443     OMX_STATETYPE                  nState;
    444     OMX_CALLBACKTYPE               m_cb;         // Application callbacks
    445     QCELP13_PB_STATS                  m_qcelp13_pb_stats;
    446     struct qcelp13_ipc_info           *m_ipc_to_in_th;    // for input thread
    447     struct qcelp13_ipc_info           *m_ipc_to_out_th;    // for output thread
    448     struct qcelp13_ipc_info           *m_ipc_to_cmd_th;    // for command thread
    449     struct qcelp13_ipc_info          *m_ipc_to_event_th;    //for txco event thread
    450     OMX_PRIORITYMGMTTYPE           m_priority_mgm ;
    451     OMX_AUDIO_PARAM_QCELP13TYPE m_qcelp13_param; // Cache QCELP13 encoder parameter
    452     OMX_AUDIO_PARAM_PCMMODETYPE    m_pcm_param;  // Cache pcm  parameter
    453     OMX_PARAM_COMPONENTROLETYPE    component_Role;
    454     OMX_PARAM_BUFFERSUPPLIERTYPE   m_buffer_supplier;
    455 
    456     ///////////////////////////////////////////////////////////
    457     // Private methods
    458     ///////////////////////////////////////////////////////////
    459     OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
    460                                          OMX_BUFFERHEADERTYPE **bufferHdr,
    461                                          OMX_U32 port,OMX_PTR appData,
    462                                          OMX_U32              bytes);
    463 
    464     OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
    465                                         OMX_BUFFERHEADERTYPE **bufferHdr,
    466                                         OMX_U32              port,
    467                                         OMX_PTR              appData,
    468                                         OMX_U32              bytes);
    469 
    470     OMX_ERRORTYPE use_input_buffer(OMX_IN OMX_HANDLETYPE          hComp,
    471                                    OMX_INOUT OMX_BUFFERHEADERTYPE **bufHdr,
    472                                    OMX_IN OMX_U32                 port,
    473                                    OMX_IN OMX_PTR                 appData,
    474                                    OMX_IN OMX_U32                 bytes,
    475                                    OMX_IN OMX_U8*                 buffer);
    476 
    477     OMX_ERRORTYPE use_output_buffer(OMX_IN OMX_HANDLETYPE          hComp,
    478                                     OMX_INOUT OMX_BUFFERHEADERTYPE **bufHdr,
    479                                     OMX_IN OMX_U32                 port,
    480                                     OMX_IN OMX_PTR                 appData,
    481                                     OMX_IN OMX_U32                 bytes,
    482                                     OMX_IN OMX_U8*                 buffer);
    483 
    484     OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
    485                                          OMX_BUFFERHEADERTYPE *buffer);
    486 
    487     OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
    488                                      OMX_COMMANDTYPE cmd,
    489                                      OMX_U32         param1,
    490                                      OMX_PTR         cmdData);
    491 
    492     OMX_ERRORTYPE send_command(OMX_HANDLETYPE hComp,
    493                                OMX_COMMANDTYPE  cmd,
    494                                OMX_U32       param1,
    495                                OMX_PTR      cmdData);
    496 
    497     bool allocate_done(void);
    498 
    499     bool release_done(OMX_U32         param1);
    500 
    501     bool execute_omx_flush(OMX_IN OMX_U32 param1, bool cmd_cmpl=true);
    502 
    503     bool execute_input_omx_flush(void);
    504 
    505     bool execute_output_omx_flush(void);
    506 
    507     bool search_input_bufhdr(OMX_BUFFERHEADERTYPE *buffer);
    508 
    509     bool search_output_bufhdr(OMX_BUFFERHEADERTYPE *buffer);
    510 
    511     bool post_input(unsigned long p1, unsigned long p2,
    512                     unsigned char id);
    513 
    514     bool post_output(unsigned long p1, unsigned long p2,
    515                      unsigned char id);
    516 
    517     void process_events(omx_qcelp13_aenc *client_data);
    518 
    519     void buffer_done_cb(OMX_BUFFERHEADERTYPE *bufHdr);
    520 
    521     void frame_done_cb(OMX_BUFFERHEADERTYPE *bufHdr);
    522 
    523     void wait_for_event();
    524 
    525     void event_complete();
    526 
    527     void in_th_goto_sleep();
    528 
    529     void in_th_wakeup();
    530 
    531     void out_th_goto_sleep();
    532 
    533     void out_th_wakeup();
    534 
    535     void flush_ack();
    536     void deinit_encoder();
    537 
    538 };
    539 #endif
    540