183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber/*
283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * Copyright (C) 2012 The Android Open Source Project
383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber *
483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * you may not use this file except in compliance with the License.
683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * You may obtain a copy of the License at
783f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber *
883f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
983f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber *
1083f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * Unless required by applicable law or agreed to in writing, software
1183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
1283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * See the License for the specific language governing permissions and
1483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber * limitations under the License.
1583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber */
1683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
1783f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber#ifndef SOFT_AMRWB_ENCODER_H_
1883f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
1983f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber#define SOFT_AMRWB_ENCODER_H_
2083f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
2183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber#include "SimpleSoftOMXComponent.h"
2283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
2383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber#include "voAMRWB.h"
2483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
2583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huberstruct VO_AUDIO_CODECAPI;
2683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huberstruct VO_MEM_OPERATOR;
2783f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
2883f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Hubernamespace android {
2983f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
3083f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huberstruct SoftAMRWBEncoder : public SimpleSoftOMXComponent {
3183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    SoftAMRWBEncoder(
3283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber            const char *name,
3383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber            const OMX_CALLBACKTYPE *callbacks,
3483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber            OMX_PTR appData,
3583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber            OMX_COMPONENTTYPE **component);
3683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
3783f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huberprotected:
3883f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    virtual ~SoftAMRWBEncoder();
3983f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
4083f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    virtual OMX_ERRORTYPE internalGetParameter(
4183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
4283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
4383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    virtual OMX_ERRORTYPE internalSetParameter(
4483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
4583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
4683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    virtual void onQueueFilled(OMX_U32 portIndex);
4783f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
4883f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huberprivate:
4983f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    enum {
5083f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber        kNumBuffers             = 4,
5183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber        kNumSamplesPerFrame     = 320,
5283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    };
5383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
5483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    void *mEncoderHandle;
5583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    VO_AUDIO_CODECAPI *mApiHandle;
5683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    VO_MEM_OPERATOR *mMemOperator;
5783f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
5883f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    OMX_U32 mBitRate;
5983f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    VOAMRWBMODE mMode;
6083f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
6183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    size_t mInputSize;
6283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    int16_t mInputFrame[kNumSamplesPerFrame];
6383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    int64_t mInputTimeUs;
6483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
6583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    bool mSawInputEOS;
6683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    bool mSignalledError;
6783f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
6883f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    void initPorts();
6983f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    status_t initEncoder();
7083f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
7183f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftAMRWBEncoder);
7283f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber};
7383f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
7483f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber}  // namespace android
7583f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber
7683f70f4472e9b0cacc5d372eddfcef4b02662d10Andreas Huber#endif  // SOFT_AMRWB_ENCODER_H_
77