/* * Copyright (c) 2009-2011 Intel Corporation. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __PV_SOFT_MPEG4_ENCODER__ #define __PV_SOFT_MPEG4_ENCODER__ #include <va/va.h> #include <va/va_tpi.h> #include "VideoEncoderDef.h" #include "VideoEncoderInterface.h" #include "IntelMetadataBuffer.h" #include <media/stagefright/MediaBuffer.h> #include <media/stagefright/foundation/ABase.h> #include "SimpleSoftOMXComponent.h" #include "mp4enc_api.h" class PVSoftMPEG4Encoder : IVideoEncoder { public: PVSoftMPEG4Encoder(const char *name); virtual ~PVSoftMPEG4Encoder(); virtual Encode_Status start(void) {return initEncoder();} virtual void flush(void) { } virtual Encode_Status stop(void) {return releaseEncoder();} virtual Encode_Status encode(VideoEncRawBuffer *inBuffer, uint32_t timeout); virtual Encode_Status getOutput(VideoEncOutputBuffer *outBuffer, uint32_t timeout); virtual Encode_Status getParameters(VideoParamConfigSet *videoEncParams); virtual Encode_Status setParameters(VideoParamConfigSet *videoEncParams); virtual Encode_Status setConfig(VideoParamConfigSet *videoEncConfig) {return ENCODE_SUCCESS;} virtual Encode_Status getConfig(VideoParamConfigSet *videoEncConfig) {return ENCODE_SUCCESS;} virtual Encode_Status getMaxOutSize(uint32_t *maxSize) {return ENCODE_SUCCESS;} private: void setDefaultParams(void); VideoParamsCommon mComParams; MP4EncodingMode mEncodeMode; int32_t mVideoWidth; int32_t mVideoHeight; int32_t mVideoFrameRate; int32_t mVideoBitRate; int32_t mVideoColorFormat; bool mStoreMetaDataInBuffers; int32_t mIDRFrameRefreshIntervalInSec; int64_t mNumInputFrames; bool mStarted; bool mSawInputEOS; bool mSignalledError; int64_t mCurTimestampUs; int64_t mLastTimestampUs; tagvideoEncControls *mHandle; tagvideoEncOptions *mEncParams; uint8_t *mInputFrameData; uint8_t *mTrimedInputData; uint8_t mVolHeader[256]; int32_t mVolHeaderLength; Encode_Status initEncParams(); Encode_Status initEncoder(); Encode_Status releaseEncoder(); DISALLOW_EVIL_CONSTRUCTORS(PVSoftMPEG4Encoder); }; #endif