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 18 19 #ifndef OMX_VIDEO_ENCODER_BASE_H_ 20 #define OMX_VIDEO_ENCODER_BASE_H_ 21 22 #include "OMXComponentCodecBase.h" 23 #include <va/va_tpi.h> 24 #include <va/va_android.h> 25 #include <VideoEncoderHost.h> 26 27 #include <OMX_VideoExt.h> 28 #include <OMX_IndexExt.h> 29 30 #define LOGV(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__) 31 #define LOGI(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__) 32 #define LOGW(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__) 33 #define LOGD(...) ALOGI_IF(mOmxLogLevel, __VA_ARGS__) 34 #define LOGE ALOGE 35 #define LOGV_IF ALOGV_IF 36 37 38 using android::sp; 39 40 class OMXVideoEncoderBase : public OMXComponentCodecBase { 41 public: 42 OMXVideoEncoderBase(); 43 virtual ~OMXVideoEncoderBase(); 44 45 protected: 46 virtual OMX_ERRORTYPE InitInputPort(void); 47 virtual OMX_ERRORTYPE InitOutputPort(void); 48 virtual OMX_ERRORTYPE InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput); 49 virtual OMX_ERRORTYPE InitOutputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionOutput) = 0; 50 51 virtual OMX_ERRORTYPE ProcessorInit(void); 52 virtual OMX_ERRORTYPE ProcessorDeinit(void); 53 //virtual OMX_ERRORTYPE ProcessorStart(void); 54 virtual OMX_ERRORTYPE ProcessorStop(void); 55 //virtual OMX_ERRORTYPE ProcessorPause(void); 56 //virtual OMX_ERRORTYPE ProcessorResume(void); 57 virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 portIndex); 58 virtual OMX_ERRORTYPE ProcessorProcess( 59 OMX_BUFFERHEADERTYPE **buffers, 60 buffer_retain_t *retains, 61 OMX_U32 numberBuffers); 62 63 virtual OMX_ERRORTYPE BuildHandlerList(void); 64 65 DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoPortFormat); 66 DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoBitrate); 67 DECLARE_HANDLER(OMXVideoEncoderBase, IntelPrivateInfo); 68 DECLARE_HANDLER(OMXVideoEncoderBase, ConfigIntelBitrate); 69 DECLARE_HANDLER(OMXVideoEncoderBase, ConfigIntelAIR); 70 DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoIntraRefresh); 71 DECLARE_HANDLER(OMXVideoEncoderBase, ConfigVideoFramerate); 72 DECLARE_HANDLER(OMXVideoEncoderBase, ConfigVideoIntraVOPRefresh); 73 DECLARE_HANDLER(OMXVideoEncoderBase, ParamIntelAdaptiveSliceControl); 74 //DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoProfileLevelQuerySupported); 75 DECLARE_HANDLER(OMXVideoEncoderBase, StoreMetaDataInBuffers); 76 DECLARE_HANDLER(OMXVideoEncoderBase, SyncEncoding); 77 DECLARE_HANDLER(OMXVideoEncoderBase, PrependSPSPPS); 78 DECLARE_HANDLER(OMXVideoEncoderBase, TemporalLayer); 79 DECLARE_HANDLER(OMXVideoEncoderBase, ConfigVideoBitrate); 80 DECLARE_HANDLER(OMXVideoEncoderBase, BlackFramePointer); 81 DECLARE_HANDLER(OMXVideoEncoderBase, ConfigAndroidIntraRefresh); 82 83 protected: 84 virtual OMX_ERRORTYPE SetVideoEncoderParam(); 85 protected: 86 OMX_VIDEO_PARAM_BITRATETYPE mParamBitrate; 87 OMX_VIDEO_CONFIG_PRI_INFOTYPE mConfigPriInfo; 88 OMX_VIDEO_CONFIG_INTEL_BITRATETYPE mConfigIntelBitrate; 89 OMX_VIDEO_CONFIG_INTEL_AIR mConfigIntelAir; 90 OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE mConfigAndroidIntraRefresh; 91 OMX_VIDEO_PARAM_INTRAREFRESHTYPE mParamVideoRefresh; 92 OMX_CONFIG_FRAMERATETYPE mConfigFramerate; 93 OMX_VIDEO_PARAM_INTEL_ADAPTIVE_SLICE_CONTROL mParamIntelAdaptiveSliceControl; 94 OMX_VIDEO_PARAM_PROFILELEVELTYPE mParamProfileLevel; 95 OMX_VIDEO_PARAM_INTEL_TEMPORAL_LAYER mTemporalLayer; 96 OMX_VIDEO_CONFIG_BITRATETYPE mConfigBitrate; 97 98 IVideoEncoder *mVideoEncoder; 99 VideoParamsCommon *mEncoderParams; 100 OMX_U32 mFrameInputCount; 101 OMX_U32 mFrameOutputCount; 102 OMX_BOOL mFirstFrame; 103 OMX_BOOL mFrameRetrieved; 104 OMX_BOOL mStoreMetaDataInBuffers; 105 OMX_BOOL mSyncEncoding; 106 int32_t mOmxLogLevel; 107 OMX_PTR mBlackFramePointer; 108 109 private: 110 111 enum { 112 // OMX_PARAM_PORTDEFINITIONTYPE 113 INPORT_MIN_BUFFER_COUNT = 1, 114 // FIXME: increate input buffer count to 5 115 #ifdef USE_VIDEO_EFFECT 116 INPORT_ACTUAL_BUFFER_COUNT = 5, 117 #else 118 INPORT_ACTUAL_BUFFER_COUNT = 2, 119 #endif 120 INPORT_BUFFER_SIZE = 1382400, 121 122 // OMX_PARAM_PORTDEFINITIONTYPE 123 OUTPORT_MIN_BUFFER_COUNT = 1, 124 OUTPORT_ACTUAL_BUFFER_COUNT = 2, 125 OUTPORT_BUFFER_SIZE = 1382400, 126 }; 127 128 }; 129 130 #endif /* OMX_VIDEO_ENCODER_BASE_H_ */ 131