summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-08-09 16:24:54 -0700
committerAndreas Huber <andih@google.com>2012-08-09 16:35:00 -0700
commitc7708555ea7511aea684e00a55fb5309281540ce (patch)
treef3f8387559ca0a200e459b45a058fe5e5d2a7fab /media/libmediaplayerservice/nuplayer
parentfaa88edb9df91b0e7725b0ee4c4fb5e92262b3d5 (diff)
downloadframeworks_av-c7708555ea7511aea684e00a55fb5309281540ce.zip
frameworks_av-c7708555ea7511aea684e00a55fb5309281540ce.tar.gz
frameworks_av-c7708555ea7511aea684e00a55fb5309281540ce.tar.bz2
Signal end of stream if no more fragments are going to be available.
Change-Id: I16696740d3551aa8a5ba904ec757c64b0ecd1307
Diffstat (limited to 'media/libmediaplayerservice/nuplayer')
-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 7938fa4..6850842 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 50c96bb..c8f9ad4 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();