summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/ACodec.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-11-01 15:48:44 -0700
committerAndreas Huber <andih@google.com>2012-11-01 15:48:44 -0700
commit96076964863ee6887f0bed9d0f11f424b48ab9b9 (patch)
treeff74d91d61bbcb4ddf8af89ea9f49f72e6d00da6 /media/libstagefright/ACodec.cpp
parent90a92053219ae50ddf4bb54e3d54db2d309e2b8d (diff)
downloadframeworks_av-96076964863ee6887f0bed9d0f11f424b48ab9b9.zip
frameworks_av-96076964863ee6887f0bed9d0f11f424b48ab9b9.tar.gz
frameworks_av-96076964863ee6887f0bed9d0f11f424b48ab9b9.tar.bz2
Make video encoders' bitrate mode (constant, variable, ...) configurable
through the desired output format. Configure the video encoder to use constant bitrate mode for WFD. Change-Id: Id7bd619598153c13448a9c5acd69d80f8a01f333 related-to-bug: 7459597
Diffstat (limited to 'media/libstagefright/ACodec.cpp')
-rw-r--r--media/libstagefright/ACodec.cpp26
1 files changed, 21 insertions, 5 deletions
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 @@ static OMX_U32 setPFramesSpacing(int32_t iFramesInterval, int32_t frameRate) {
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 @@ status_t ACodec::setupMPEG4EncoderParameters(const sp<AMessage> &msg) {
return INVALID_OPERATION;
}
+ OMX_VIDEO_CONTROLRATETYPE bitrateMode = getBitrateMode(msg);
+
float frameRate;
if (!msg->findFloat("frame-rate", &frameRate)) {
int32_t tmp;
@@ -1706,7 +1717,7 @@ status_t ACodec::setupMPEG4EncoderParameters(const sp<AMessage> &msg) {
return err;
}
- err = configureBitrate(bitrate);
+ err = configureBitrate(bitrate, bitrateMode);
if (err != OK) {
return err;
@@ -1722,6 +1733,8 @@ status_t ACodec::setupH263EncoderParameters(const sp<AMessage> &msg) {
return INVALID_OPERATION;
}
+ OMX_VIDEO_CONTROLRATETYPE bitrateMode = getBitrateMode(msg);
+
float frameRate;
if (!msg->findFloat("frame-rate", &frameRate)) {
int32_t tmp;
@@ -1780,7 +1793,7 @@ status_t ACodec::setupH263EncoderParameters(const sp<AMessage> &msg) {
return err;
}
- err = configureBitrate(bitrate);
+ err = configureBitrate(bitrate, bitrateMode);
if (err != OK) {
return err;
@@ -1796,6 +1809,8 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) {
return INVALID_OPERATION;
}
+ OMX_VIDEO_CONTROLRATETYPE bitrateMode = getBitrateMode(msg);
+
float frameRate;
if (!msg->findFloat("frame-rate", &frameRate)) {
int32_t tmp;
@@ -1881,7 +1896,7 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) {
return err;
}
- return configureBitrate(bitrate);
+ return configureBitrate(bitrate, bitrateMode);
}
status_t ACodec::verifySupportForProfileAndLevel(
@@ -1910,7 +1925,8 @@ status_t ACodec::verifySupportForProfileAndLevel(
}
}
-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 @@ status_t ACodec::configureBitrate(int32_t bitrate) {
return err;
}
- bitrateType.eControlRate = OMX_Video_ControlRateVariable;
+ bitrateType.eControlRate = bitrateMode;
bitrateType.nTargetBitrate = bitrate;
return mOMX->setParameter(