Hacks to multi-thread GPU encoding.
[dcpomatic.git] / src / lib / j2k_encoder_fastvideo_backend.h
1 #ifndef DCPOMATIC_J2K_ENCODER_FASTVIDEO_BACKEND_H
2 #define DCPOMATIC_J2K_ENCODER_FASTVIDEO_BACKEND_H
3
4
5 #include "j2k_encoder_backend.h"
6 #include <dcp/util.h>
7 #include <fastvideo_encoder_j2k.h>
8 #include <fastvideo_sdk.h>
9 #include <boost/thread.hpp>
10 #include <boost/thread/barrier.hpp>
11
12
13 class J2KEncoderFastvideoBackend : public J2KEncoderBackend
14 {
15 public:
16         J2KEncoderFastvideoBackend (boost::barrier& barrier);
17         ~J2KEncoderFastvideoBackend ();
18
19         std::vector<dcp::Data> encode (std::vector<boost::shared_ptr<DCPVideo> > video);
20
21         int quantity () const {
22                 return 4;
23         }
24
25 private:
26         void setup (dcp::Size size);
27
28         boost::barrier& _barrier;
29         bool _setup_done;
30         fastImportFromHostHandle_t _adapter;
31         fastDeviceSurfaceBufferHandle_t _src_buffer;
32         fastEncoderJ2kHandle_t _encoder;
33         uint16_t* _xyz_buffer;
34         int _xyz_buffer_stride;
35 };
36
37 #endif
38