[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();