From 0e49470a24d0136e80b367891f0485c80d76bb7e Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Sun, 7 May 2006 20:41:07 +0000 Subject: [PATCH] added starting/stopping of playback threads git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17358 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/mediaplayer/Controller.cpp | 57 +++++++++++++++++++++++++++++ src/apps/mediaplayer/Controller.h | 7 ++++ 2 files changed, 64 insertions(+) diff --git a/src/apps/mediaplayer/Controller.cpp b/src/apps/mediaplayer/Controller.cpp index a4419f964a..6f728a8b7a 100644 --- a/src/apps/mediaplayer/Controller.cpp +++ b/src/apps/mediaplayer/Controller.cpp @@ -26,6 +26,10 @@ #include "Controller.h" #include "VideoView.h" + +#define AUDIO_PRIORITY 10 +#define VIDEO_PRIORITY 10 + void HandleError(const char *text, status_t err) { @@ -49,12 +53,19 @@ Controller::Controller() , fPosition(0) , fAudioPlaySem(create_sem(1, "audio playing")) , fVideoPlaySem(create_sem(1, "video playing")) + , fAudioPlayThread(-1) + , fVideoPlayThread(-1) + , fStopAudioPlayback(false) + , fStopVideoPlayback(false) { } Controller::~Controller() { + StopAudioPlayback(); + StopVideoPlayback(); + if (fMediaFile) fMediaFile->ReleaseAllTracks(); delete fMediaFile; @@ -328,3 +339,49 @@ void Controller::VideoPlayThread() { } + + +void +Controller::StartAudioPlayback() +{ + if (fAudioPlayThread > 0) + return; + fStopAudioPlayback = false; + fAudioPlayThread = spawn_thread(audio_play_thread, "audio playback", AUDIO_PRIORITY, this); + resume_thread(fAudioPlayThread); +} + + +void +Controller::StartVideoPlayback() +{ + if (fVideoPlayThread > 0) + return; + fStopVideoPlayback = false; + fVideoPlayThread = spawn_thread(video_play_thread, "video playback", VIDEO_PRIORITY, this); + resume_thread(fVideoPlayThread); +} + + +void +Controller::StopAudioPlayback() +{ + if (fAudioPlayThread < 0) + return; + fStopAudioPlayback = true; + status_t dummy; + wait_for_thread(fAudioPlayThread, &dummy); + fAudioPlayThread = -1; +} + + +void +Controller::StopVideoPlayback() +{ + if (fVideoPlayThread < 0) + return; + fStopVideoPlayback = true; + status_t dummy; + wait_for_thread(fVideoPlayThread, &dummy); + fVideoPlayThread = -1; +} diff --git a/src/apps/mediaplayer/Controller.h b/src/apps/mediaplayer/Controller.h index c5680f8088..57e4b82647 100644 --- a/src/apps/mediaplayer/Controller.h +++ b/src/apps/mediaplayer/Controller.h @@ -67,6 +67,11 @@ private: void AudioPlayThread(); void VideoPlayThread(); + + void StartAudioPlayback(); + void StartVideoPlayback(); + void StopAudioPlayback(); + void StopVideoPlayback(); private: VideoView * fVideoView; @@ -85,6 +90,8 @@ private: sem_id fVideoPlaySem; thread_id fAudioPlayThread; thread_id fVideoPlayThread; + volatile bool fStopAudioPlayback; + volatile bool fStopVideoPlayback; };