diff options
Diffstat (limited to 'src/xyz_frame.cc')
| -rw-r--r-- | src/xyz_frame.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/xyz_frame.cc b/src/xyz_frame.cc index 78df3f33..f5b0ee86 100644 --- a/src/xyz_frame.cc +++ b/src/xyz_frame.cc @@ -18,6 +18,7 @@ */ #include <cassert> +#include <stdexcept> #include "xyz_frame.h" using namespace libdcp; @@ -29,6 +30,34 @@ XYZFrame::XYZFrame (opj_image_t* image) assert (_opj_image->numcomps == 3); } +XYZFrame::XYZFrame (Size size) +{ + opj_image_cmptparm_t cmptparm[3]; + + for (int i = 0; i < 3; ++i) { + cmptparm[i].dx = 1; + cmptparm[i].dy = 1; + cmptparm[i].w = size.width; + cmptparm[i].h = size.height; + cmptparm[i].x0 = 0; + cmptparm[i].y0 = 0; + cmptparm[i].prec = 12; + cmptparm[i].bpp = 12; + cmptparm[i].sgnd = 0; + } + + /* XXX: is this _SRGB right? */ + _opj_image = opj_image_create (3, &cmptparm[0], CLRSPC_SRGB); + if (_opj_image == 0) { + throw std::runtime_error ("could not create libopenjpeg image"); + } + + _opj_image->x0 = 0; + _opj_image->y0 = 0; + _opj_image->x1 = size.width; + _opj_image->y1 = size.height; +} + XYZFrame::~XYZFrame () { opj_image_destroy (_opj_image); |
