diff options
Diffstat (limited to 'mpeglib/lib/output/threadSafeOutputStream.cpp')
-rw-r--r-- | mpeglib/lib/output/threadSafeOutputStream.cpp | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/mpeglib/lib/output/threadSafeOutputStream.cpp b/mpeglib/lib/output/threadSafeOutputStream.cpp new file mode 100644 index 00000000..ec7ab510 --- /dev/null +++ b/mpeglib/lib/output/threadSafeOutputStream.cpp @@ -0,0 +1,153 @@ +/* + 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(); + +} + + + |