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