diff options
author | Lajos Molnar <lajos@google.com> | 2014-08-14 19:54:08 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2014-08-14 19:56:58 -0700 |
commit | 732c6d955524ead6c31e6e1bafbd41ea4cee525d (patch) | |
tree | 512bb207b9013da6f9c728f77a3070a7a5b99638 | |
parent | 261562316c1b652ea697c99c0f24a54112bd0385 (diff) | |
download | frameworks_av-732c6d955524ead6c31e6e1bafbd41ea4cee525d.zip frameworks_av-732c6d955524ead6c31e6e1bafbd41ea4cee525d.tar.gz frameworks_av-732c6d955524ead6c31e6e1bafbd41ea4cee525d.tar.bz2 |
stagefright/media: add support for codec features with text value
Bug: 11990470
Change-Id: I7600d999c5f4b6821d825d25fa7e8a2bb5a80c46
-rw-r--r-- | include/media/MediaCodecInfo.h | 1 | ||||
-rw-r--r-- | media/libmedia/MediaCodecInfo.cpp | 6 | ||||
-rw-r--r-- | media/libstagefright/MediaCodecList.cpp | 15 |
3 files changed, 21 insertions, 1 deletions
diff --git a/include/media/MediaCodecInfo.h b/include/media/MediaCodecInfo.h index ab7a4b8..cd56adb 100644 --- a/include/media/MediaCodecInfo.h +++ b/include/media/MediaCodecInfo.h @@ -107,6 +107,7 @@ private: status_t initializeCapabilities(const CodecCapabilities &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); void removeMime(const char *mime); void complete(); diff --git a/media/libmedia/MediaCodecInfo.cpp b/media/libmedia/MediaCodecInfo.cpp index 446c582..7b4c4e2 100644 --- a/media/libmedia/MediaCodecInfo.cpp +++ b/media/libmedia/MediaCodecInfo.cpp @@ -257,4 +257,10 @@ void MediaCodecInfo::addFeature(const AString &key, int32_t value) { mCurrentCaps->mDetails->setInt32(tag.c_str(), value); } +void MediaCodecInfo::addFeature(const AString &key, const char *value) { + AString tag = "feature-"; + tag.append(key); + mCurrentCaps->mDetails->setString(tag.c_str(), value); +} + } // namespace android diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp index 2f2a0b3..5b8be46 100644 --- a/media/libstagefright/MediaCodecList.cpp +++ b/media/libstagefright/MediaCodecList.cpp @@ -783,6 +783,7 @@ status_t MediaCodecList::addFeature(const char **attrs) { const char *name = NULL; int32_t optional = -1; int32_t required = -1; + const char *value = NULL; while (attrs[i] != NULL) { if (attrs[i + 1] == NULL) { @@ -801,6 +802,9 @@ status_t MediaCodecList::addFeature(const char **attrs) { required = value; } ++i; + } else if (!strcmp(attrs[i], "value")) { + value = attrs[i + 1]; + ++i; } else { return -EINVAL; } @@ -816,7 +820,16 @@ status_t MediaCodecList::addFeature(const char **attrs) { return -EINVAL; } - mCurrentInfo->addFeature(name, (required == 1) || (optional == 0)); + if ((optional != -1 || required != -1) && (value != NULL)) { + ALOGE("feature '%s' has both a value and optional/required attribute", name); + return -EINVAL; + } + + if (value != NULL) { + mCurrentInfo->addFeature(name, value); + } else { + mCurrentInfo->addFeature(name, (required == 1) || (optional == 0)); + } return OK; } |