diff options
Diffstat (limited to 'mpeglib/lib/input/threadSafeInputStream.cpp')
-rw-r--r-- | mpeglib/lib/input/threadSafeInputStream.cpp | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/mpeglib/lib/input/threadSafeInputStream.cpp b/mpeglib/lib/input/threadSafeInputStream.cpp new file mode 100644 index 00000000..8b18a4c5 --- /dev/null +++ b/mpeglib/lib/input/threadSafeInputStream.cpp @@ -0,0 +1,137 @@ +/* + thread safe wrapper for input 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 "threadSafeInputStream.h" + + +ThreadSafeInputStream::ThreadSafeInputStream(InputStream* input) { + threadQueue=new ThreadQueue(); + this->input=input; +} + + +ThreadSafeInputStream::~ThreadSafeInputStream() { + delete threadQueue; + delete input; +} + + + +int ThreadSafeInputStream::open(const char* dest) { + int back; + threadQueue->waitForExclusiveAccess(); + back=input->open(dest); + threadQueue->releaseExclusiveAccess(); + return back; +} + + +void ThreadSafeInputStream::close() { + threadQueue->waitForExclusiveAccess(); + input->close(); + threadQueue->releaseExclusiveAccess(); +} + + +int ThreadSafeInputStream::isOpen() { + int back; + threadQueue->waitForExclusiveAccess(); + back=input->isOpen(); + threadQueue->releaseExclusiveAccess(); + return back; +} + + +int ThreadSafeInputStream::eof() { + int back; + threadQueue->waitForExclusiveAccess(); + back=input->eof(); + threadQueue->releaseExclusiveAccess(); + return back; +} + + +int ThreadSafeInputStream::read(char* buf,int len) { + int back; + threadQueue->waitForExclusiveAccess(); + back=input->read(buf,len); + threadQueue->releaseExclusiveAccess(); + return back; +} + + +int ThreadSafeInputStream::seek(long bytePos) { + int back; + threadQueue->waitForExclusiveAccess(); + back=input->seek(bytePos); + threadQueue->releaseExclusiveAccess(); + return back; +} + +void ThreadSafeInputStream::clear() { + threadQueue->waitForExclusiveAccess(); + input->clear(); + threadQueue->releaseExclusiveAccess(); +} + + +long ThreadSafeInputStream::getByteLength() { + long back; + threadQueue->waitForExclusiveAccess(); + back=input->getByteLength(); + threadQueue->releaseExclusiveAccess(); + return back; +} + + +long ThreadSafeInputStream::getBytePosition() { + long back; + threadQueue->waitForExclusiveAccess(); + back=input->getBytePosition(); + threadQueue->releaseExclusiveAccess(); + return back; +} + + +void ThreadSafeInputStream::insertTimeStamp(TimeStamp* src,long key,int len) { + threadQueue->waitForExclusiveAccess(); + input->insertTimeStamp(src,key,len); + threadQueue->releaseExclusiveAccess(); +} + + +TimeStamp* ThreadSafeInputStream::getTimeStamp(long key) { + TimeStamp* back; + threadQueue->waitForExclusiveAccess(); + back=input->getTimeStamp(key); + threadQueue->releaseExclusiveAccess(); + return back; +} + + +int ThreadSafeInputStream::bytesUntilNext(long key) { + int back; + threadQueue->waitForExclusiveAccess(); + back=input->bytesUntilNext(key); + threadQueue->releaseExclusiveAccess(); + return back; +} + +void ThreadSafeInputStream::print() { + threadQueue->waitForExclusiveAccess(); + input->print(); + threadQueue->releaseExclusiveAccess(); +} + + + |