1/* 2* Copyright (c) 2009-2011 Intel Corporation. All rights reserved. 3* 4* Licensed under the Apache License, Version 2.0 (the "License"); 5* you may not use this file except in compliance with the License. 6* You may obtain a copy of the License at 7* 8* http://www.apache.org/licenses/LICENSE-2.0 9* 10* Unless required by applicable law or agreed to in writing, software 11* distributed under the License is distributed on an "AS IS" BASIS, 12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13* See the License for the specific language governing permissions and 14* limitations under the License. 15*/ 16 17#ifndef __PV_SOFT_MPEG4_ENCODER__ 18#define __PV_SOFT_MPEG4_ENCODER__ 19 20#include <va/va.h> 21#include <va/va_tpi.h> 22#include "VideoEncoderDef.h" 23#include "VideoEncoderInterface.h" 24#include "IntelMetadataBuffer.h" 25 26#include <media/stagefright/MediaBuffer.h> 27#include <media/stagefright/foundation/ABase.h> 28#include "SimpleSoftOMXComponent.h" 29#include "mp4enc_api.h" 30 31class PVSoftMPEG4Encoder : IVideoEncoder { 32 33public: 34 PVSoftMPEG4Encoder(const char *name); 35 virtual ~PVSoftMPEG4Encoder(); 36 37 virtual Encode_Status start(void) {return initEncoder();} 38 virtual void flush(void) { } 39 virtual Encode_Status stop(void) {return releaseEncoder();} 40 virtual Encode_Status encode(VideoEncRawBuffer *inBuffer, uint32_t timeout); 41 42 virtual Encode_Status getOutput(VideoEncOutputBuffer *outBuffer, uint32_t timeout); 43 44 virtual Encode_Status getParameters(VideoParamConfigSet *videoEncParams); 45 virtual Encode_Status setParameters(VideoParamConfigSet *videoEncParams); 46 virtual Encode_Status setConfig(VideoParamConfigSet *videoEncConfig) {return ENCODE_SUCCESS;} 47 virtual Encode_Status getConfig(VideoParamConfigSet *videoEncConfig) {return ENCODE_SUCCESS;} 48 virtual Encode_Status getMaxOutSize(uint32_t *maxSize) {return ENCODE_SUCCESS;} 49 50private: 51 void setDefaultParams(void); 52 VideoParamsCommon mComParams; 53 54 MP4EncodingMode mEncodeMode; 55 int32_t mVideoWidth; 56 int32_t mVideoHeight; 57 int32_t mVideoFrameRate; 58 int32_t mVideoBitRate; 59 int32_t mVideoColorFormat; 60 bool mStoreMetaDataInBuffers; 61 int32_t mIDRFrameRefreshIntervalInSec; 62 63 int64_t mNumInputFrames; 64 bool mStarted; 65 bool mSawInputEOS; 66 bool mSignalledError; 67 int64_t mCurTimestampUs; 68 int64_t mLastTimestampUs; 69 70 tagvideoEncControls *mHandle; 71 tagvideoEncOptions *mEncParams; 72 uint8_t *mInputFrameData; 73 uint8_t *mTrimedInputData; 74 uint8_t mVolHeader[256]; 75 int32_t mVolHeaderLength; 76 77 Encode_Status initEncParams(); 78 Encode_Status initEncoder(); 79 Encode_Status releaseEncoder(); 80 81 DISALLOW_EVIL_CONSTRUCTORS(PVSoftMPEG4Encoder); 82}; 83 84#endif 85