diff options
author | Edwin Wong <edwinwong@google.com> | 2012-07-13 15:11:07 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-07-13 15:11:07 -0700 |
commit | 65e8d62a5b243518795cdafa498df4a49baf6940 (patch) | |
tree | 14733866f571e94c11a4d7a6ec3dade62d144e29 | |
parent | 109347d421413303eb1678dd9e2aa9d40acf89d2 (diff) | |
parent | fa2b8f243eb048fb2b8e5a14356190f69eb31a36 (diff) |
Merge "Fixed sample video corrupted in MediaCodec mode." into jb-devandroid-cts-4.1_r2jb-dev
-rw-r--r-- | include/media/ICrypto.h | 2 | ||||
-rw-r--r-- | media/libmedia/ICrypto.cpp | 29 | ||||
-rw-r--r-- | media/libmediaplayerservice/Crypto.cpp | 2 | ||||
-rw-r--r-- | media/libmediaplayerservice/Crypto.h | 2 | ||||
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 8 |
5 files changed, 19 insertions, 24 deletions
diff --git a/include/media/ICrypto.h b/include/media/ICrypto.h index 32a2cf77..61059bde 100644 --- a/include/media/ICrypto.h +++ b/include/media/ICrypto.h @@ -41,7 +41,7 @@ struct ICrypto : public IInterface { virtual bool requiresSecureDecoderComponent( const char *mime) const = 0; - virtual status_t decrypt( + virtual ssize_t decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], diff --git a/media/libmedia/ICrypto.cpp b/media/libmedia/ICrypto.cpp index 3452e5c6..2defc2da 100644 --- a/media/libmedia/ICrypto.cpp +++ b/media/libmedia/ICrypto.cpp @@ -91,7 +91,7 @@ struct BpCrypto : public BpInterface<ICrypto> { return reply.readInt32() != 0; } - virtual status_t decrypt( + virtual ssize_t decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], @@ -136,21 +136,17 @@ struct BpCrypto : public BpInterface<ICrypto> { remote()->transact(DECRYPT, data, &reply); - status_t result = reply.readInt32(); + ssize_t result = reply.readInt32(); if (result >= ERROR_DRM_VENDOR_MIN && result <= ERROR_DRM_VENDOR_MAX) { errorDetailMsg->setTo(reply.readCString()); } - if (result != OK) { - return result; + if (!secure && result >= 0) { + reply.read(dstPtr, result); } - if (!secure) { - reply.read(dstPtr, totalSize); - } - - return OK; + return result; } private: @@ -259,8 +255,7 @@ status_t BnCrypto::onTransact( } AString errorDetailMsg; - - status_t err = decrypt( + ssize_t result = decrypt( secure, key, iv, @@ -270,18 +265,18 @@ status_t BnCrypto::onTransact( dstPtr, &errorDetailMsg); - reply->writeInt32(err); + reply->writeInt32(result); - if (err >= ERROR_DRM_VENDOR_MIN - && err <= ERROR_DRM_VENDOR_MAX) { + if (result >= ERROR_DRM_VENDOR_MIN + && result <= ERROR_DRM_VENDOR_MAX) { reply->writeCString(errorDetailMsg.c_str()); } if (!secure) { - if (err == OK) { - reply->write(dstPtr, totalSize); + if (result >= 0) { + CHECK_LE(result, static_cast<ssize_t>(totalSize)); + reply->write(dstPtr, result); } - free(dstPtr); dstPtr = NULL; } diff --git a/media/libmediaplayerservice/Crypto.cpp b/media/libmediaplayerservice/Crypto.cpp index d35d5b1e..0e8f913d 100644 --- a/media/libmediaplayerservice/Crypto.cpp +++ b/media/libmediaplayerservice/Crypto.cpp @@ -141,7 +141,7 @@ bool Crypto::requiresSecureDecoderComponent(const char *mime) const { return mPlugin->requiresSecureDecoderComponent(mime); } -status_t Crypto::decrypt( +ssize_t Crypto::decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], diff --git a/media/libmediaplayerservice/Crypto.h b/media/libmediaplayerservice/Crypto.h index c5aa3c6c..d066774f 100644 --- a/media/libmediaplayerservice/Crypto.h +++ b/media/libmediaplayerservice/Crypto.h @@ -42,7 +42,7 @@ struct Crypto : public BnCrypto { virtual bool requiresSecureDecoderComponent( const char *mime) const; - virtual status_t decrypt( + virtual ssize_t decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index ff71170b..67f5a22b 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -1346,7 +1346,7 @@ status_t MediaCodec::onQueueInputBuffer(const sp<AMessage> &msg) { AString *errorDetailMsg; CHECK(msg->findPointer("errorDetailMsg", (void **)&errorDetailMsg)); - status_t err = mCrypto->decrypt( + ssize_t result = mCrypto->decrypt( (mFlags & kFlagIsSecure) != 0, key, iv, @@ -1357,11 +1357,11 @@ status_t MediaCodec::onQueueInputBuffer(const sp<AMessage> &msg) { info->mData->base(), errorDetailMsg); - if (err != OK) { - return err; + if (result < 0) { + return result; } - info->mData->setRange(0, size); + info->mData->setRange(0, result); } reply->setBuffer("buffer", info->mData); |