summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorRonghua Wu <ronghuawu@google.com>2015-04-06 14:17:24 -0700
committerRonghua Wu <ronghuawu@google.com>2015-04-10 14:49:44 -0700
commited5554fb1c837f6b1008d3910018c979c57da502 (patch)
tree65ebd5ffd8e905b4756f01a508974464e2b4e5f0 /media
parent52e88b2986536e83a7a6da63461556b8734a85f3 (diff)
downloadframeworks_av-ed5554fb1c837f6b1008d3910018c979c57da502.zip
frameworks_av-ed5554fb1c837f6b1008d3910018c979c57da502.tar.gz
frameworks_av-ed5554fb1c837f6b1008d3910018c979c57da502.tar.bz2
libstagefright: handle MediaFormat "operating-rate" key.
Bug: 19620911 Change-Id: I846d3cc10308a13f2ed92bb82ba7e8236d9c67d1
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/ACodec.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 4efc630..45f6339 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -1685,6 +1685,16 @@ status_t ACodec::configureCodec(
err = setPriority(priority);
}
+ int32_t rateInt = -1;
+ float rateFloat = -1;
+ if (!msg->findFloat("operating-rate", &rateFloat)) {
+ msg->findInt32("operating-rate", &rateInt);
+ rateFloat = (float)rateInt; // 16MHz (FLINTMAX) is OK for upper bound.
+ }
+ if (rateFloat > 0) {
+ err = setOperatingRate(rateFloat, video);
+ }
+
mBaseOutputFormat = outputFormat;
CHECK_EQ(getPortFormat(kPortIndexInput, inputFormat), (status_t)OK);
@@ -1711,6 +1721,34 @@ status_t ACodec::setPriority(int32_t priority) {
return OK;
}
+status_t ACodec::setOperatingRate(float rateFloat, bool isVideo) {
+ if (rateFloat < 0) {
+ return BAD_VALUE;
+ }
+ OMX_U32 rate;
+ if (isVideo) {
+ if (rateFloat > 65535) {
+ return BAD_VALUE;
+ }
+ rate = (OMX_U32)(rateFloat * 65536.0f + 0.5f);
+ } else {
+ if (rateFloat > UINT_MAX) {
+ return BAD_VALUE;
+ }
+ rate = (OMX_U32)(rateFloat);
+ }
+ OMX_PARAM_U32TYPE config;
+ InitOMXParams(&config);
+ config.nU32 = rate;
+ status_t err = mOMX->setConfig(
+ mNode, (OMX_INDEXTYPE)OMX_IndexConfigOperatingRate,
+ &config, sizeof(config));
+ if (err != OK) {
+ ALOGI("codec does not support config operating rate (err %d)", err);
+ }
+ return OK;
+}
+
status_t ACodec::setMinBufferSize(OMX_U32 portIndex, size_t size) {
OMX_PARAM_PORTDEFINITIONTYPE def;
InitOMXParams(&def);