summaryrefslogtreecommitdiff
path: root/src/xyz_frame.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/xyz_frame.cc')
-rw-r--r--src/xyz_frame.cc29
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);