From 8b0c7edfec17f17e22f469af0213835784fc0171 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 26 Jan 2020 11:33:45 +1100 Subject: [PATCH] OIIO: added support for OIIO 1.x OIIO 2.x uses std::unique_ptr while 1.x uses raw pointers. Olive can now handle both, manually destroying the raw pointers when necessary if running on OIIO 1.x. --- app/codec/oiio/oiiodecoder.cpp | 3 +++ app/codec/oiio/oiiodecoder.h | 4 ++++ app/render/backend/videorenderbackend.cpp | 4 ++++ app/render/backend/videorenderworker.cpp | 6 +++++- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/codec/oiio/oiiodecoder.cpp b/app/codec/oiio/oiiodecoder.cpp index d3d455b1f..c01e20e4a 100644 --- a/app/codec/oiio/oiiodecoder.cpp +++ b/app/codec/oiio/oiiodecoder.cpp @@ -139,6 +139,9 @@ void OIIODecoder::Close() { if (image_ != nullptr) { image_->close(); +#if OIIO_VERSION < 10903 + OIIO::ImageInput::destroy(image_); +#endif image_ = nullptr; } diff --git a/app/codec/oiio/oiiodecoder.h b/app/codec/oiio/oiiodecoder.h index ae99bf78e..3d392071f 100644 --- a/app/codec/oiio/oiiodecoder.h +++ b/app/codec/oiio/oiiodecoder.h @@ -46,7 +46,11 @@ public: virtual bool SupportsVideo() override; private: +#if OIIO_VERSION < 10903 + OIIO::ImageInput* image_; +#else std::unique_ptr image_; +#endif int width_; diff --git a/app/render/backend/videorenderbackend.cpp b/app/render/backend/videorenderbackend.cpp index 3bb9349ea..117023634 100644 --- a/app/render/backend/videorenderbackend.cpp +++ b/app/render/backend/videorenderbackend.cpp @@ -211,6 +211,10 @@ const char *VideoRenderBackend::GetCachedFrame(const rational &time) in->close(); +#if OIIO_VERSION < 10903 + OIIO::ImageInput::destroy(in); +#endif + return cache_frame_load_buffer_.constData(); } else { qWarning() << "OIIO Error:" << OIIO::geterror().c_str(); diff --git a/app/render/backend/videorenderworker.cpp b/app/render/backend/videorenderworker.cpp index b50279ee4..dd8f6b1ee 100644 --- a/app/render/backend/videorenderworker.cpp +++ b/app/render/backend/videorenderworker.cpp @@ -226,12 +226,16 @@ void VideoRenderWorker::Download(QVariant texture, QString filename) std::string working_fn_std = filename.toStdString(); - std::unique_ptr out = OIIO::ImageOutput::create(working_fn_std); + auto out = OIIO::ImageOutput::create(working_fn_std); if (out) { out->open(working_fn_std, spec); out->write_image(format_info.oiio_desc, download_buffer_.data()); out->close(); + +#if OIIO_VERSION < 10903 + OIIO::ImageOutput::destroy(out); +#endif } else { qWarning() << "Failed to open output file:" << filename; }