diff options
| author | liubolun <bolun.liu@intel.com> | 2014-02-26 15:47:11 +0800 |
|---|---|---|
| committer | Patrick Tjin <pattjin@google.com> | 2014-07-21 22:02:57 -0700 |
| commit | 94f43328fd68ede85ccf631ca0fa9c942d18f5ee (patch) | |
| tree | b3e82905266ac342eb96cebbffe87aa9ad289eda /videocodec/OMXVideoEncoderVP8.cpp | |
| parent | 3bad5763bd1376fffb049c68cd48637df83af390 (diff) | |
| download | android_hardware_intel_common_omx-components-94f43328fd68ede85ccf631ca0fa9c942d18f5ee.tar.gz android_hardware_intel_common_omx-components-94f43328fd68ede85ccf631ca0fa9c942d18f5ee.tar.bz2 android_hardware_intel_common_omx-components-94f43328fd68ede85ccf631ca0fa9c942d18f5ee.zip | |
Implement OMX Component for VP8 temporal layer encode
BZ: 165682
Implement setTemporalLayerNumber and setTemporalLayerBitrateFrame interface
in OMX Component for VP8.
Remove duplicated return.
Change-Id: I819510feb45024578860fe1c6527d3fe66125c18
Signed-off-by: liubolun <bolun.liu@intel.com>
Diffstat (limited to 'videocodec/OMXVideoEncoderVP8.cpp')
| -rw-r--r-- | videocodec/OMXVideoEncoderVP8.cpp | 68 |
1 files changed, 68 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); |
