diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-10-16 01:46:18 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-10-16 01:46:18 +0100 |
| commit | 763acf87c7c80d508f6c10af0f3f46045d5c23df (patch) | |
| tree | 72cf7b3da0f300bbf2f6dfb45e5b53ce3803d368 /src/lib/server.cc | |
| parent | 5428006e97b37d757a03c14024d7a0fb363bdcc6 (diff) | |
Try to make client/server communications a little more robust.
Diffstat (limited to 'src/lib/server.cc')
| -rw-r--r-- | src/lib/server.cc | 59 |
1 files changed, 22 insertions, 37 deletions
diff --git a/src/lib/server.cc b/src/lib/server.cc index d40325db0..e8a9804ed 100644 --- a/src/lib/server.cc +++ b/src/lib/server.cc @@ -27,6 +27,7 @@ #include <sstream> #include <iostream> #include <boost/algorithm/string.hpp> +#include <boost/lexical_cast.hpp> #include "server.h" #include "util.h" #include "scaler.h" @@ -73,60 +74,44 @@ Server::Server (Log* log) int Server::process (shared_ptr<Socket> socket) { - char buffer[256]; + char buffer[512]; socket->read_indefinite ((uint8_t *) buffer, sizeof (buffer), 30); socket->consume (strlen (buffer) + 1); stringstream s (buffer); + multimap<string, string> kv = read_key_value (s); - string command; - s >> command; - if (command != "encode") { + if (get_required_string (kv, "encode") != "please") { return -1; } - Size in_size; - int pixel_format_int; - Size out_size; - int padding; - int subtitle_offset; - int subtitle_scale; - string scaler_id; - int frame; - float frames_per_second; - string post_process; - int colour_lut_index; - int j2k_bandwidth; - Position subtitle_position; - Size subtitle_size; - - s >> in_size.width >> in_size.height - >> pixel_format_int - >> out_size.width >> out_size.height - >> padding - >> subtitle_offset - >> subtitle_scale - >> scaler_id - >> frame - >> frames_per_second - >> post_process - >> colour_lut_index - >> j2k_bandwidth - >> subtitle_position.x >> subtitle_position.y - >> subtitle_size.width >> subtitle_size.height; + 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"); + 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"); + int subtitle_scale = get_required_int (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")); + 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); - if (post_process == "none") { - post_process = ""; - } shared_ptr<Image> image (new AlignedImage (pixel_format, in_size)); image->read_from_socket (socket); shared_ptr<Subtitle> sub; - if (subtitle_position.x != -1) { + if (subtitle_size.width && subtitle_size.height) { shared_ptr<Image> subtitle_image (new AlignedImage (PIX_FMT_RGBA, subtitle_size)); subtitle_image->read_from_socket (socket); sub.reset (new Subtitle (subtitle_position, subtitle_image)); |
