diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-05-14 19:27:04 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-05-14 19:27:04 +0100 |
| commit | 21e8238484af35ac207b01defe406e73445632be (patch) | |
| tree | 8985d03f7b5641fd4e160d5ca4cac253976d51ff /src/lib/player_video_frame.cc | |
| parent | 5c09a82e483593fb37da0cad20679be735887613 (diff) | |
Make DCPVideoFrame use PlayerVideoFrame to store its image.
Diffstat (limited to 'src/lib/player_video_frame.cc')
| -rw-r--r-- | src/lib/player_video_frame.cc | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/src/lib/player_video_frame.cc b/src/lib/player_video_frame.cc index 571c18b6e..cbe879d10 100644 --- a/src/lib/player_video_frame.cc +++ b/src/lib/player_video_frame.cc @@ -17,10 +17,15 @@ */ +#include <libdcp/raw_convert.h> #include "player_video_frame.h" #include "image.h" +#include "scaler.h" +using std::string; +using std::cout; using boost::shared_ptr; +using libdcp::raw_convert; PlayerVideoFrame::PlayerVideoFrame ( shared_ptr<const Image> in, @@ -42,6 +47,33 @@ PlayerVideoFrame::PlayerVideoFrame ( } +PlayerVideoFrame::PlayerVideoFrame (shared_ptr<cxml::Node> node, shared_ptr<Socket> socket) +{ + _crop = Crop (node); + + _inter_size = libdcp::Size (node->number_child<int> ("InterWidth"), node->number_child<int> ("InterHeight")); + _out_size = libdcp::Size (node->number_child<int> ("OutWidth"), node->number_child<int> ("OutHeight")); + _scaler = Scaler::from_id (node->string_child ("Scaler")); + _eyes = (Eyes) node->number_child<int> ("Eyes"); + _colour_conversion = ColourConversion (node); + + shared_ptr<Image> image (new Image (PIX_FMT_RGB24, libdcp::Size (node->number_child<int> ("InWidth"), node->number_child<int> ("InHeight")), true)); + image->read_from_socket (socket); + _in = image; + + if (node->optional_number_child<int> ("SubtitleX")) { + + _subtitle_position = Position<int> (node->number_child<int> ("SubtitleX"), node->number_child<int> ("SubtitleY")); + + shared_ptr<Image> image ( + new Image (PIX_FMT_RGBA, libdcp::Size (node->number_child<int> ("SubtitleWidth"), node->number_child<int> ("SubtitleHeight")), true) + ); + + image->read_from_socket (socket); + _subtitle_image = image; + } +} + void PlayerVideoFrame::set_subtitle (shared_ptr<const Image> image, Position<int> pos) { @@ -50,7 +82,7 @@ PlayerVideoFrame::set_subtitle (shared_ptr<const Image> image, Position<int> pos } shared_ptr<Image> -PlayerVideoFrame::image () +PlayerVideoFrame::image () const { shared_ptr<Image> out = _in->crop_scale_window (_crop, _inter_size, _out_size, _scaler, PIX_FMT_RGB24, false); @@ -62,3 +94,33 @@ PlayerVideoFrame::image () return out; } + +void +PlayerVideoFrame::add_metadata (xmlpp::Element* node) const +{ + _crop.as_xml (node); + node->add_child("InWidth")->add_child_text (raw_convert<string> (_in->size().width)); + node->add_child("InHeight")->add_child_text (raw_convert<string> (_in->size().height)); + node->add_child("InterWidth")->add_child_text (raw_convert<string> (_inter_size.width)); + node->add_child("InterHeight")->add_child_text (raw_convert<string> (_inter_size.height)); + node->add_child("OutWidth")->add_child_text (raw_convert<string> (_out_size.width)); + node->add_child("OutHeight")->add_child_text (raw_convert<string> (_out_size.height)); + node->add_child("Scaler")->add_child_text (_scaler->id ()); + node->add_child("Eyes")->add_child_text (raw_convert<string> (_eyes)); + _colour_conversion.as_xml (node); + if (_subtitle_image) { + node->add_child ("SubtitleWidth")->add_child_text (raw_convert<string> (_subtitle_image->size().width)); + node->add_child ("SubtitleHeight")->add_child_text (raw_convert<string> (_subtitle_image->size().height)); + node->add_child ("SubtitleX")->add_child_text (raw_convert<string> (_subtitle_position.x)); + node->add_child ("SubtitleY")->add_child_text (raw_convert<string> (_subtitle_position.y)); + } +} + +void +PlayerVideoFrame::send_binary (shared_ptr<Socket> socket) const +{ + _in->write_to_socket (socket); + if (_subtitle_image) { + _subtitle_image->write_to_socket (socket); + } +} |
