added starting/stopping of playback threads

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17358 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen 2006-05-07 20:41:07 +00:00
parent 0aaf5eb1ae
commit 0e49470a24
2 changed files with 64 additions and 0 deletions

View File

@ -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;
}

View File

@ -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;
};