shared_ptr<const ImageProxy> in,
DCPTime time,
Crop crop,
+ boost::optional<float> fade,
dcp::Size inter_size,
dcp::Size out_size,
Scaler const * scaler,
: _in (in)
, _time (time)
, _crop (crop)
+ , _fade (fade)
, _inter_size (inter_size)
, _out_size (out_size)
, _scaler (scaler)
{
_time = DCPTime (node->number_child<DCPTime::Type> ("Time"));
_crop = Crop (node);
+ _fade = node->optional_number_child<float> ("Fade");
_inter_size = dcp::Size (node->number_child<int> ("InterWidth"), node->number_child<int> ("InterHeight"));
_out_size = dcp::Size (node->number_child<int> ("OutWidth"), node->number_child<int> ("OutHeight"));
}
shared_ptr<Image>
-PlayerVideo::image (bool burn_subtitle) const
+PlayerVideo::image (AVPixelFormat pixel_format, bool burn_subtitle) const
{
shared_ptr<Image> im = _in->image ();
break;
}
- shared_ptr<Image> out = im->crop_scale_window (total_crop, _inter_size, _out_size, _scaler, PIX_FMT_RGB24, true);
+ shared_ptr<Image> out = im->crop_scale_window (total_crop, _inter_size, _out_size, _scaler, pixel_format, true);
if (burn_subtitle && _subtitle.image) {
out->alpha_blend (_subtitle.image, _subtitle.position);
}
+ if (_fade) {
+ out->fade (_fade.get ());
+ }
+
return out;
}
{
node->add_child("Time")->add_child_text (raw_convert<string> (_time.get ()));
_crop.as_xml (node);
+ if (_fade) {
+ node->add_child("Fade")->add_child_text (raw_convert<string> (_fade.get ()));
+ }
_in->add_metadata (node->add_child ("In"));
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));
{
if (_in != other->_in ||
_crop != other->_crop ||
+ _fade.get_value_or(0) != other->_fade.get_value_or(0) ||
_inter_size != other->_inter_size ||
_out_size != other->_out_size ||
_scaler != other->_scaler ||