13defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo/* 23defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * Copyright 2018 The Android Open Source Project 33defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * 43defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * Licensed under the Apache License, Version 2.0 (the "License"); 53defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * you may not use this file except in compliance with the License. 63defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * You may obtain a copy of the License at 73defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * 83defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * http://www.apache.org/licenses/LICENSE-2.0 93defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * 103defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * Unless required by applicable law or agreed to in writing, software 113defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * distributed under the License is distributed on an "AS IS" BASIS, 123defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * See the License for the specific language governing permissions and 143defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo * limitations under the License. 153defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo */ 163defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 173defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo#ifndef C2_SOFT_MPEG4_ENC_H__ 183defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo#define C2_SOFT_MPEG4_ENC_H__ 193defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 205d68ad843c75e22a6163a9fe4941e8e861a1016eLajos Molnar#include <map> 215d68ad843c75e22a6163a9fe4941e8e861a1016eLajos Molnar 225d68ad843c75e22a6163a9fe4941e8e861a1016eLajos Molnar#include <Codec2BufferUtils.h> 233defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo#include <SimpleC2Component.h> 243defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 253defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo#include "mp4enc_api.h" 263defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 273defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoonamespace android { 283defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 293defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoostruct C2SoftMpeg4Enc : public SimpleC2Component { 30803dbbc0617722099c3aebd4e6fd3e92adfdb659Manisha Jajoo class IntfImpl; 31803dbbc0617722099c3aebd4e6fd3e92adfdb659Manisha Jajoo 32803dbbc0617722099c3aebd4e6fd3e92adfdb659Manisha Jajoo C2SoftMpeg4Enc(const char* name, c2_node_id_t id, 33803dbbc0617722099c3aebd4e6fd3e92adfdb659Manisha Jajoo const std::shared_ptr<IntfImpl>& intfImpl); 343defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 353defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo // From SimpleC2Component 363defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo c2_status_t onInit() override; 373defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo c2_status_t onStop() override; 383defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo void onReset() override; 393defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo void onRelease() override; 403defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo c2_status_t onFlush_sm() override; 413defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo void process( 423defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo const std::unique_ptr<C2Work> &work, 433defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo const std::shared_ptr<C2BlockPool> &pool) override; 443defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo c2_status_t drain( 453defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo uint32_t drainMode, 463defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo const std::shared_ptr<C2BlockPool> &pool) override; 473defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 483defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajooprotected: 49803dbbc0617722099c3aebd4e6fd3e92adfdb659Manisha Jajoo 503defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo virtual ~C2SoftMpeg4Enc(); 513defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 523defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajooprivate: 53803dbbc0617722099c3aebd4e6fd3e92adfdb659Manisha Jajoo std::shared_ptr<IntfImpl> mIntf; 54803dbbc0617722099c3aebd4e6fd3e92adfdb659Manisha Jajoo 553defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo tagvideoEncControls *mHandle; 563defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo tagvideoEncOptions *mEncParams; 573defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 583defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo bool mStarted; 593defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo bool mSignalledOutputEos; 603defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo bool mSignalledError; 613defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 623defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo uint32_t mOutBufferSize; 633defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo // 1: all I-frames, <0: infinite 643defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo int32_t mKeyFrameInterval; 653defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo int64_t mNumInputFrames; 663defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo MP4EncodingMode mEncodeMode; 673defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 685d68ad843c75e22a6163a9fe4941e8e861a1016eLajos Molnar MemoryBlockPool mConversionBuffers; 695d68ad843c75e22a6163a9fe4941e8e861a1016eLajos Molnar std::map<void *, MemoryBlock> mConversionBuffersInUse; 703defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 713defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo c2_status_t initEncParams(); 723defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo c2_status_t initEncoder(); 733defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 74d087ee640c4664516a25cec687a76b31bb62b2e1Lajos Molnar C2_DO_NOT_COPY(C2SoftMpeg4Enc); 753defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo}; 763defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 773defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo} // namespace android 783defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo 793defb2bce96f2eb073710e09f16bd2cfaf75bea6Manisha Jajoo#endif // C2_SOFT_MPEG4_ENC_H__ 80