/* ------------------------------------------------------------------
 * Copyright (C) 2008 PacketVideo
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 * -------------------------------------------------------------------
 */
#ifndef AAC_DEC_H_INCLUDED
#define AAC_DEC_H_INCLUDED

#ifndef OMX_Component_h
#include "omx_component.h"
#endif

#ifndef OSCL_MEM_H_INCLUDED
#include "oscl_mem.h"
#endif

#ifndef PVMP4AUDIODECODER_API_H
#include "pvmp4audiodecoder_api.h"
#endif

#define AACDEC_PCM_FRAME_SAMPLE_SIZE 1024 // 1024 samples 

class OmxAacDecoder
{
    public:
        OmxAacDecoder();

        OMX_BOOL AacDecInit(OMX_U32 aDesiredChannels);

        void AacDecDeinit();

        Int AacDecodeFrames(OMX_S16* aOutputBuffer,
                            OMX_U32* aOutputLength, OMX_U8** aInBuffer,
                            OMX_U32* aInBufSize, OMX_S32* aIsFirstBuffer,
                            OMX_AUDIO_PARAM_PCMMODETYPE* aAudioPcmParam,
                            OMX_AUDIO_PARAM_AACPROFILETYPE* aAudioAacParam,
                            OMX_S32* aSamplesPerFrame, OMX_BOOL* aResizeFlag);

        void UpdateAACPlusEnabled(OMX_BOOL flag);

        void ResetDecoder(); // for repositioning

        OMX_S32 iAacInitFlag;
        OMX_S32 iInputUsedLength;

    private:

        Int RetrieveDecodedStreamType();

        void*    ipMem;
        tPVMP4AudioDecoderExternal  iExt;
        OMX_U32 iNumOfChannels;
        OMX_U32  iMemReq;

};



#endif	//#ifndef AVC_DEC_H_INCLUDED

