1033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim/*
2033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * Copyright (C) 2018 The Android Open Source Project
3033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim *
4033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * Licensed under the Apache License, Version 2.0 (the "License");
5033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * you may not use this file except in compliance with the License.
6033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * You may obtain a copy of the License at
7033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim *
8033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim *      http://www.apache.org/licenses/LICENSE-2.0
9033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim *
10033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * Unless required by applicable law or agreed to in writing, software
11033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * distributed under the License is distributed on an "AS IS" BASIS,
12033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * See the License for the specific language governing permissions and
14033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * limitations under the License.
15033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim */
16033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
1772dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#ifndef ANDROID_C2_SOFT_AMR_WB_ENC_H_
1872dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#define ANDROID_C2_SOFT_AMR_WB_ENC_H_
19033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
20033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim#include <SimpleC2Component.h>
21033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
22033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim#include "voAMRWB.h"
23033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
24033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimnamespace android {
25033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
26033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimclass C2SoftAmrWbEnc : public SimpleC2Component {
27033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimpublic:
289bc64b3fb95fd189f9ad1696df6d709eb3ac47ffManisha Jajoo    class IntfImpl;
299bc64b3fb95fd189f9ad1696df6d709eb3ac47ffManisha Jajoo    C2SoftAmrWbEnc(const char* name, c2_node_id_t id,
309bc64b3fb95fd189f9ad1696df6d709eb3ac47ffManisha Jajoo                   const std::shared_ptr<IntfImpl>& intfImpl);
31033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    virtual ~C2SoftAmrWbEnc();
32033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
33033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    // From SimpleC2Component
34033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    c2_status_t onInit() override;
35033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    c2_status_t onStop() override;
36033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    void onReset() override;
37033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    void onRelease() override;
38033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    c2_status_t onFlush_sm() override;
39033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    void process(
40033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim            const std::unique_ptr<C2Work> &work,
41033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim            const std::shared_ptr<C2BlockPool> &pool) override;
42033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    c2_status_t drain(
43033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim            uint32_t drainMode,
44033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim            const std::shared_ptr<C2BlockPool> &pool) override;
45033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
46033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimprivate:
479bc64b3fb95fd189f9ad1696df6d709eb3ac47ffManisha Jajoo    std::shared_ptr<IntfImpl> mIntf;
48033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    static const int32_t kNumSamplesPerFrame = 320;
49033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    static const int32_t kNumBytesPerInputFrame = kNumSamplesPerFrame * sizeof(int16_t);
50033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
51033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    void *mEncoderHandle;
52033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    VO_AUDIO_CODECAPI *mApiHandle;
53033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    VO_MEM_OPERATOR *mMemOperator;
54033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    VOAMRWBMODE mMode;
55033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    bool mIsFirst;
56033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    bool mSignalledError;
57033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    bool mSignalledOutputEos;
58033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    uint64_t mAnchorTimeStamp;
59033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    uint64_t mProcessedSamples;
60033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    int32_t mFilledLen;
61033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    int16_t mInputFrame[kNumSamplesPerFrame];
62033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
63033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    status_t initEncoder();
64033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    int encodeInput(uint8_t *buffer, uint32_t length);
65033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
66d087ee640c4664516a25cec687a76b31bb62b2e1Lajos Molnar    C2_DO_NOT_COPY(C2SoftAmrWbEnc);
67033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim};
68033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
69033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim}  // namespace android
70033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
7172dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#endif  // ANDROID_C2_SOFT_AMR_WB_ENC_H_
72