@@ -35,6 +35,7 @@ NuPlayerDriver::NuPlayerDriver()
3535 mNumFramesDropped(0 ),
3636 mLooper(new ALooper),
3737 mState(UNINITIALIZED ),
38+ mAtEOS(false ),
3839 mStartupSeekTimeUs(-1 ) {
3940 mLooper ->setName (" NuPlayerDriver Looper" );
4041
@@ -106,7 +107,7 @@ status_t NuPlayerDriver::prepare() {
106107}
107108
108109status_t NuPlayerDriver::prepareAsync () {
109- sendEvent (MEDIA_PREPARED );
110+ notifyListener (MEDIA_PREPARED );
110111
111112 return OK ;
112113}
@@ -117,6 +118,7 @@ status_t NuPlayerDriver::start() {
117118 return INVALID_OPERATION ;
118119 case STOPPED :
119120 {
121+ mAtEOS = false ;
120122 mPlayer ->start ();
121123
122124 if (mStartupSeekTimeUs >= 0 ) {
@@ -173,7 +175,7 @@ status_t NuPlayerDriver::pause() {
173175}
174176
175177bool NuPlayerDriver::isPlaying () {
176- return mState == PLAYING ;
178+ return mState == PLAYING && ! mAtEOS ;
177179}
178180
179181status_t NuPlayerDriver::seekTo (int msec) {
@@ -190,6 +192,7 @@ status_t NuPlayerDriver::seekTo(int msec) {
190192 case PLAYING :
191193 case PAUSED :
192194 {
195+ mAtEOS = false ;
193196 mPlayer ->seekToAsync (seekTimeUs);
194197 break ;
195198 }
@@ -291,7 +294,7 @@ void NuPlayerDriver::notifyPosition(int64_t positionUs) {
291294}
292295
293296void NuPlayerDriver::notifySeekComplete () {
294- sendEvent (MEDIA_SEEK_COMPLETE );
297+ notifyListener (MEDIA_SEEK_COMPLETE );
295298}
296299
297300void NuPlayerDriver::notifyFrameStats (
@@ -320,4 +323,12 @@ status_t NuPlayerDriver::dump(int fd, const Vector<String16> &args) const {
320323 return OK ;
321324}
322325
326+ void NuPlayerDriver::notifyListener (int msg, int ext1, int ext2) {
327+ if (msg == MEDIA_PLAYBACK_COMPLETE || msg == MEDIA_ERROR ) {
328+ mAtEOS = true ;
329+ }
330+
331+ sendEvent (msg, ext1, ext2);
332+ }
333+
323334} // namespace android
0 commit comments