diff options
author | Glenn Kasten <gkasten@google.com> | 2011-03-11 08:46:40 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-03-11 08:46:40 -0800 |
commit | 6dd429efe2f5f4aee1f3b934bb5404e24d65ac93 (patch) | |
tree | 6e96bbb982209f0e71386d422917e8b07f9b1e65 | |
parent | dd0f9af1161e491cb16d9705a3983650d3dc087b (diff) | |
parent | 055066e1e77d944383360d50057f5b8187f23c0b (diff) | |
download | frameworks_base-6dd429efe2f5f4aee1f3b934bb5404e24d65ac93.zip frameworks_base-6dd429efe2f5f4aee1f3b934bb5404e24d65ac93.tar.gz frameworks_base-6dd429efe2f5f4aee1f3b934bb5404e24d65ac93.tar.bz2 |
am 055066e1: am 92f2f3ff: Merge "Bug 3012968 DRM output control" into honeycomb-mr1
* commit '055066e1e77d944383360d50057f5b8187f23c0b':
Bug 3012968 DRM output control
-rw-r--r-- | include/media/stagefright/OMXCodec.h | 4 | ||||
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 14 | ||||
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 10 |
3 files changed, 28 insertions, 0 deletions
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h index f7d837a..93b5d24 100644 --- a/include/media/stagefright/OMXCodec.h +++ b/include/media/stagefright/OMXCodec.h @@ -50,6 +50,9 @@ struct OMXCodec : public MediaSource, // Only submit one input buffer at one time. kOnlySubmitOneInputBufferAtOneTime = 64, + + // Enable GRALLOC_USAGE_PROTECTED for output buffers from native window + kEnableGrallocUsageProtected = 128, }; static sp<MediaSource> Create( const sp<IOMX> &omx, @@ -197,6 +200,7 @@ private: bool mIsMetaDataStoredInVideoBuffers; bool mOnlySubmitOneBufferAtOneTime; + bool mEnableGrallocUsageProtected; OMXCodec(const sp<IOMX> &omx, IOMX::node_id node, uint32_t quirks, bool isEncoder, const char *mime, const char *componentName, diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 07e7bd5..0de1988 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -45,6 +45,7 @@ #include <surfaceflinger/Surface.h> #include <gui/ISurfaceTexture.h> #include <gui/SurfaceTextureClient.h> +#include <surfaceflinger/ISurfaceComposer.h> #include <media/stagefright/foundation/ALooper.h> #include <media/stagefright/foundation/AMessage.h> @@ -1189,6 +1190,19 @@ void AwesomePlayer::setVideoSource(sp<MediaSource> source) { } status_t AwesomePlayer::initVideoDecoder(uint32_t flags) { + + // Either the application or the DRM system can independently say + // that there must be a hardware-protected path to an external video sink. + // For now we always require a hardware-protected path to external video sink + // if content is DRMed, but eventually this could be optional per DRM agent. + // When the application wants protection, then + // (USE_SURFACE_ALLOC && (mSurface != 0) && + // (mSurface->getFlags() & ISurfaceComposer::eProtectedByApp)) + // will be true, but that part is already handled by SurfaceFlinger. + if (mDecryptHandle != NULL) { + flags |= OMXCodec::kEnableGrallocUsageProtected; + } + LOGV("initVideoDecoder flags=0x%x", flags); mVideoSource = OMXCodec::Create( mClient.interface(), mVideoTrack->getFormat(), false, // createEncoder diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 4a94e0d..3e26a95 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -528,6 +528,12 @@ status_t OMXCodec::configureCodec(const sp<MetaData> &meta, uint32_t flags) { mOnlySubmitOneBufferAtOneTime = true; } + mEnableGrallocUsageProtected = false; + if (flags & kEnableGrallocUsageProtected) { + mEnableGrallocUsageProtected = true; + } + LOGV("configureCodec protected=%d", mEnableGrallocUsageProtected); + if (!(flags & kIgnoreCodecSpecificData)) { uint32_t type; const void *data; @@ -1751,7 +1757,11 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { // XXX: Currently this error is logged, but not fatal. usage = 0; } + if (mEnableGrallocUsageProtected) { + usage |= GRALLOC_USAGE_PROTECTED; + } + LOGV("native_window_set_usage usage=0x%x", usage); err = native_window_set_usage( mNativeWindow.get(), usage | GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_EXTERNAL_DISP); if (err != 0) { |