Unifying TimedTextDriver's resume() and start().
(cherry picked from gtv bb23a2b7e06c59f56e353fd4a2a66a9b8179d425)
Change-Id: If5f14549fa315c34e32d6fed7c1ea09deabceb63
diff --git a/include/media/stagefright/timedtext/TimedTextDriver.h b/include/media/stagefright/timedtext/TimedTextDriver.h
index e705a04..f23c337 100644
--- a/include/media/stagefright/timedtext/TimedTextDriver.h
+++ b/include/media/stagefright/timedtext/TimedTextDriver.h
@@ -40,7 +40,6 @@
status_t start();
status_t pause();
- status_t resume();
status_t selectTrack(size_t index);
status_t unselectTrack(size_t index);
@@ -65,6 +64,7 @@
enum State {
UNINITIALIZED,
+ PREPARED,
PLAYING,
PAUSED,
};
diff --git a/media/libstagefright/timedtext/TimedTextDriver.cpp b/media/libstagefright/timedtext/TimedTextDriver.cpp
index 71da803..54ce7ac 100644
--- a/media/libstagefright/timedtext/TimedTextDriver.cpp
+++ b/media/libstagefright/timedtext/TimedTextDriver.cpp
@@ -61,7 +61,7 @@
source = mTextSourceVector.valueFor(index);
mPlayer->setDataSource(source);
if (mState == UNINITIALIZED) {
- mState = PAUSED;
+ mState = PREPARED;
}
mCurrentTrackIndex = index;
return OK;
@@ -74,44 +74,10 @@
return INVALID_OPERATION;
case PLAYING:
return OK;
- case PAUSED:
+ case PREPARED:
mPlayer->start();
mState = PLAYING;
return OK;
- default:
- TRESPASS();
- }
- return UNKNOWN_ERROR;
-}
-
-// TODO: Test if pause() works properly.
-// Scenario 1: start - pause - resume
-// Scenario 2: start - seek
-// Scenario 3: start - pause - seek - resume
-status_t TimedTextDriver::pause() {
- Mutex::Autolock autoLock(mLock);
- switch (mState) {
- case UNINITIALIZED:
- return INVALID_OPERATION;
- case PLAYING:
- mPlayer->pause();
- mState = PAUSED;
- return OK;
- case PAUSED:
- return OK;
- default:
- TRESPASS();
- }
- return UNKNOWN_ERROR;
-}
-
-status_t TimedTextDriver::resume() {
- Mutex::Autolock autoLock(mLock);
- switch (mState) {
- case UNINITIALIZED:
- return INVALID_OPERATION;
- case PLAYING:
- return OK;
case PAUSED:
mPlayer->resume();
mState = PLAYING;
@@ -122,11 +88,33 @@
return UNKNOWN_ERROR;
}
+status_t TimedTextDriver::pause() {
+ Mutex::Autolock autoLock(mLock);
+ ALOGV("%s() is called", __FUNCTION__);
+ switch (mState) {
+ case UNINITIALIZED:
+ return INVALID_OPERATION;
+ case PLAYING:
+ mPlayer->pause();
+ mState = PAUSED;
+ return OK;
+ case PREPARED:
+ return INVALID_OPERATION;
+ case PAUSED:
+ return OK;
+ default:
+ TRESPASS();
+ }
+ return UNKNOWN_ERROR;
+}
+
status_t TimedTextDriver::selectTrack(size_t index) {
status_t ret = OK;
Mutex::Autolock autoLock(mLock);
+ ALOGV("%s() is called", __FUNCTION__);
switch (mState) {
case UNINITIALIZED:
+ case PREPARED:
case PAUSED:
ret = selectTrack_l(index);
break;
@@ -146,6 +134,7 @@
status_t TimedTextDriver::unselectTrack(size_t index) {
Mutex::Autolock autoLock(mLock);
+ ALOGV("%s() is called", __FUNCTION__);
if (mCurrentTrackIndex != index) {
return INVALID_OPERATION;
}
@@ -156,6 +145,7 @@
mPlayer->pause();
mState = UNINITIALIZED;
return OK;
+ case PREPARED:
case PAUSED:
mState = UNINITIALIZED;
return OK;
@@ -167,11 +157,18 @@
status_t TimedTextDriver::seekToAsync(int64_t timeUs) {
Mutex::Autolock autoLock(mLock);
+ ALOGV("%s() is called", __FUNCTION__);
switch (mState) {
case UNINITIALIZED:
return INVALID_OPERATION;
+ case PREPARED:
+ mPlayer->seekToAsync(timeUs);
+ mPlayer->pause();
+ mState = PAUSED;
+ return OK;
case PAUSED:
mPlayer->seekToAsync(timeUs);
+ mPlayer->pause();
return OK;
case PLAYING:
mPlayer->seekToAsync(timeUs);