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_AAC_ENC_H_
1872dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#define ANDROID_C2_SOFT_AAC_ENC_H_
19033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
20033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim#include <SimpleC2Component.h>
21033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
22033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim#include "aacenc_lib.h"
23033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
24033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimnamespace android {
25033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
26033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimclass C2SoftAacEnc : public SimpleC2Component {
27033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimpublic:
289fca24013957d2dfe99b4291f9f9297f720c7fa8Wonsik Kim    class IntfImpl;
299fca24013957d2dfe99b4291f9f9297f720c7fa8Wonsik Kim
309fca24013957d2dfe99b4291f9f9297f720c7fa8Wonsik Kim    C2SoftAacEnc(const char *name, c2_node_id_t id, const std::shared_ptr<IntfImpl> &intfImpl);
31033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    virtual ~C2SoftAacEnc();
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:
479fca24013957d2dfe99b4291f9f9297f720c7fa8Wonsik Kim    std::shared_ptr<IntfImpl> mIntf;
489fca24013957d2dfe99b4291f9f9297f720c7fa8Wonsik Kim
49033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    HANDLE_AACENCODER mAACEncoder;
50033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
51033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    int32_t mSBRMode;
52033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    int32_t mSBRRatio;
53033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    AUDIO_OBJECT_TYPE mAACProfile;
54033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    UINT mNumBytesPerInputFrame;
55033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    UINT mOutBufferSize;
56033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
57033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    bool mSentCodecSpecificData;
58033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    size_t mInputSize;
59033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    c2_cntr64_t mInputTimeUs;
60033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
61033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    bool mSignalledError;
62033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
63033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    status_t initEncoder();
64033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
65033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim    status_t setAudioParams();
66033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
67d087ee640c4664516a25cec687a76b31bb62b2e1Lajos Molnar    C2_DO_NOT_COPY(C2SoftAacEnc);
68033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim};
69033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
70033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim}  // namespace android
71033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim
7272dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#endif  // ANDROID_C2_SOFT_AAC_ENC_H_
73