Various work on poznan.
authorCarl Hetherington <cth@carlh.net>
Sat, 2 May 2015 21:10:21 +0000 (22:10 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 21 Mar 2016 16:41:08 +0000 (16:41 +0000)
src/lib/dcp_video.cc
src/lib/jpeg2000_encoder.cc
src/lib/jpeg2000_encoder.h
src/lib/openjpeg_encoder.cc
src/lib/openjpeg_encoder.h
src/lib/poznan_encoder.cc
src/lib/poznan_encoder.h

index 1933c0e35521b3fd75d4a168564c0792c85920e2..f3ac4da00ff863414b00c0aace7d794afe628737 100644 (file)
@@ -131,7 +131,7 @@ DCPVideo::encode_locally (dcp::NoteHandler note)
        }
 
        shared_ptr<EncodedData> enc = encoder->encode (
-               xyz, note, _j2k_bandwidth, _frames_per_second, _resolution, _frame->eyes() == EYES_LEFT || _frame->eyes() == EYES_RIGHT
+               xyz, _j2k_bandwidth, _frames_per_second, _resolution, _frame->eyes() == EYES_LEFT || _frame->eyes() == EYES_RIGHT
                );
 
        switch (_frame->eyes()) {
index 617e9fa7bda61d4312378bea54f4d73fc1263c2e..c7c39ea0e85ab2f03abfb0edb168f9119b61814b 100644 (file)
@@ -68,7 +68,7 @@ JPEG2000Encoder::from_id (string id)
 }
 
 shared_ptr<EncodedData>
-JPEG2000Encoder::encode (shared_ptr<const dcp::XYZImage> input,        dcp::NoteHandler note, int bandwidth, int frame_rate, Resolution resolution, bool threed)
+JPEG2000Encoder::encode (shared_ptr<const dcp::XYZImage> input,        int bandwidth, int frame_rate, Resolution resolution, bool threed)
 {
        std::cout << "Encoding with " << name() << "\n";
        
@@ -85,5 +85,5 @@ JPEG2000Encoder::encode (shared_ptr<const dcp::XYZImage> input,       dcp::NoteHandler
                parameters_changed ();
        }
 
-       return do_encode (input, note);
+       return do_encode (input);
 }
index a1e9a6669db494e896ffc6b8fb79c2e194fc545a..a05bd0ac5ab6240609cf97571bbc2e9eedd64b43 100644 (file)
@@ -49,7 +49,6 @@ public:
         */
        boost::shared_ptr<EncodedData> encode (
                boost::shared_ptr<const dcp::XYZImage> input,
-               dcp::NoteHandler note_handler,
                int bandwidth,
                int frame_rate,
                Resolution resolution,
@@ -64,8 +63,7 @@ public:
 protected:
 
        virtual boost::shared_ptr<EncodedData> do_encode (
-               boost::shared_ptr<const dcp::XYZImage> input,
-               dcp::NoteHandler note_handler
+               boost::shared_ptr<const dcp::XYZImage> input
                ) = 0;
 
        virtual void parameters_changed () {}
index 89de687f06a5bad8749f944645b0aaedfcda9349..9cfd8146c5859b6278cb7f390d56814fc208795a 100644 (file)
@@ -35,7 +35,7 @@ OpenJPEGEncoder::name () const
 }
 
 shared_ptr<EncodedData>
-OpenJPEGEncoder::do_encode (shared_ptr<const dcp::XYZImage> input, dcp::NoteHandler note)
+OpenJPEGEncoder::do_encode (shared_ptr<const dcp::XYZImage> input)
 {
        /* Set the max image and component sizes based on frame_rate */
        int max_cs_len = ((float) _bandwidth.get()) / 8 / _frame_rate.get();
index 94206f056c96b6dcc0fd8294b44bf41994d2ed3f..dd109e7c1baaf05f013c4ebf49811b3ca5208d67 100644 (file)
@@ -30,5 +30,5 @@ public:
        }
 
 protected:
-       boost::shared_ptr<EncodedData> do_encode (boost::shared_ptr<const dcp::XYZImage> input, dcp::NoteHandler note_handler);
+       boost::shared_ptr<EncodedData> do_encode (boost::shared_ptr<const dcp::XYZImage> input);
 };
index 4834a25893001fea09cb93bb2058e6a3ad6dd8bb..9b6a18ca6df3b1a9c992da130179c6328e3a30c0 100644 (file)
@@ -19,6 +19,8 @@
 
 #include "poznan_encoder.h"
 #include "exceptions.h"
+#include "encoded_data.h"
+#include <dcp/xyz_image.h>
 #include <dlfcn.h>
 
 #include "i18n.h"
