diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-05-02 22:10:21 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-03-21 16:41:08 +0000 |
| commit | 75a5574d94d37d40529cd28588fef187540311e4 (patch) | |
| tree | 6dcb3cafede8b8a747ac4ee18d3f296dac56abd7 /src | |
| parent | a405e599c422db81886ff7a12155aa285cd9719e (diff) | |
Various work on poznan.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/dcp_video.cc | 2 | ||||
| -rw-r--r-- | src/lib/jpeg2000_encoder.cc | 4 | ||||
| -rw-r--r-- | src/lib/jpeg2000_encoder.h | 4 | ||||
| -rw-r--r-- | src/lib/openjpeg_encoder.cc | 2 | ||||
| -rw-r--r-- | src/lib/openjpeg_encoder.h | 2 | ||||
| -rw-r--r-- | src/lib/poznan_encoder.cc | 40 | ||||
| -rw-r--r-- | src/lib/poznan_encoder.h | 13 |
7 files changed, 47 insertions, 20 deletions
diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc index 1933c0e35..f3ac4da00 100644 --- a/src/lib/dcp_video.cc +++ b/src/lib/dcp_video.cc @@ -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()) { diff --git a/src/lib/jpeg2000_encoder.cc b/src/lib/jpeg2000_encoder.cc index 617e9fa7b..c7c39ea0e 100644 --- a/src/lib/jpeg2000_encoder.cc +++ b/src/lib/jpeg2000_encoder.cc @@ -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); } diff --git a/src/lib/jpeg2000_encoder.h b/src/lib/jpeg2000_encoder.h index a1e9a6669..a05bd0ac5 100644 --- a/src/lib/jpeg2000_encoder.h +++ b/src/lib/jpeg2000_encoder.h @@ -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 () {} diff --git a/src/lib/openjpeg_encoder.cc b/src/lib/openjpeg_encoder.cc index 89de687f0..9cfd8146c 100644 --- a/src/lib/openjpeg_encoder.cc +++ b/src/lib/openjpeg_encoder.cc @@ -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(); diff --git a/src/lib/openjpeg_encoder.h b/src/lib/openjpeg_encoder.h index 94206f056..dd109e7c1 100644 --- a/src/lib/openjpeg_encoder.h +++ b/src/lib/openjpeg_encoder.h @@ -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); }; diff --git a/src/lib/poznan_encoder.cc b/src/lib/poznan_encoder.cc index 4834a2589..9b6a18ca6 100644 --- a/src/lib/poznan_encoder.cc +++ b/src/lib/poznan_encoder.cc @@ -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)); } diff --git a/src/lib/poznan_encoder.h b/src/lib/poznan_encoder.h index 111161d02..8b4f41f4f 100644 --- a/src/lib/poznan_encoder.h +++ b/src/lib/poznan_encoder.h @@ -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 *); }; |
