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