merge in jb-mr1-release history after reset to jb-mr1-dev
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h
index d27f463..cba8a6b 100644
--- a/include/media/stagefright/ACodec.h
+++ b/include/media/stagefright/ACodec.h
@@ -242,7 +242,10 @@
     status_t setupAVCEncoderParameters(const sp<AMessage> &msg);
 
     status_t verifySupportForProfileAndLevel(int32_t profile, int32_t level);
-    status_t configureBitrate(int32_t bitrate);
+
+    status_t configureBitrate(
+            int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode);
+
     status_t setupErrorCorrectionParameters();
 
     status_t initNativeWindow();
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 2b4220f..0ca027b 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -1636,6 +1636,15 @@
     return ret;
 }
 
+static OMX_VIDEO_CONTROLRATETYPE getBitrateMode(const sp<AMessage> &msg) {
+    int32_t tmp;
+    if (!msg->findInt32("bitrate-mode", &tmp)) {
+        return OMX_Video_ControlRateVariable;
+    }
+
+    return static_cast<OMX_VIDEO_CONTROLRATETYPE>(tmp);
+}
+
 status_t ACodec::setupMPEG4EncoderParameters(const sp<AMessage> &msg) {
     int32_t bitrate, iFrameInterval;
     if (!msg->findInt32("bitrate", &bitrate)
@@ -1643,6 +1652,8 @@
         return INVALID_OPERATION;
     }
 
+    OMX_VIDEO_CONTROLRATETYPE bitrateMode = getBitrateMode(msg);
+
     float frameRate;
     if (!msg->findFloat("frame-rate", &frameRate)) {
         int32_t tmp;
@@ -1706,7 +1717,7 @@
         return err;
     }
 
-    err = configureBitrate(bitrate);
+    err = configureBitrate(bitrate, bitrateMode);
 
     if (err != OK) {
         return err;
@@ -1722,6 +1733,8 @@
         return INVALID_OPERATION;
     }
 
+    OMX_VIDEO_CONTROLRATETYPE bitrateMode = getBitrateMode(msg);
+
     float frameRate;
     if (!msg->findFloat("frame-rate", &frameRate)) {
         int32_t tmp;
@@ -1780,7 +1793,7 @@
         return err;
     }
 
-    err = configureBitrate(bitrate);
+    err = configureBitrate(bitrate, bitrateMode);
 
     if (err != OK) {
         return err;
@@ -1796,6 +1809,8 @@
         return INVALID_OPERATION;
     }
 
+    OMX_VIDEO_CONTROLRATETYPE bitrateMode = getBitrateMode(msg);
+
     float frameRate;
     if (!msg->findFloat("frame-rate", &frameRate)) {
         int32_t tmp;
@@ -1881,7 +1896,7 @@
         return err;
     }
 
-    return configureBitrate(bitrate);
+    return configureBitrate(bitrate, bitrateMode);
 }
 
 status_t ACodec::verifySupportForProfileAndLevel(
@@ -1910,7 +1925,8 @@
     }
 }
 
-status_t ACodec::configureBitrate(int32_t bitrate) {
+status_t ACodec::configureBitrate(
+        int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode) {
     OMX_VIDEO_PARAM_BITRATETYPE bitrateType;
     InitOMXParams(&bitrateType);
     bitrateType.nPortIndex = kPortIndexOutput;
@@ -1923,7 +1939,7 @@
         return err;
     }
 
-    bitrateType.eControlRate = OMX_Video_ControlRateVariable;
+    bitrateType.eControlRate = bitrateMode;
     bitrateType.nTargetBitrate = bitrate;
 
     return mOMX->setParameter(
diff --git a/media/libstagefright/wifi-display/source/Converter.cpp b/media/libstagefright/wifi-display/source/Converter.cpp
index 93ae9a3..01a394f 100644
--- a/media/libstagefright/wifi-display/source/Converter.cpp
+++ b/media/libstagefright/wifi-display/source/Converter.cpp
@@ -33,6 +33,8 @@
 #include <media/stagefright/MediaDefs.h>
 #include <media/stagefright/MediaErrors.h>
 
+#include <OMX_Video.h>
+
 namespace android {
 
 Converter::Converter(
@@ -152,6 +154,7 @@
         mOutputFormat->setInt32("bitrate", audioBitrate);
     } else {
         mOutputFormat->setInt32("bitrate", videoBitrate);
+        mOutputFormat->setInt32("bitrate-mode", OMX_Video_ControlRateConstant);
         mOutputFormat->setInt32("frame-rate", 30);
         mOutputFormat->setInt32("i-frame-interval", 1);  // Iframes every 1 secs
         mOutputFormat->setInt32("prepend-sps-pps-to-idr-frames", 1);