diff --git a/app/codec/oiio/oiiodecoder.cpp b/app/codec/oiio/oiiodecoder.cpp index 38d210437..f7592b757 100644 --- a/app/codec/oiio/oiiodecoder.cpp +++ b/app/codec/oiio/oiiodecoder.cpp @@ -98,6 +98,8 @@ bool OIIODecoder::Probe(Footage *f, const QAtomicInt *cancelled) bool OIIODecoder::Open() { + QMutexLocker locker(&mutex_); + image_ = OIIO::ImageInput::open(stream()->footage()->filename().toStdString()); if (!image_) { @@ -130,11 +132,15 @@ bool OIIODecoder::Open() pix_fmt_info_ = PixelService::GetPixelFormatInfo(static_cast(pix_fmt_)); + open_ = true; + return true; } Decoder::RetrieveState OIIODecoder::GetRetrieveState(const rational &time) { + QMutexLocker locker(&mutex_); + if (!open_) { return kFailedToOpen; } @@ -144,7 +150,9 @@ Decoder::RetrieveState OIIODecoder::GetRetrieveState(const rational &time) FramePtr OIIODecoder::RetrieveVideo(const rational &timecode) { - if (!open_ && !Open()) { + QMutexLocker locker(&mutex_); + + if (!open_) { return nullptr; } @@ -172,7 +180,9 @@ FramePtr OIIODecoder::RetrieveVideo(const rational &timecode) void OIIODecoder::Close() { - if (image_ != nullptr) { + QMutexLocker locker(&mutex_); + + if (image_) { image_->close(); #if OIIO_VERSION < 10903 OIIO::ImageInput::destroy(image_); diff --git a/app/codec/oiio/oiiodecoder.h b/app/codec/oiio/oiiodecoder.h index 8f156cb75..fbbc7e8b5 100644 --- a/app/codec/oiio/oiiodecoder.h +++ b/app/codec/oiio/oiiodecoder.h @@ -36,10 +36,8 @@ public: virtual bool Probe(Footage *f, const QAtomicInt* cancelled) override; virtual bool Open() override; - virtual RetrieveState GetRetrieveState(const rational &time) override; virtual FramePtr RetrieveVideo(const rational &timecode) override; - virtual void Close() override; virtual bool SupportsVideo() override;