summaryrefslogtreecommitdiff
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/nuplayer/mp4/Parser.cpp14
-rw-r--r--media/libmediaplayerservice/nuplayer/mp4/Parser.h2
2 files changed, 15 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp b/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp
index 7938fa4c..68508426 100644
--- a/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp
+++ b/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp
@@ -144,7 +144,8 @@ struct FileSource : public Parser::Source {
Parser::Parser()
: mBufferPos(0),
- mSuspended(false) {
+ mSuspended(false),
+ mFinalResult(OK) {
}
Parser::~Parser() {
@@ -292,6 +293,13 @@ void Parser::onMessageReceived(const sp<AMessage> &msg) {
if (n < (ssize_t)needed) {
ALOGI("%s", "Reached EOF");
+ if (n < 0) {
+ mFinalResult = n;
+ } else if (n == 0) {
+ mFinalResult = ERROR_END_OF_STREAM;
+ } else {
+ mFinalResult = ERROR_IO;
+ }
} else {
mBuffer->setRange(0, mBuffer->size() + n);
(new AMessage(kWhatProceed, id()))->post();
@@ -593,6 +601,10 @@ status_t Parser::getSample(
TrackInfo *info, sp<TrackFragment> *fragment, SampleInfo *sampleInfo) {
for (;;) {
if (info->mFragments.empty()) {
+ if (mFinalResult != OK) {
+ return mFinalResult;
+ }
+
resumeIfNecessary();
return -EWOULDBLOCK;
}
diff --git a/media/libmediaplayerservice/nuplayer/mp4/Parser.h b/media/libmediaplayerservice/nuplayer/mp4/Parser.h
index 50c96bb7..c8f9ad4d 100644
--- a/media/libmediaplayerservice/nuplayer/mp4/Parser.h
+++ b/media/libmediaplayerservice/nuplayer/mp4/Parser.h
@@ -157,6 +157,8 @@ private:
uint32_t mCurrentTrackID;
+ status_t mFinalResult;
+
TrackFragmentHeaderInfo mTrackFragmentHeaderInfo;
status_t onProceed();