130 lines
4.7 KiB
C++
130 lines
4.7 KiB
C++
/*
|
|
* 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 OMX_VIDEO_ENCODER_BASE_H_
|
|
#define OMX_VIDEO_ENCODER_BASE_H_
|
|
|
|
#include "OMXComponentCodecBase.h"
|
|
#include <va/va_tpi.h>
|
|
#include <va/va_android.h>
|
|
#include <VideoEncoderHost.h>
|
|
|
|
#include <OMX_VideoExt.h>
|
|
#include <OMX_IndexExt.h>
|
|
|
|
#define LOGV(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__)
|
|
#define LOGI(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__)
|
|
#define LOGW(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__)
|
|
#define LOGD(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__)
|
|
#define LOGE ALOGE
|
|
#define LOGV_IF ALOGV_IF
|
|
|
|
|
|
using android::sp;
|
|
|
|
class OMXVideoEncoderBase : public OMXComponentCodecBase {
|
|
public:
|
|
OMXVideoEncoderBase();
|
|
virtual ~OMXVideoEncoderBase();
|
|
|
|
protected:
|
|
virtual OMX_ERRORTYPE InitInputPort(void);
|
|
virtual OMX_ERRORTYPE InitOutputPort(void);
|
|
virtual OMX_ERRORTYPE InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput);
|
|
virtual OMX_ERRORTYPE InitOutputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionOutput) = 0;
|
|
|
|
virtual OMX_ERRORTYPE ProcessorInit(void);
|
|
virtual OMX_ERRORTYPE ProcessorDeinit(void);
|
|
//virtual OMX_ERRORTYPE ProcessorStart(void);
|
|
virtual OMX_ERRORTYPE ProcessorStop(void);
|
|
//virtual OMX_ERRORTYPE ProcessorPause(void);
|
|
//virtual OMX_ERRORTYPE ProcessorResume(void);
|
|
virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 portIndex);
|
|
virtual OMX_ERRORTYPE ProcessorProcess(
|
|
OMX_BUFFERHEADERTYPE **buffers,
|
|
buffer_retain_t *retains,
|
|
OMX_U32 numberBuffers);
|
|
|
|
virtual OMX_ERRORTYPE BuildHandlerList(void);
|
|
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoPortFormat);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoBitrate);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, IntelPrivateInfo);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ConfigIntelBitrate);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ConfigIntelAIR);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoIntraRefresh);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ConfigVideoFramerate);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ConfigVideoIntraVOPRefresh);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ParamIntelAdaptiveSliceControl);
|
|
//DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoProfileLevelQuerySupported);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, StoreMetaDataInBuffers);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, SyncEncoding);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, PrependSPSPPS);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, TemporalLayer);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ConfigVideoBitrate);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, BlackFramePointer);
|
|
DECLARE_HANDLER(OMXVideoEncoderBase, ConfigAndroidIntraRefresh);
|
|
|
|
protected:
|
|
virtual OMX_ERRORTYPE SetVideoEncoderParam();
|
|
protected:
|
|
OMX_VIDEO_PARAM_BITRATETYPE mParamBitrate;
|
|
OMX_VIDEO_CONFIG_PRI_INFOTYPE mConfigPriInfo;
|
|
OMX_VIDEO_CONFIG_INTEL_BITRATETYPE mConfigIntelBitrate;
|
|
OMX_VIDEO_CONFIG_INTEL_AIR mConfigIntelAir;
|
|
OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE mConfigAndroidIntraRefresh;
|
|
OMX_VIDEO_PARAM_INTRAREFRESHTYPE mParamVideoRefresh;
|
|
OMX_CONFIG_FRAMERATETYPE mConfigFramerate;
|
|
OMX_VIDEO_PARAM_INTEL_ADAPTIVE_SLICE_CONTROL mParamIntelAdaptiveSliceControl;
|
|
OMX_VIDEO_PARAM_PROFILELEVELTYPE mParamProfileLevel;
|
|
OMX_VIDEO_PARAM_INTEL_TEMPORAL_LAYER mTemporalLayer;
|
|
OMX_VIDEO_CONFIG_BITRATETYPE mConfigBitrate;
|
|
|
|
IVideoEncoder *mVideoEncoder;
|
|
VideoParamsCommon *mEncoderParams;
|
|
OMX_U32 mFrameInputCount;
|
|
OMX_U32 mFrameOutputCount;
|
|
OMX_BOOL mFirstFrame;
|
|
OMX_BOOL mFrameRetrieved;
|
|
OMX_BOOL mStoreMetaDataInBuffers;
|
|
OMX_BOOL mSyncEncoding;
|
|
int32_t mOmxLogLevel;
|
|
OMX_PTR mBlackFramePointer;
|
|
|
|
private:
|
|
|
|
enum {
|
|
// OMX_PARAM_PORTDEFINITIONTYPE
|
|
INPORT_MIN_BUFFER_COUNT = 1,
|
|
// FIXME: increate input buffer count to 5
|
|
#ifdef USE_VIDEO_EFFECT
|
|
INPORT_ACTUAL_BUFFER_COUNT = 5,
|
|
#else
|
|
INPORT_ACTUAL_BUFFER_COUNT = 2,
|
|
#endif
|
|
INPORT_BUFFER_SIZE = 1382400,
|
|
|
|
// OMX_PARAM_PORTDEFINITIONTYPE
|
|
OUTPORT_MIN_BUFFER_COUNT = 1,
|
|
OUTPORT_ACTUAL_BUFFER_COUNT = 2,
|
|
OUTPORT_BUFFER_SIZE = 1382400,
|
|
};
|
|
|
|
};
|
|
|
|
#endif /* OMX_VIDEO_ENCODER_BASE_H_ */
|