@@ -34,15 +36,23 @@ PoznanEncoder::PoznanEncoder ()
        void* tier1 = open_library ("tier1");
        void* gpu_coeff_coder = open_library ("gpu_coeff_coder");
        void* tier2 = open_library ("tier2");
+       void* types = open_library ("types");
        
        _init_device = (void (*)(type_parameters *)) dlsym (config, "init_device");
-       _mct = (void (*)(type_image *, type_parameters *)) dlsym (preprocessing, "mct");
+       _color_coder_lossy = (void (*)(type_image *, type_parameters *)) dlsym (preprocessing, "color_coder_lossy");
        _fwt = (void (*)(type_tile *)) dlsym (dwt, "fwt");
        _quantize_tile = (void (*)(type_tile *)) dlsym (tier1, "quantize_tile");
        _encode_tile = (void (*)(type_tile *)) dlsym (gpu_coeff_coder, "encode_tile");
-       _write_codestream = (void (*)(type_image *)) dlsym (tier2, "write_codestream");
+       _init_params = (void (*)(type_image *, type_parameters *)) dlsym (types, "init_params");
+       _set_coding_parameters = (void (*)(type_image *, type_parameters *)) dlsym (types, "set_coding_parameters");
+       _init_tiles = (void (*)(type_image *, type_parameters *)) dlsym (types, "init_tiles");
+       _init_buffer = (void (*)(type_buffer *)) dlsym (types, "init_buffer");
+       _encode_codestream = (void (*)(type_buffer *, type_image *)) dlsym (tier2, "encode_codestream");
        
-       if (!_init_device || !_mct || !_fwt || !_quantize_tile || !_encode_tile || !_write_codestream) {
+       if (
+               !_init_device || !_color_coder_lossy || !_fwt || !_quantize_tile ||
+               !_encode_tile || !_init_params || !_set_coding_parameters || !_init_tiles ||
+               !_init_buffer || !_encode_codestream) {
                throw JPEG2000EncoderUnavailableException (name(), "missing symbol");
        }
 }
@@ -109,16 +119,32 @@ PoznanEncoder::name () const
 }
 
 shared_ptr<EncodedData>
-PoznanEncoder::do_encode (shared_ptr<const dcp::XYZImage> input, dcp::NoteHandler note_handler)
+PoznanEncoder::do_encode (shared_ptr<const dcp::XYZImage> input)
 {
        type_image img;
-       _mct (&img, &_param);
+       _init_params (&img, &_param);
+       img.width = input->size().width;
+       img.height = input->size().height;
+       img.depth = 12;
+       img.num_components = 3;
+       img.num_range_bits = 12;
+       img.sign = UNSIGNED;
+       img.num_dlvls = _param.param_tile_comp_dlvls;
+
+       _set_coding_parameters (&img, &_param);
+       _init_tiles (&img, &_param);
+       
+       _color_coder_lossy (&img, &_param);
        for (size_t i = 0; i < img.num_tiles; ++i) {
                type_tile* tile = &(img.tile[i]);
                _fwt (tile);
                _quantize_tile (tile);
                _encode_tile (tile);
        }
-       _write_codestream (&img);
-       return shared_ptr<EncodedData> ();
+
+       type_buffer buffer;
+       _init_buffer (&buffer);
+       _encode_codestream (&buffer, &img);
+
+       return shared_ptr<EncodedData> (new EncodedData (buffer.data, buffer.bytes_count));
 }
index 111161d02b202c142731ee7384813683d8df0ad1..8b4f41f4f4807a45021f3d593c0ccc4792f890d5 100644 (file)
@@ -36,8 +36,7 @@ public:
 protected:
 
        boost::shared_ptr<EncodedData> do_encode (
-               boost::shared_ptr<const dcp::XYZImage> input,
-               dcp::NoteHandler note_handler
+               boost::shared_ptr<const dcp::XYZImage> input
                );
 
        void parameters_changed ();
@@ -46,11 +45,15 @@ private:
        void* open_library (std::string name);
        
        type_parameters _param;
-       
+
        void (*_init_device) (type_parameters *);
-       void (*_mct) (type_image *, type_parameters *);
+       void (*_color_coder_lossy) (type_image *, type_parameters *);
        void (*_fwt) (type_tile *);     
        void (*_quantize_tile) (type_tile *);   
        void (*_encode_tile) (type_tile *);     
-       void (*_write_codestream) (type_image *);
+       void (*_init_params) (type_image *, type_parameters *);
+       void (*_set_coding_parameters) (type_image *, type_parameters *);
+       void (*_init_tiles) (type_image *, type_parameters *);
+       void (*_init_buffer) (type_buffer *);
+       void (*_encode_codestream) (type_buffer *, type_image *);
 };