summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-05-02 22:10:21 +0100
committerCarl Hetherington <cth@carlh.net>2016-03-21 16:41:08 +0000
commit75a5574d94d37d40529cd28588fef187540311e4 (patch)
tree6dcb3cafede8b8a747ac4ee18d3f296dac56abd7 /src
parenta405e599c422db81886ff7a12155aa285cd9719e (diff)
Various work on poznan.
Diffstat (limited to 'src')
-rw-r--r--src/lib/dcp_video.cc2
-rw-r--r--src/lib/jpeg2000_encoder.cc4
-rw-r--r--src/lib/jpeg2000_encoder.h4
-rw-r--r--src/lib/openjpeg_encoder.cc2
-rw-r--r--src/lib/openjpeg_encoder.h2
-rw-r--r--src/lib/poznan_encoder.cc40
-rw-r--r--src/lib/poznan_encoder.h13
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 *);
};