1252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber/*
2252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * Copyright (C) 2012 The Android Open Source Project
3252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber *
4252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * you may not use this file except in compliance with the License.
6252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * You may obtain a copy of the License at
7252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber *
8252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber *
10252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * Unless required by applicable law or agreed to in writing, software
11252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * See the License for the specific language governing permissions and
14252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber * limitations under the License.
15252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber */
16252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
17252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber#ifndef SOFT_AMRNB_ENCODER_H_
18252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
19252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber#define SOFT_AMRNB_ENCODER_H_
20252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
21252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber#include "SimpleSoftOMXComponent.h"
22252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
23252353088a5ebf8508fbc01439ff417805ef1417Andreas Hubernamespace android {
24252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
25252353088a5ebf8508fbc01439ff417805ef1417Andreas Huberstruct SoftAMRNBEncoder : public SimpleSoftOMXComponent {
26252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    SoftAMRNBEncoder(
27252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber            const char *name,
28252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber            const OMX_CALLBACKTYPE *callbacks,
29252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber            OMX_PTR appData,
30252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber            OMX_COMPONENTTYPE **component);
31252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
32252353088a5ebf8508fbc01439ff417805ef1417Andreas Huberprotected:
33252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    virtual ~SoftAMRNBEncoder();
34252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
35252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    virtual OMX_ERRORTYPE internalGetParameter(
36252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
37252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
38252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    virtual OMX_ERRORTYPE internalSetParameter(
39252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
40252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
41252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    virtual void onQueueFilled(OMX_U32 portIndex);
42252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
43252353088a5ebf8508fbc01439ff417805ef1417Andreas Huberprivate:
44252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    enum {
45252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber        kNumBuffers             = 4,
46252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber        kNumSamplesPerFrame     = 160,
47252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    };
48252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
49252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    void *mEncState;
50252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    void *mSidState;
51252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
52252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    OMX_U32 mBitRate;
53252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    int mMode;
54252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
55252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    size_t mInputSize;
56252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    int16_t mInputFrame[kNumSamplesPerFrame];
57252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    int64_t mInputTimeUs;
58252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
59252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    bool mSawInputEOS;
60252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    bool mSignalledError;
61252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
62252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    void initPorts();
63252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    status_t initEncoder();
64252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
65252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    status_t setAudioParams();
66252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
67252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftAMRNBEncoder);
68252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber};
69252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
70252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber}  // namespace android
71252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber
72252353088a5ebf8508fbc01439ff417805ef1417Andreas Huber#endif  // SOFT_AMRNB_ENCODER_H_
73