summaryrefslogtreecommitdiff
path: root/src/lib/cuda_j2k_frame_encoder.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-05-23 00:41:35 +0200
committerCarl Hetherington <cth@carlh.net>2022-05-23 16:55:28 +0200
commit7ace2ca4cd301b4c69671a6983804c6a13ec72a0 (patch)
tree84c67cf1576ba63263469dd46d95e446cba0341b /src/lib/cuda_j2k_frame_encoder.h
parente7503b1a3c93121c27cec2804376f8621d793f6a (diff)
fixup! wip: Add CUDA J2K frame encoder using libjpeg2k.
Diffstat (limited to 'src/lib/cuda_j2k_frame_encoder.h')
-rw-r--r--src/lib/cuda_j2k_frame_encoder.h36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/lib/cuda_j2k_frame_encoder.h b/src/lib/cuda_j2k_frame_encoder.h
index 46ac64607..28e8a3c76 100644
--- a/src/lib/cuda_j2k_frame_encoder.h
+++ b/src/lib/cuda_j2k_frame_encoder.h
@@ -24,6 +24,7 @@
#include "j2k_frame_encoder.h"
+#include "types.h"
#include <dcp/types.h>
#include <nvjpeg2k.h>
#include <vector>
@@ -33,24 +34,39 @@ class CUDAJ2KFrameEncoder : public J2KFrameEncoder
{
public:
CUDAJ2KFrameEncoder();
- ~CUDAJ2KFrameEncoder();
- boost::optional<dcp::ArrayData> encode(DCPVideo const &) override;
+ std::vector<dcp::ArrayData> encode(DCPVideo const &) override;
+ std::vector<dcp::ArrayData> flush() override;
void log_thread_start() override;
private:
- void allocate(dcp::Size size);
- void free();
-
nvjpeg2kEncoder_t _encoder_handle;
nvjpeg2kEncodeState_t _encoder_state;
nvjpeg2kEncodeParams_t _encoder_params;
- uint8_t* _pixel_data_h[3];
- uint8_t* _pixel_data_d[3];
- size_t _pitch_in_bytes[3];
- nvjpeg2kImageComponentInfo_t _image_component_info[3];
- dcp::Size _allocated_size;
+ class Frame
+ {
+ public:
+ Frame(DCPVideo const& vf);
+ Frame(Frame const& other) = delete;
+ Frame(Frame&& other);
+ ~Frame();
+
+ Frame& operator=(Frame const& other) = delete;
+
+ nvjpeg2kImage_t const* const device_image() const {
+ return &_device_image;
+ }
+
+ private:
+ uint8_t* _pixel_data_d[3];
+ size_t _pitch_in_bytes[3];
+ nvjpeg2kImage_t _device_image;
+ };
+
+ std::vector<Frame> _batch;
+ boost::optional<dcp::Size> _size;
+ boost::optional<Resolution> _resolution;
};