MediaCodecInfo: keep capabilities from XML when updating them from codec
Bug: 27115490
Change-Id: Ie15bf538a3026829ff8029fb8b96b8d254517d1c
diff --git a/include/media/MediaCodecInfo.h b/include/media/MediaCodecInfo.h
index e6f9661..26dc1ce 100644
--- a/include/media/MediaCodecInfo.h
+++ b/include/media/MediaCodecInfo.h
@@ -126,8 +126,9 @@
void addQuirk(const char *name);
status_t addMime(const char *mime);
status_t updateMime(const char *mime);
- // after this call Capabilities will be owned by MediaCodecInfo
- status_t setCapabilities(const sp<Capabilities> &caps);
+
+ // after this call |caps| will be owned by MediaCodecInfo, which may modify it
+ status_t setCapabilitiesFromCodec(const sp<Capabilities> &caps);
void addDetail(const AString &key, const AString &value);
void addFeature(const AString &key, int32_t value);
void addFeature(const AString &key, const char *value);
diff --git a/media/libmedia/MediaCodecInfo.cpp b/media/libmedia/MediaCodecInfo.cpp
index 3b53f4c..8351af6 100644
--- a/media/libmedia/MediaCodecInfo.cpp
+++ b/media/libmedia/MediaCodecInfo.cpp
@@ -238,7 +238,11 @@
}
}
-status_t MediaCodecInfo::setCapabilities(const sp<Capabilities> &caps) {
+status_t MediaCodecInfo::setCapabilitiesFromCodec(const sp<Capabilities> &caps) {
+ if (mCurrentCaps != NULL) {
+ // keep current capabilities map
+ caps->mDetails = mCurrentCaps->mDetails;
+ }
mCurrentCaps = caps;
return OK;
}
diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp
index 34d85e7..200796c 100644
--- a/media/libstagefright/MediaCodecList.cpp
+++ b/media/libstagefright/MediaCodecList.cpp
@@ -767,7 +767,7 @@
return UNKNOWN_ERROR;
}
- return mCurrentInfo->setCapabilities(caps);
+ return mCurrentInfo->setCapabilitiesFromCodec(caps);
}
status_t MediaCodecList::addQuirk(const char **attrs) {