Signal end of stream if no more fragments are going to be available.

Change-Id: I16696740d3551aa8a5ba904ec757c64b0ecd1307
diff --git a/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp b/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp
index 7938fa4..6850842 100644
--- a/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp
+++ b/media/libmediaplayerservice/nuplayer/mp4/Parser.cpp
@@ -144,7 +144,8 @@
 
 Parser::Parser()
     : mBufferPos(0),
-      mSuspended(false) {
+      mSuspended(false),
+      mFinalResult(OK) {
 }
 
 Parser::~Parser() {
@@ -292,6 +293,13 @@
 
             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 @@
         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 50c96bb..c8f9ad4 100644
--- a/media/libmediaplayerservice/nuplayer/mp4/Parser.h
+++ b/media/libmediaplayerservice/nuplayer/mp4/Parser.h
@@ -157,6 +157,8 @@
 
     uint32_t mCurrentTrackID;
 
+    status_t mFinalResult;
+
     TrackFragmentHeaderInfo mTrackFragmentHeaderInfo;
 
     status_t onProceed();