diff options
author | Andy Hung <hunga@google.com> | 2015-04-28 19:05:08 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2015-04-29 14:10:21 -0700 |
commit | 6bb63addf65905dcc4d5f0461559142a716f6fbb (patch) | |
tree | 4fcb0d55c982a04dd8555c35ad11464e30508fa3 /media/ndk | |
parent | 48a31bf3f1c1ed5953a4e64f71cdf528f3a38ee5 (diff) | |
download | frameworks_av-6bb63addf65905dcc4d5f0461559142a716f6fbb.zip frameworks_av-6bb63addf65905dcc4d5f0461559142a716f6fbb.tar.gz frameworks_av-6bb63addf65905dcc4d5f0461559142a716f6fbb.tar.bz2 |
NdkMediaCodec: Return NULL if the MediaCodec cannot be created
Bug: 20566134
Change-Id: Idb09bc47a02aed03e97aa81f303ed95ebaa2f5ba
Diffstat (limited to 'media/ndk')
-rw-r--r-- | media/ndk/NdkMediaCodec.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/media/ndk/NdkMediaCodec.cpp b/media/ndk/NdkMediaCodec.cpp index 80c1c2f..cd0c462 100644 --- a/media/ndk/NdkMediaCodec.cpp +++ b/media/ndk/NdkMediaCodec.cpp @@ -154,6 +154,10 @@ static AMediaCodec * createAMediaCodec(const char *name, bool name_is_type, bool } else { mData->mCodec = android::MediaCodec::CreateByComponentName(mData->mLooper, name); } + if (mData->mCodec == NULL) { // failed to create codec + AMediaCodec_delete(mData); + return NULL; + } mData->mHandler = new CodecHandler(mData); mData->mLooper->registerHandler(mData->mHandler); mData->mGeneration = 1; @@ -180,17 +184,21 @@ AMediaCodec* AMediaCodec_createEncoderByType(const char *name) { EXPORT media_status_t AMediaCodec_delete(AMediaCodec *mData) { - if (mData->mCodec != NULL) { - mData->mCodec->release(); - mData->mCodec.clear(); - } + if (mData != NULL) { + if (mData->mCodec != NULL) { + mData->mCodec->release(); + mData->mCodec.clear(); + } - if (mData->mLooper != NULL) { - mData->mLooper->unregisterHandler(mData->mHandler->id()); - mData->mLooper->stop(); - mData->mLooper.clear(); + if (mData->mLooper != NULL) { + if (mData->mHandler != NULL) { + mData->mLooper->unregisterHandler(mData->mHandler->id()); + } + mData->mLooper->stop(); + mData->mLooper.clear(); + } + delete mData; } - delete mData; return AMEDIA_OK; } |