summaryrefslogtreecommitdiffstats
path: root/media/ndk
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2015-04-28 19:05:08 -0700
committerAndy Hung <hunga@google.com>2015-04-29 14:10:21 -0700
commit6bb63addf65905dcc4d5f0461559142a716f6fbb (patch)
tree4fcb0d55c982a04dd8555c35ad11464e30508fa3 /media/ndk
parent48a31bf3f1c1ed5953a4e64f71cdf528f3a38ee5 (diff)
downloadframeworks_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.cpp26
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;
}