SoftAACEncoder2.h revision aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5b
1aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke/*
2aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * Copyright (C) 2012 The Android Open Source Project
3aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke *
4aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * Licensed under the Apache License, Version 2.0 (the "License");
5aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * you may not use this file except in compliance with the License.
6aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * You may obtain a copy of the License at
7aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke *
8aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke *      http://www.apache.org/licenses/LICENSE-2.0
9aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke *
10aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * Unless required by applicable law or agreed to in writing, software
11aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * distributed under the License is distributed on an "AS IS" BASIS,
12aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * See the License for the specific language governing permissions and
14aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * limitations under the License.
15aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke */
16aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
17aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#ifndef SOFT_AAC_ENCODER_2_H_
18aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
19aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#define SOFT_AAC_ENCODER_2_H_
20aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
21aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#include "SimpleSoftOMXComponent.h"
22aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
23aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#include "aacenc_lib.h"
24aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
25aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkenamespace android {
26aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
27aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkestruct SoftAACEncoder2 : public SimpleSoftOMXComponent {
28aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    SoftAACEncoder2(
29aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke            const char *name,
30aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke            const OMX_CALLBACKTYPE *callbacks,
31aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke            OMX_PTR appData,
32aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke            OMX_COMPONENTTYPE **component);
33aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
34aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkeprotected:
35aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    virtual ~SoftAACEncoder2();
36aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
37aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    virtual OMX_ERRORTYPE internalGetParameter(
38aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke            OMX_INDEXTYPE index, OMX_PTR params);
39aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
40aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    virtual OMX_ERRORTYPE internalSetParameter(
41aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke            OMX_INDEXTYPE index, const OMX_PTR params);
42aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
43aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    virtual void onQueueFilled(OMX_U32 portIndex);
44aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
45aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkeprivate:
46aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    enum {
47aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke        kNumBuffers             = 4,
48aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke        kNumSamplesPerFrame     = 1024
49aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    };
50aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
51aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    HANDLE_AACENCODER mAACEncoder;
52aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
53aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    OMX_U32 mNumChannels;
54aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    OMX_U32 mSampleRate;
55aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    OMX_U32 mBitRate;
56aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    OMX_U32 mAACProfile;
57aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
58aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    bool mSentCodecSpecificData;
59aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    size_t mInputSize;
60aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    int16_t *mInputFrame;
61aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    int64_t mInputTimeUs;
62aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
63aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    bool mSawInputEOS;
64aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
65aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    bool mSignalledError;
66aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
67aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    void initPorts();
68aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    status_t initEncoder();
69aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
70aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    status_t setAudioParams();
71aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
72aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke    DISALLOW_EVIL_CONSTRUCTORS(SoftAACEncoder2);
73aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke};
74aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
75aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke}  // namespace android
76aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke
77aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#endif  // SOFT_AAC_ENCODER_2_H_
78