- float const dci_coefficient = 48.0 / 52.37;
-
- /* sRGB color matrix for XYZ -> RGB. This is the same as the one used by the Fraunhofer
- EasyDCP player, I think.
- */
-
- float const colour_matrix[3][3] = {
- { 3.24096989631653, -1.5373831987381, -0.498610764741898 },
- { -0.96924364566803, 1.87596750259399, 0.0415550582110882 },
- { 0.0556300804018974, -0.203976958990097, 1.05697154998779 }
- };
-
- int const max_colour = pow (2, lut_out->bit_depth()) - 1;
-
- struct {
- double x, y, z;
- } s;
-
- struct {
- double r, g, b;
- } d;
-
- int* xyz_x = xyz_frame->comps[0].data;
- int* xyz_y = xyz_frame->comps[1].data;
- int* xyz_z = xyz_frame->comps[2].data;
-
- shared_ptr<ARGBFrame> argb_frame (new ARGBFrame (Size (xyz_frame->x1, xyz_frame->y1)));
-
- uint8_t* argb = argb_frame->data ();
-
- for (int y = 0; y < xyz_frame->y1; ++y) {
- uint8_t* argb_line = argb;
- for (int x = 0; x < xyz_frame->x1; ++x) {
-
- assert (*xyz_x >= 0 && *xyz_y >= 0 && *xyz_z >= 0 && *xyz_x < 4096 && *xyz_x < 4096 && *xyz_z < 4096);
-
- /* In gamma LUT */
- s.x = lut_in->lut()[*xyz_x++];
- s.y = lut_in->lut()[*xyz_y++];
- s.z = lut_in->lut()[*xyz_z++];
-
- /* DCI companding */
- s.x /= dci_coefficient;
- s.y /= dci_coefficient;
- s.z /= dci_coefficient;
-
- /* XYZ to RGB */
- d.r = ((s.x * colour_matrix[0][0]) + (s.y * colour_matrix[0][1]) + (s.z * colour_matrix[0][2]));
- d.g = ((s.x * colour_matrix[1][0]) + (s.y * colour_matrix[1][1]) + (s.z * colour_matrix[1][2]));
- d.b = ((s.x * colour_matrix[2][0]) + (s.y * colour_matrix[2][1]) + (s.z * colour_matrix[2][2]));
-
- d.r = min (d.r, 1.0);
- d.r = max (d.r, 0.0);
-
- d.g = min (d.g, 1.0);
- d.g = max (d.g, 0.0);
-
- d.b = min (d.b, 1.0);
- d.b = max (d.b, 0.0);
-
- /* Out gamma LUT */
- *argb_line++ = lut_out->lut()[(int) (d.b * max_colour)] * 0xff;
- *argb_line++ = lut_out->lut()[(int) (d.g * max_colour)] * 0xff;
- *argb_line++ = lut_out->lut()[(int) (d.r * max_colour)] * 0xff;
- *argb_line++ = 0xff;
+ BIO* b64 = BIO_new (BIO_f_base64 ());
+
+ /* This means the input should have no newlines */
+ BIO_set_flags (b64, BIO_FLAGS_BASE64_NO_NL);
+
+ /* Copy our input string, removing newlines */
+ char in_buffer[in.size() + 1];
+ char* p = in_buffer;
+ for (size_t i = 0; i < in.size(); ++i) {
+ if (in[i] != '\n' && in[i] != '\r') {
+ *p++ = in[i];