summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2014-09-30 14:40:32 -0700
committerAndy Hung <hunga@google.com>2014-10-01 20:23:34 -0700
commit2abde2c118a94f843a7450818c925d3f0b673cd3 (patch)
tree452cecbb797776883b387704a299936b1dd55729 /media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
parent955e24d3a8e218d4711cabc6558781e095011132 (diff)
downloadframeworks_av-2abde2c118a94f843a7450818c925d3f0b673cd3.zip
frameworks_av-2abde2c118a94f843a7450818c925d3f0b673cd3.tar.gz
frameworks_av-2abde2c118a94f843a7450818c925d3f0b673cd3.tar.bz2
NuPlayer: Fix flush mode decoder error handling
Explicitly handle each flush mode upon decoder error. Do not clear out affected decoder immediately. Alter logcat messages for better diagnostics. Bug: 17638878 Bug: 17679341 Change-Id: I219796c04d65d7c4dd61c0d4f99f9f580241a68b
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
index 1a066b7..7814bf1 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
@@ -140,6 +140,8 @@ void NuPlayer::Decoder::onConfigure(const sp<AMessage> &format) {
format, surface, NULL /* crypto */, 0 /* flags */);
if (err != OK) {
ALOGE("Failed to configure %s decoder (err=%d)", mComponentName.c_str(), err);
+ mCodec->release();
+ mCodec.clear();
handleError(err);
return;
}
@@ -152,6 +154,8 @@ void NuPlayer::Decoder::onConfigure(const sp<AMessage> &format) {
err = mCodec->start();
if (err != OK) {
ALOGE("Failed to start %s decoder (err=%d)", mComponentName.c_str(), err);
+ mCodec->release();
+ mCodec.clear();
handleError(err);
return;
}
@@ -511,9 +515,9 @@ void NuPlayer::Decoder::onFlush() {
if (err != OK) {
ALOGE("failed to flush %s (err=%d)", mComponentName.c_str(), err);
handleError(err);
- return;
+ // finish with posting kWhatFlushCompleted.
+ // we attempt to release the buffers even if flush fails.
}
-
releaseAndResetMediaBuffers();
sp<AMessage> notify = mNotify->dup();
@@ -551,7 +555,7 @@ void NuPlayer::Decoder::onShutdown() {
if (err != OK) {
ALOGE("failed to release %s (err=%d)", mComponentName.c_str(), err);
handleError(err);
- return;
+ // finish with posting kWhatShutdownCompleted.
}
sp<AMessage> notify = mNotify->dup();