diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-05-24 20:50:19 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-05-24 20:50:19 +0200 |
| commit | d39f2ce23a8d12c11b0ccafc4568761802101ba0 (patch) | |
| tree | 2e081c8a33f9f0c037dbdfb6290f2505f97623a6 /src/lib/cuda.h | |
| parent | 9d967309911e96d2ab752692fee7eb64c2b3a43a (diff) | |
Playback sort of works.
Diffstat (limited to 'src/lib/cuda.h')
| -rw-r--r-- | src/lib/cuda.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/lib/cuda.h b/src/lib/cuda.h new file mode 100644 index 000000000..8d89c7df7 --- /dev/null +++ b/src/lib/cuda.h @@ -0,0 +1,71 @@ +/* + Copyright (C) 2022 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "image.h" +#include <dcp/array_data.h> +extern "C" { +#include <libavutil/pixfmt.h> +} +#include <boost/thread/condition.hpp> +#include <boost/thread/mutex.hpp> +#include <memory> +#include <queue> +#include <thread> + + +class CUDA +{ +public: + CUDA(); + + CUDA(CUDA &) = delete; + CUDA(CUDA &&) = delete; + + std::shared_ptr<Image> decode(std::shared_ptr<const dcp::Data> j2k_data, int reduce, AVPixelFormat pixel_format, Image::Alignment alignment); + + static CUDA* instance(); + +private: + void decode_thread(); + + typedef uint64_t ID; + + class DecodeQueueItem + { + public: + ID id; + std::shared_ptr<const dcp::Data> data; + int reduce; + AVPixelFormat pixel_format; + Image::Alignment alignment; + }; + + std::queue<DecodeQueueItem> _decode_queue; + std::map<ID, std::shared_ptr<Image>> _decode_output; + boost::condition _decode_queue_empty_condition; + boost::condition _decode_complete_condition; + boost::mutex _decode_mutex; + std::thread _decode_thread; + ID _next_decode_id = 0; + + static CUDA* _instance; +}; + |
