Acodec: Send framerate information to OMX decoder if available
Bug: 19110889
Change-Id: Ia8dbe1b77aaac421ec9415884e1248b9b68168dc
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h
index 371e2c8..8509d55 100644
--- a/include/media/stagefright/ACodec.h
+++ b/include/media/stagefright/ACodec.h
@@ -264,7 +264,7 @@
status_t setVideoFormatOnPort(
OMX_U32 portIndex,
int32_t width, int32_t height,
- OMX_VIDEO_CODINGTYPE compressionFormat);
+ OMX_VIDEO_CODINGTYPE compressionFormat, float frameRate = -1.0);
typedef struct drcParams {
int32_t drcCut;
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 87606a5..9b9153b 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -2224,8 +2224,17 @@
return err;
}
+ int32_t frameRateInt;
+ float frameRateFloat;
+ if (!msg->findFloat("frame-rate", &frameRateFloat)) {
+ if (!msg->findInt32("frame-rate", &frameRateInt)) {
+ frameRateInt = -1;
+ }
+ frameRateFloat = (float)frameRateInt;
+ }
+
err = setVideoFormatOnPort(
- kPortIndexInput, width, height, compressionFormat);
+ kPortIndexInput, width, height, compressionFormat, frameRateFloat);
if (err != OK) {
return err;
@@ -2989,7 +2998,8 @@
status_t ACodec::setVideoFormatOnPort(
OMX_U32 portIndex,
- int32_t width, int32_t height, OMX_VIDEO_CODINGTYPE compressionFormat) {
+ int32_t width, int32_t height, OMX_VIDEO_CODINGTYPE compressionFormat,
+ float frameRate) {
OMX_PARAM_PORTDEFINITIONTYPE def;
InitOMXParams(&def);
def.nPortIndex = portIndex;
@@ -3017,6 +3027,9 @@
if (portIndex == kPortIndexInput) {
video_def->eCompressionFormat = compressionFormat;
video_def->eColorFormat = OMX_COLOR_FormatUnused;
+ if (frameRate >= 0) {
+ video_def->xFramerate = (OMX_U32)(frameRate * 65536.0f);
+ }
}
err = mOMX->setParameter(