diff options
| -rw-r--r-- | videocodec/OMXVideoEncoderVP8.cpp | 68 | ||||
| -rw-r--r-- | videocodec/OMXVideoEncoderVP8.h | 4 |
2 files changed, 72 insertions, 0 deletions
diff --git a/videocodec/OMXVideoEncoderVP8.cpp b/videocodec/OMXVideoEncoderVP8.cpp index 2ae6905..a3724a1 100644 --- a/videocodec/OMXVideoEncoderVP8.cpp +++ b/videocodec/OMXVideoEncoderVP8.cpp @@ -39,6 +39,12 @@ OMX_ERRORTYPE OMXVideoEncoderVP8::InitOutputPortFormatSpecific(OMX_PARAM_PORTDEF paramPortDefinitionOutput->format.video.cMIMEType = (OMX_STRING)VP8_MIME_TYPE; paramPortDefinitionOutput->format.video.eCompressionFormat = OMX_VIDEO_CodingVP8; + // OMX_VIDEO_PARAM_INTEL_NUMBER_OF_TEMPORAL_LAYER + memset(&mNumberOfTemporalLayer, 0, sizeof(mNumberOfTemporalLayer)); + SetTypeHeader(&mNumberOfTemporalLayer, sizeof(mNumberOfTemporalLayer)); + mNumberOfTemporalLayer.nPortIndex = OUTPORT_INDEX; + mNumberOfTemporalLayer.nNumberOfTemporalLayer = 1;//default value is 1 + mParamProfileLevel.eProfile = OMX_VIDEO_VP8ProfileMain; mParamProfileLevel.eLevel = OMX_VIDEO_VP8Level_Version3; return OMX_ErrorNone; @@ -194,6 +200,9 @@ OMX_ERRORTYPE OMXVideoEncoderVP8::BuildHandlerList(void) { AddHandler((OMX_INDEXTYPE)OMX_IndexConfigVideoVp8ReferenceFrame, GetConfigVideoVp8ReferenceFrame, SetConfigVideoVp8ReferenceFrame); AddHandler((OMX_INDEXTYPE)OMX_IndexExtVP8ForceKFrame, GetConfigVp8ForceKFrame, SetConfigVp8ForceKFrame); AddHandler((OMX_INDEXTYPE)OMX_IndexExtVP8MaxFrameSizeRatio, GetConfigVp8MaxFrameSizeRatio, SetConfigVp8MaxFrameSizeRatio); + AddHandler((OMX_INDEXTYPE)OMX_IndexExtVP8NumberOfTemporalLayer, GetTemporalLayerNumber,SetTemporalLayerNumber); + AddHandler((OMX_INDEXTYPE)OMX_IndexExtVP8TemporalLayerBitRateFrameRate, GetConfigTemporalLayerBitrateFramerate,SetConfigTemporalLayerBitrateFramerate); + return OMX_ErrorNone; } @@ -305,4 +314,63 @@ OMX_ERRORTYPE OMXVideoEncoderVP8::SetConfigVp8MaxFrameSizeRatio(OMX_PTR pStructu return OMX_ErrorNone; } +OMX_ERRORTYPE OMXVideoEncoderVP8::GetTemporalLayerNumber(OMX_PTR pStructure) { + OMX_ERRORTYPE ret; + OMX_VIDEO_PARAM_INTEL_VP8_NUMBER_OF_TEMPORAL_LAYER* p = static_cast<OMX_VIDEO_PARAM_INTEL_VP8_NUMBER_OF_TEMPORAL_LAYER*>(pStructure); + + CHECK_TYPE_HEADER(p); + CHECK_PORT_INDEX(p, OUTPORT_INDEX); + memcpy(p, &mNumberOfTemporalLayer, sizeof(*p)); + return OMX_ErrorNone; +} + + +OMX_ERRORTYPE OMXVideoEncoderVP8::SetTemporalLayerNumber(OMX_PTR pStructure) { + OMX_ERRORTYPE ret; + OMX_VIDEO_PARAM_INTEL_VP8_NUMBER_OF_TEMPORAL_LAYER *p = (OMX_VIDEO_PARAM_INTEL_VP8_NUMBER_OF_TEMPORAL_LAYER *)pStructure; + VideoParamsTemporalLayerNumber TemporalLayerNumber; + + CHECK_TYPE_HEADER(p); + CHECK_PORT_INDEX(p, OUTPORT_INDEX); + + LOGE("SetTemporalLayerNumber (enabled = %d)", p->nNumberOfTemporalLayer); + + TemporalLayerNumber.numberOfLayer = p->nNumberOfTemporalLayer; + if (mVideoEncoder->setParameters(&TemporalLayerNumber) != ENCODE_SUCCESS) + return OMX_ErrorNotReady; + + LOGE("SetTemporalLayerNumber success"); + return OMX_ErrorNone; +} + +OMX_ERRORTYPE OMXVideoEncoderVP8::GetConfigTemporalLayerBitrateFramerate(OMX_PTR pStructure) { + + return OMX_ErrorNone; +} + +OMX_ERRORTYPE OMXVideoEncoderVP8::SetConfigTemporalLayerBitrateFramerate(OMX_PTR pStructure) { + OMX_ERRORTYPE ret; + OMX_VIDEO_CONFIG_INTEL_VP8_TEMPORAL_LAYER_BITRATE_FRAMERATE *p = (OMX_VIDEO_CONFIG_INTEL_VP8_TEMPORAL_LAYER_BITRATE_FRAMERATE *)pStructure; + VideoConfigVP8TemporalBitRateFrameRate TemporalLayerBitRateFrameRate; + + CHECK_TYPE_HEADER(p); + CHECK_PORT_INDEX(p, OUTPORT_INDEX); + + LOGD("SetConfigTemporalLayerBitrateFramerate (layerID = %d)", p->nLayerID); + LOGD("SetConfigTemporalLayerBitrateFramerate (nBitrate = %d)", p->nBitrate); + LOGD("SetConfigTemporalLayerBitrateFramerate (nFramerate = %d)", p->nFramerate); + + TemporalLayerBitRateFrameRate.layerID = p->nLayerID; + TemporalLayerBitRateFrameRate.bitRate = p->nBitrate; + TemporalLayerBitRateFrameRate.frameRate = p->nFramerate; + if (mVideoEncoder->setConfig(&TemporalLayerBitRateFrameRate) != ENCODE_SUCCESS) + return OMX_ErrorNotReady; + + LOGD("SetConfigTemporalLayerBitrateFramerate success"); + return OMX_ErrorNone; +} + + + + DECLARE_OMX_COMPONENT("OMX.Intel.VideoEncoder.VP8", "video_encoder.vp8", OMXVideoEncoderVP8); diff --git a/videocodec/OMXVideoEncoderVP8.h b/videocodec/OMXVideoEncoderVP8.h index fbb97df..843ea5f 100644 --- a/videocodec/OMXVideoEncoderVP8.h +++ b/videocodec/OMXVideoEncoderVP8.h @@ -19,6 +19,8 @@ class OMXVideoEncoderVP8 : public OMXVideoEncoderBase { DECLARE_HANDLER(OMXVideoEncoderVP8, ConfigVideoVp8ReferenceFrame); DECLARE_HANDLER(OMXVideoEncoderVP8, ConfigVp8ForceKFrame); DECLARE_HANDLER(OMXVideoEncoderVP8, ConfigVp8MaxFrameSizeRatio); + DECLARE_HANDLER(OMXVideoEncoderVP8, TemporalLayerNumber); + DECLARE_HANDLER(OMXVideoEncoderVP8, ConfigTemporalLayerBitrateFramerate); private: enum { OUTPORT_MIN_BUFFER_COUNT = 1, @@ -28,6 +30,8 @@ class OMXVideoEncoderVP8 : public OMXVideoEncoderBase { OMX_VIDEO_PARAM_VP8TYPE mParamVp8; OMX_VIDEO_VP8REFERENCEFRAMETYPE mConfigVideoVp8ReferenceFrame; + OMX_VIDEO_PARAM_INTEL_VP8_NUMBER_OF_TEMPORAL_LAYER mNumberOfTemporalLayer; + OMX_VIDEO_CONFIG_INTEL_VP8_TEMPORAL_LAYER_BITRATE_FRAMERATE mTemporalLayerBitrateFramerate; }; #endif /* OMX_VIDEO_ENCODER_VP8_H */ |
