- uint32_t length = socket->read_uint32 ();
- scoped_array<char> buffer (new char[length]);
- socket->read (reinterpret_cast<uint8_t*> (buffer.get()), length);
-
- stringstream s (buffer.get());
- multimap<string, string> kv = read_key_value (s);
-
- if (get_required_string (kv, "encode") != "please") {
- return -1;
- }
-
- libdcp::Size in_size (get_required_int (kv, "input_width"), get_required_int (kv, "input_height"));
- int pixel_format_int = get_required_int (kv, "input_pixel_format");
- libdcp::Size out_size (get_required_int (kv, "output_width"), get_required_int (kv, "output_height"));
- int padding = get_required_int (kv, "padding");
- int subtitle_offset = get_required_int (kv, "subtitle_offset");
- float subtitle_scale = get_required_float (kv, "subtitle_scale");
- string scaler_id = get_required_string (kv, "scaler");
- int frame = get_required_int (kv, "frame");
- int frames_per_second = get_required_int (kv, "frames_per_second");
- string post_process = get_optional_string (kv, "post_process");
- int colour_lut_index = get_required_int (kv, "colour_lut");
- int j2k_bandwidth = get_required_int (kv, "j2k_bandwidth");
- Position subtitle_position (get_optional_int (kv, "subtitle_x"), get_optional_int (kv, "subtitle_y"));
- libdcp::Size subtitle_size (get_optional_int (kv, "subtitle_width"), get_optional_int (kv, "subtitle_height"));
-
- /* This checks that colour_lut_index is within range */
- colour_lut_index_to_name (colour_lut_index);
-
- PixelFormat pixel_format = (PixelFormat) pixel_format_int;
- Scaler const * scaler = Scaler::from_id (scaler_id);
-
- shared_ptr<Image> image (new SimpleImage (pixel_format, in_size, true));
-
- image->read_from_socket (socket);
-
- shared_ptr<Subtitle> sub;
- if (subtitle_size.width && subtitle_size.height) {
- shared_ptr<Image> subtitle_image (new SimpleImage (PIX_FMT_RGBA, subtitle_size, true));
- subtitle_image->read_from_socket (socket);
- sub.reset (new Subtitle (subtitle_position, subtitle_image));