Merge "Implement missing pause/resume support for NuPlayer." into honeycomb
This commit is contained in:
committed by
Android (Google) Code Review
commit
c4f82e3387
@@ -92,11 +92,11 @@ void NuPlayer::start() {
|
||||
}
|
||||
|
||||
void NuPlayer::pause() {
|
||||
// XXX to be implemented
|
||||
(new AMessage(kWhatPause, id()))->post();
|
||||
}
|
||||
|
||||
void NuPlayer::resume() {
|
||||
// XXX to be implemented
|
||||
(new AMessage(kWhatResume, id()))->post();
|
||||
}
|
||||
|
||||
void NuPlayer::resetAsync() {
|
||||
@@ -430,6 +430,20 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
|
||||
break;
|
||||
}
|
||||
|
||||
case kWhatPause:
|
||||
{
|
||||
CHECK(mRenderer != NULL);
|
||||
mRenderer->pause();
|
||||
break;
|
||||
}
|
||||
|
||||
case kWhatResume:
|
||||
{
|
||||
CHECK(mRenderer != NULL);
|
||||
mRenderer->resume();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
TRESPASS();
|
||||
break;
|
||||
|
||||
@@ -75,6 +75,8 @@ private:
|
||||
kWhatRendererNotify,
|
||||
kWhatReset,
|
||||
kWhatSeek,
|
||||
kWhatPause,
|
||||
kWhatResume,
|
||||
};
|
||||
|
||||
wp<NuPlayerDriver> mDriver;
|
||||
|
||||
@@ -42,7 +42,8 @@ NuPlayer::Renderer::Renderer(
|
||||
mFlushingVideo(false),
|
||||
mHasAudio(mAudioSink != NULL),
|
||||
mHasVideo(true),
|
||||
mSyncQueues(mHasAudio && mHasVideo) {
|
||||
mSyncQueues(mHasAudio && mHasVideo),
|
||||
mPaused(false) {
|
||||
}
|
||||
|
||||
NuPlayer::Renderer::~Renderer() {
|
||||
@@ -93,6 +94,14 @@ void NuPlayer::Renderer::signalTimeDiscontinuity() {
|
||||
mSyncQueues = mHasAudio && mHasVideo;
|
||||
}
|
||||
|
||||
void NuPlayer::Renderer::pause() {
|
||||
(new AMessage(kWhatPause, id()))->post();
|
||||
}
|
||||
|
||||
void NuPlayer::Renderer::resume() {
|
||||
(new AMessage(kWhatResume, id()))->post();
|
||||
}
|
||||
|
||||
void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
|
||||
switch (msg->what()) {
|
||||
case kWhatDrainAudioQueue:
|
||||
@@ -151,6 +160,18 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
|
||||
break;
|
||||
}
|
||||
|
||||
case kWhatPause:
|
||||
{
|
||||
onPause();
|
||||
break;
|
||||
}
|
||||
|
||||
case kWhatResume:
|
||||
{
|
||||
onResume();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
TRESPASS();
|
||||
break;
|
||||
@@ -158,7 +179,7 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
|
||||
}
|
||||
|
||||
void NuPlayer::Renderer::postDrainAudioQueue() {
|
||||
if (mDrainAudioQueuePending || mSyncQueues) {
|
||||
if (mDrainAudioQueuePending || mSyncQueues || mPaused) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -254,7 +275,7 @@ void NuPlayer::Renderer::onDrainAudioQueue() {
|
||||
}
|
||||
|
||||
void NuPlayer::Renderer::postDrainVideoQueue() {
|
||||
if (mDrainVideoQueuePending || mSyncQueues) {
|
||||
if (mDrainVideoQueuePending || mSyncQueues || mPaused) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -528,5 +549,39 @@ void NuPlayer::Renderer::notifyPosition() {
|
||||
notify->post();
|
||||
}
|
||||
|
||||
void NuPlayer::Renderer::onPause() {
|
||||
CHECK(!mPaused);
|
||||
|
||||
mDrainAudioQueuePending = false;
|
||||
++mAudioQueueGeneration;
|
||||
|
||||
mDrainVideoQueuePending = false;
|
||||
++mVideoQueueGeneration;
|
||||
|
||||
if (mHasAudio) {
|
||||
mAudioSink->pause();
|
||||
}
|
||||
|
||||
mPaused = true;
|
||||
}
|
||||
|
||||
void NuPlayer::Renderer::onResume() {
|
||||
CHECK(mPaused);
|
||||
|
||||
if (mHasAudio) {
|
||||
mAudioSink->start();
|
||||
}
|
||||
|
||||
mPaused = false;
|
||||
|
||||
if (!mAudioQueue.empty()) {
|
||||
postDrainAudioQueue();
|
||||
}
|
||||
|
||||
if (!mVideoQueue.empty()) {
|
||||
postDrainVideoQueue();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
|
||||
|
||||
@@ -41,6 +41,9 @@ struct NuPlayer::Renderer : public AHandler {
|
||||
|
||||
void signalAudioSinkChanged();
|
||||
|
||||
void pause();
|
||||
void resume();
|
||||
|
||||
enum {
|
||||
kWhatEOS,
|
||||
kWhatFlushComplete,
|
||||
@@ -60,6 +63,8 @@ private:
|
||||
kWhatQueueEOS,
|
||||
kWhatFlush,
|
||||
kWhatAudioSinkChanged,
|
||||
kWhatPause,
|
||||
kWhatResume,
|
||||
};
|
||||
|
||||
struct QueueEntry {
|
||||
@@ -91,6 +96,8 @@ private:
|
||||
bool mHasVideo;
|
||||
bool mSyncQueues;
|
||||
|
||||
bool mPaused;
|
||||
|
||||
void onDrainAudioQueue();
|
||||
void postDrainAudioQueue();
|
||||
|
||||
@@ -101,6 +108,8 @@ private:
|
||||
void onQueueEOS(const sp<AMessage> &msg);
|
||||
void onFlush(const sp<AMessage> &msg);
|
||||
void onAudioSinkChanged();
|
||||
void onPause();
|
||||
void onResume();
|
||||
|
||||
void notifyEOS(bool audio);
|
||||
void notifyFlushComplete(bool audio);
|
||||
|
||||
Reference in New Issue
Block a user