From 94d351603f83fdaa0c2bb5df7911c3e61fab01e2 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Mon, 7 Nov 2011 15:59:51 -0800 Subject: [PATCH] Bug 5585323 Authorize audio decode for system Authorize the use of specific audio codecs for audio decoding by the system, which guarantees audio is decoded for playback, when the appropriate system permission is used. Change-Id: I0633b04b4d0aebe89804ef48752bf05d72abc56d --- wilhelm/src/android/android_AudioSfDecoder.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/wilhelm/src/android/android_AudioSfDecoder.cpp b/wilhelm/src/android/android_AudioSfDecoder.cpp index 79e01a47..de072656 100644 --- a/wilhelm/src/android/android_AudioSfDecoder.cpp +++ b/wilhelm/src/android/android_AudioSfDecoder.cpp @@ -19,6 +19,7 @@ #include "sles_allinclusive.h" #include "android/android_AudioSfDecoder.h" +#include #include @@ -776,17 +777,25 @@ void AudioSfDecoder::hasNewDecodeParams() { updateAudioSink(); } -static const char* const kUnsupportedCodecs[] = { MEDIA_MIMETYPE_AUDIO_AMR_NB, +static const char* const kPlaybackOnlyCodecs[] = { MEDIA_MIMETYPE_AUDIO_AMR_NB, MEDIA_MIMETYPE_AUDIO_AMR_WB }; -#define NB_UNSUPPORTED_CODECS (sizeof(kUnsupportedCodecs)/sizeof(kUnsupportedCodecs[0])) +#define NB_PLAYBACK_ONLY_CODECS (sizeof(kPlaybackOnlyCodecs)/sizeof(kPlaybackOnlyCodecs[0])) bool AudioSfDecoder::isSupportedCodec(const char* mime) { - for (unsigned int i = 0 ; i < NB_UNSUPPORTED_CODECS ; i++) { - if (!strcasecmp(mime, kUnsupportedCodecs[i])) { - return false; + bool codecRequiresPermission = false; + for (unsigned int i = 0 ; i < NB_PLAYBACK_ONLY_CODECS ; i++) { + if (!strcasecmp(mime, kPlaybackOnlyCodecs[i])) { + codecRequiresPermission = true; + break; } } - return true; + if (codecRequiresPermission) { + // verify only the system can decode, for playback only + return checkCallingPermission( + String16("android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK")); + } else { + return true; + } } } // namespace android -- 2.11.0