12b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber/*
22b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * Copyright (C) 2012 The Android Open Source Project
32b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber *
42b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
52b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * you may not use this file except in compliance with the License.
62b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * You may obtain a copy of the License at
72b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber *
82b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
92b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber *
102b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * Unless required by applicable law or agreed to in writing, software
112b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
122b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * See the License for the specific language governing permissions and
142b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * limitations under the License.
152b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber */
162b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
172b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#ifndef SOFT_AAC_ENCODER_H_
182b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
192b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#define SOFT_AAC_ENCODER_H_
202b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
212b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#include "SimpleSoftOMXComponent.h"
222b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
232b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberstruct VO_AUDIO_CODECAPI;
242b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberstruct VO_MEM_OPERATOR;
252b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
262b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Hubernamespace android {
272b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
282b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberstruct SoftAACEncoder : public SimpleSoftOMXComponent {
292b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    SoftAACEncoder(
302b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber            const char *name,
312b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber            const OMX_CALLBACKTYPE *callbacks,
322b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber            OMX_PTR appData,
332b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber            OMX_COMPONENTTYPE **component);
342b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
352b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberprotected:
362b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    virtual ~SoftAACEncoder();
372b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
382b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    virtual OMX_ERRORTYPE internalGetParameter(
392b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
402b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
412b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    virtual OMX_ERRORTYPE internalSetParameter(
422b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
432b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
442b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    virtual void onQueueFilled(OMX_U32 portIndex);
452b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
462b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberprivate:
472b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    enum {
482b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber        kNumBuffers             = 4,
492b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber        kNumSamplesPerFrame     = 1024,
502b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    };
512b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
522b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    void *mEncoderHandle;
532b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    VO_AUDIO_CODECAPI *mApiHandle;
542b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    VO_MEM_OPERATOR  *mMemOperator;
552b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
562b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    OMX_U32 mNumChannels;
572b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    OMX_U32 mSampleRate;
582b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    OMX_U32 mBitRate;
592b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
602b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    bool mSentCodecSpecificData;
612b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    size_t mInputSize;
622b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    int16_t *mInputFrame;
632b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    int64_t mInputTimeUs;
642b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
652b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    bool mSawInputEOS;
662b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
672b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    uint8_t mAudioSpecificConfigData[2];
682b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
692b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    bool mSignalledError;
702b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
712b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    void initPorts();
722b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    status_t initEncoder();
732b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
742b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    status_t setAudioSpecificConfigData();
752b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    status_t setAudioParams();
762b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
772b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftAACEncoder);
782b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber};
792b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
802b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber}  // namespace android
812b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber
822b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#endif  // SOFT_AAC_ENCODER_H_
83