aboutsummaryrefslogtreecommitdiffstats
path: root/videocodec/OMXVideoEncoderVP8.cpp
diff options
context:
space:
mode:
authorliubolun <bolun.liu@intel.com>2014-02-26 15:47:11 +0800
committerPatrick Tjin <pattjin@google.com>2014-07-21 22:02:57 -0700
commit94f43328fd68ede85ccf631ca0fa9c942d18f5ee (patch)
treeb3e82905266ac342eb96cebbffe87aa9ad289eda /videocodec/OMXVideoEncoderVP8.cpp
parent3bad5763bd1376fffb049c68cd48637df83af390 (diff)
downloadandroid_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.cpp68
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);