You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/mpeglib/lib/output/threadSafeOutputStream.cpp

154 lines
3.8 KiB

/*
thread safe wrapper for output Stream
Copyright (C) 2000 Martin Vogt
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation.
For more information look at the file COPYRIGHT in this package
*/
#include "threadSafeOutputStream.h"
ThreadSafeOutputStream::ThreadSafeOutputStream(OutputStream* output) {
threadQueueAudio=new ThreadQueue();
threadQueueVideo=new ThreadQueue();
this->output=output;
}
ThreadSafeOutputStream::~ThreadSafeOutputStream() {
delete threadQueueAudio;
delete threadQueueVideo;
delete output;
}
int ThreadSafeOutputStream::audioInit() {
int back;
threadQueueAudio->waitForExclusiveAccess();
back=output->audioInit();
threadQueueAudio->releaseExclusiveAccess();
return back;
}
int ThreadSafeOutputStream::audioSetup(int freq,int stereo,
int sign,int big,int sampleSize) {
int back;
threadQueueAudio->waitForExclusiveAccess();
back=output->audioSetup(freq,stereo,sign,big,sampleSize);
threadQueueAudio->releaseExclusiveAccess();
return back;
}
int ThreadSafeOutputStream::audioPlay(TimeStamp* start,
TimeStamp* end,char* buf, int len) {
int back;
threadQueueAudio->waitForExclusiveAccess();
back=output->audioPlay(start,end,buf,len);
threadQueueAudio->releaseExclusiveAccess();
return back;
}
void ThreadSafeOutputStream::audioFlush() {
threadQueueAudio->waitForExclusiveAccess();
output->audioFlush();
threadQueueAudio->releaseExclusiveAccess();
}
void ThreadSafeOutputStream::audioClose() {
threadQueueAudio->waitForExclusiveAccess();
output->audioClose();
threadQueueAudio->releaseExclusiveAccess();
}
void ThreadSafeOutputStream::audioOpen() {
threadQueueAudio->waitForExclusiveAccess();
output->audioOpen();
threadQueueAudio->releaseExclusiveAccess();
}
int ThreadSafeOutputStream::getPreferredDeliverSize() {
int back;
threadQueueAudio->waitForExclusiveAccess();
back=output->getPreferredDeliverSize();
threadQueueAudio->releaseExclusiveAccess();
return back;
}
int ThreadSafeOutputStream::videoInit() {
int back;
threadQueueVideo->waitForExclusiveAccess();
back=output->videoInit();
threadQueueVideo->releaseExclusiveAccess();
return back;
}
int ThreadSafeOutputStream::openWindow(int w, int h,const char* title) {
int back;
threadQueueVideo->waitForExclusiveAccess();
back=output->openWindow(w,h,title);
threadQueueVideo->releaseExclusiveAccess();
return back;
}
void ThreadSafeOutputStream::closeWindow() {
threadQueueVideo->waitForExclusiveAccess();
output->closeWindow();
threadQueueVideo->releaseExclusiveAccess();
}
void ThreadSafeOutputStream::flushWindow() {
threadQueueVideo->waitForExclusiveAccess();
output->flushWindow();
threadQueueVideo->releaseExclusiveAccess();
}
PictureArray* ThreadSafeOutputStream::lockPictureArray() {
PictureArray* back;
threadQueueVideo->waitForExclusiveAccess();
back=output->lockPictureArray();
threadQueueVideo->releaseExclusiveAccess();
return back;
}
void ThreadSafeOutputStream::unlockPictureArray(PictureArray* array) {
threadQueueVideo->waitForExclusiveAccess();
output->unlockPictureArray(array);
threadQueueVideo->releaseExclusiveAccess();
}
int ThreadSafeOutputStream::getFrameusec() {
int back;
threadQueueVideo->waitForExclusiveAccess();
back=output->getFrameusec();
threadQueueVideo->releaseExclusiveAccess();
return back;
}
void ThreadSafeOutputStream::config(const char* key,
const char* value,void* user_data) {
threadQueueVideo->waitForExclusiveAccess();
threadQueueAudio->waitForExclusiveAccess();
output->config(key,value,user_data);
threadQueueVideo->releaseExclusiveAccess();
threadQueueAudio->releaseExclusiveAccess();
}