diff --git a/media/codecs/vpx/C2SoftVpxEnc.cpp b/media/codecs/vpx/C2SoftVpxEnc.cpp
index 9a7c105..0fe4770 100644
--- a/media/codecs/vpx/C2SoftVpxEnc.cpp
+++ b/media/codecs/vpx/C2SoftVpxEnc.cpp
@@ -120,9 +120,9 @@
         mFrameRate = mIntf->getFrameRate_l();
         mIntraRefresh = mIntf->getIntraRefresh_l();
         mRequestSync = mIntf->getRequestSync_l();
+        mTemporalLayers = mIntf->getTemporalLayers_l()->m.layerCount;
     }
 
-    mTemporalLayers = mIntf->getTemporalLayers_l()->m.layerCount;
     setCodecSpecificInterface();
     if (!mCodecInterface) goto CleanUp;
 
@@ -272,8 +272,7 @@
                                          1);
         if (codec_return == VPX_CODEC_OK) {
             uint32_t rc_max_intra_target =
-                mCodecConfiguration->rc_buf_optimal_sz *
-                ((uint32_t)(mFrameRate->value + 0.5) >> 1) / 10;
+                (uint32_t)(mCodecConfiguration->rc_buf_optimal_sz * mFrameRate->value / 20 + 0.5);
             // Don't go below 3 times per frame bandwidth.
             if (rc_max_intra_target < 300) {
                 rc_max_intra_target = 300;
@@ -561,8 +560,11 @@
         frameDuration = (uint32_t)(inputTimeStamp - mLastTimestamp);
     } else {
         // Use default of 30 fps in case of 0 frame rate.
-        uint32_t framerate = mFrameRate->value + 0.5 ?: 30;
-        frameDuration = (uint32_t)((uint64_t)1000000 / framerate);
+        float frameRate = mFrameRate->value;
+        if (frameRate < 0.001) {
+            frameRate = 30;
+        }
+        frameDuration = (uint32_t)(1000000 / frameRate + 0.5);
     }
     mLastTimestamp = inputTimeStamp;
 
diff --git a/media/codecs/vpx/C2SoftVpxEnc.h b/media/codecs/vpx/C2SoftVpxEnc.h
index 806b7ee..6d175f1 100644
--- a/media/codecs/vpx/C2SoftVpxEnc.h
+++ b/media/codecs/vpx/C2SoftVpxEnc.h
@@ -307,14 +307,8 @@
 
         addParameter(
                 DefineParam(mIntraRefresh, C2_PARAMKEY_INTRA_REFRESH)
-                .withDefault(new C2StreamIntraRefreshTuning::output(
-                        0u, C2Config::INTRA_REFRESH_DISABLED, 0.))
-                .withFields({
-                    C2F(mIntraRefresh, mode).oneOf({
-                        C2Config::INTRA_REFRESH_DISABLED, C2Config::INTRA_REFRESH_ARBITRARY }),
-                    C2F(mIntraRefresh, period).any()
-                })
-                .withSetter(IntraRefreshSetter)
+                .withConstValue(new C2StreamIntraRefreshTuning::output(
+                             0u, C2Config::INTRA_REFRESH_DISABLED, 0.))
                 .build());
 
         addParameter(
@@ -376,20 +370,6 @@
         return C2R::Ok();
     }
 
-    static C2R IntraRefreshSetter(bool mayBlock, C2P<C2StreamIntraRefreshTuning::output> &me) {
-        (void)mayBlock;
-        C2R res = C2R::Ok();
-        if (me.v.period < 1) {
-            me.set().mode = C2Config::INTRA_REFRESH_DISABLED;
-            me.set().period = 0;
-        } else {
-            // only support arbitrary mode (cyclic in our case)
-            me.set().mode = C2Config::INTRA_REFRESH_ARBITRARY;
-        }
-        return res;
-    }
-
-
     static C2R LayeringSetter(bool mayBlock, C2P<C2StreamTemporalLayeringTuning::output>& me) {
         (void)mayBlock;
         C2R res = C2R::Ok();
