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