[PORT FROM MAIN]Port VP8 encode middleware to R44c branch
BZ: 193452
Port VP8 encode libmix to R44c branch
Signed-off-by: bolunliu <bolun.liu@intel.com>
Change-Id: I36f9a91b41c7d329d04574d089b41c49722f0f22
diff --git a/videoencoder/VideoEncoderBase.cpp b/videoencoder/VideoEncoderBase.cpp
index aa556e3..813fc98 100644
--- a/videoencoder/VideoEncoderBase.cpp
+++ b/videoencoder/VideoEncoderBase.cpp
@@ -29,6 +29,7 @@
,mRenderBitRate(false)
,mRenderHrd(false)
,mRenderMultiTemporal(false)
+ ,mForceKFrame(false)
,mSeqParamBuf(0)
,mPicParamBuf(0)
,mSliceParamBuf(0)
@@ -1019,18 +1020,18 @@
break;
}
- case VideoParamsTypeTemporalLayerNumber:{
- VideoParamsTemporalLayerNumber *numberoflayer =
- reinterpret_cast <VideoParamsTemporalLayerNumber *> (videoEncParams);
+ case VideoParamsTypeTemporalLayer:{
+ VideoParamsTemporalLayer *temporallayer =
+ reinterpret_cast <VideoParamsTemporalLayer *> (videoEncParams);
- if (numberoflayer->size != sizeof(VideoParamsTemporalLayerNumber)) {
+ if (temporallayer->size != sizeof(VideoParamsTemporalLayer)) {
return ENCODE_INVALID_PARAMS;
}
- mComParams.numberOfLayer = numberoflayer->numberOfLayer;
- mComParams.nPeriodicity = numberoflayer->nPeriodicity;
- for(int i=0;i<numberoflayer->nPeriodicity;i++)
- mComParams.nLayerID[i] = numberoflayer->nLayerID[i];
+ mComParams.numberOfLayer = temporallayer->numberOfLayer;
+ mComParams.nPeriodicity = temporallayer->nPeriodicity;
+ for(int i=0;i<temporallayer->nPeriodicity;i++)
+ mComParams.nLayerID[i] = temporallayer->nLayerID[i];
mRenderMultiTemporal = true;
break;
}
@@ -1146,15 +1147,15 @@
}
}
- case VideoParamsTypeTemporalLayerNumber:{
- VideoParamsTemporalLayerNumber *numberoflayer =
- reinterpret_cast <VideoParamsTemporalLayerNumber *> (videoEncParams);
+ case VideoParamsTypeTemporalLayer:{
+ VideoParamsTemporalLayer *temporallayer =
+ reinterpret_cast <VideoParamsTemporalLayer *> (videoEncParams);
- if(numberoflayer->size != sizeof(VideoParamsTemporalLayerNumber)) {
+ if(temporallayer->size != sizeof(VideoParamsTemporalLayer)) {
return ENCODE_INVALID_PARAMS;
}
- numberoflayer->numberOfLayer = mComParams.numberOfLayer;
+ temporallayer->numberOfLayer = mComParams.numberOfLayer;
break;
}
diff --git a/videoencoder/VideoEncoderBase.h b/videoencoder/VideoEncoderBase.h
index 80532b9..7b1fb18 100644
--- a/videoencoder/VideoEncoderBase.h
+++ b/videoencoder/VideoEncoderBase.h
@@ -122,6 +122,7 @@
bool mRenderHrd;
bool mRenderMaxFrameSize;
bool mRenderMultiTemporal;
+ bool mForceKFrame;
VABufferID mSeqParamBuf;
VABufferID mRcParamBuf;
diff --git a/videoencoder/VideoEncoderDef.h b/videoencoder/VideoEncoderDef.h
index c57be9f..d1bf81e 100644
--- a/videoencoder/VideoEncoderDef.h
+++ b/videoencoder/VideoEncoderDef.h
@@ -320,7 +320,7 @@
VideoParamsTypeStoreMetaDataInBuffers,
VideoParamsTypeProfileLevel,
VideoParamsTypeVP8,
- VideoParamsTypeTemporalLayerNumber,
+ VideoParamsTypeTemporalLayer,
VideoConfigTypeFrameRate,
VideoConfigTypeBitRate,
@@ -531,11 +531,11 @@
bool isSupported;
};
-struct VideoParamsTemporalLayerNumber : VideoParamConfigSet {
+struct VideoParamsTemporalLayer : VideoParamConfigSet {
- VideoParamsTemporalLayerNumber() {
- type = VideoParamsTypeTemporalLayerNumber;
- size = sizeof(VideoParamsTemporalLayerNumber);
+ VideoParamsTemporalLayer() {
+ type = VideoParamsTypeTemporalLayer;
+ size = sizeof(VideoParamsTemporalLayer);
}
uint32_t numberOfLayer;
diff --git a/videoencoder/VideoEncoderVP8.cpp b/videoencoder/VideoEncoderVP8.cpp
index 936fc6b..486c5ba 100644
--- a/videoencoder/VideoEncoderVP8.cpp
+++ b/videoencoder/VideoEncoderVP8.cpp
@@ -50,6 +50,23 @@
VideoEncoderVP8::~VideoEncoderVP8() {
}
+Encode_Status VideoEncoderVP8::start() {
+
+ Encode_Status ret = ENCODE_SUCCESS;
+ LOG_V( "Begin\n");
+
+ ret = VideoEncoderBase::start ();
+ CHECK_ENCODE_STATUS_RETURN("VideoEncoderBase::start");
+
+ if (mComParams.rcMode == VA_RC_VCM) {
+ mRenderBitRate = false;
+ }
+
+ LOG_V( "end\n");
+ return ret;
+}
+
+
Encode_Status VideoEncoderVP8::renderSequenceParams() {
Encode_Status ret = ENCODE_SUCCESS;
VAStatus vaStatus = VA_STATUS_SUCCESS;
@@ -344,6 +361,11 @@
ret = renderPictureParams(task);
CHECK_ENCODE_STATUS_RETURN("renderPictureParams");
+ if(mForceKFrame) {
+ mVideoConfigVP8.force_kf = 0;//rest it as default value
+ mForceKFrame = false;
+ }
+
LOG_V( "End\n");
return ret;
}
@@ -475,6 +497,15 @@
}
break;
+ case VideoConfigTypeIDRRequest:{
+ VideoParamConfigSet *encConfigVP8KFrameRequest =
+ reinterpret_cast<VideoParamConfigSet*> (videoEncConfig);
+
+ mVideoConfigVP8.force_kf = 1;
+ mForceKFrame = true;
+ }
+ break;
+
default: {
LOG_E ("Invalid Config Type");
break;
diff --git a/videoencoder/VideoEncoderVP8.h b/videoencoder/VideoEncoderVP8.h
index c8335be..9456625 100644
--- a/videoencoder/VideoEncoderVP8.h
+++ b/videoencoder/VideoEncoderVP8.h
@@ -18,6 +18,7 @@
public:
VideoEncoderVP8();
virtual ~VideoEncoderVP8();
+ virtual Encode_Status start();