X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fplayer.cc;h=9f859969341fa65a1eacc22d0c3da9b7002387c0;hb=ea6240f349a27e1e8f4f03ee69640e3a2939d958;hp=978db035fe796e271fef8578753e44535b8654c1;hpb=98060a4e6f02b418f30b4b736e5880a357454c40;p=dcpomatic.git diff --git a/src/lib/player.cc b/src/lib/player.cc index 978db035f..9f8599693 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -144,7 +144,6 @@ Player::pass () { if (!_have_valid_pieces) { setup_pieces (); - _have_valid_pieces = true; } Time earliest_t = TIME_MAX; @@ -273,23 +272,32 @@ Player::process_video (weak_ptr weak_piece, shared_ptr image Time const time = content->position() + relative_time + extra - content->trim_start (); float const ratio = content->ratio() ? content->ratio()->ratio() : content->video_size_after_crop().ratio(); libdcp::Size const image_size = fit_ratio_within (ratio, _video_container_size); - - shared_ptr work_image = image->crop_scale_window (content->crop(), image_size, _video_container_size, _film->scaler(), PIX_FMT_RGB24, false); - Position const container_offset ( - (_video_container_size.width - image_size.width) / 2, - (_video_container_size.height - image_size.width) / 2 + shared_ptr pi ( + new PlayerImage ( + image, + content->crop(), + image_size, + _video_container_size, + _film->scaler() + ) ); - + if (_film->with_subtitles () && _out_subtitle.image && time >= _out_subtitle.from && time <= _out_subtitle.to) { - work_image->alpha_blend (_out_subtitle.image, _out_subtitle.position + container_offset); - } + Position const container_offset ( + (_video_container_size.width - image_size.width) / 2, + (_video_container_size.height - image_size.width) / 2 + ); + + pi->set_subtitle (_out_subtitle.image, _out_subtitle.position + container_offset); + } + #ifdef DCPOMATIC_DEBUG _last_video = piece->content; #endif - Video (work_image, eyes, content->colour_conversion(), same, time); + Video (pi, eyes, content->colour_conversion(), same, time); _last_emit_was_black = false; _video_position = piece->video_position = (time + TIME_HZ / _film->video_frame_rate()); @@ -336,10 +344,18 @@ Player::process_audio (weak_ptr weak_piece, shared_ptr dcp_mapped (new AudioBuffers (_film->audio_channels(), audio->frames())); dcp_mapped->make_silent (); - list > map = content->audio_mapping().content_to_dcp (); - for (list >::iterator i = map.begin(); i != map.end(); ++i) { - if (i->first < audio->channels() && i->second < dcp_mapped->channels()) { - dcp_mapped->accumulate_channel (audio.get(), i->first, i->second); + + AudioMapping map = content->audio_mapping (); + for (int i = 0; i < map.content_channels(); ++i) { + for (int j = 0; j < _film->audio_channels(); ++j) { + if (map.get (i, static_cast (j)) > 0) { + dcp_mapped->accumulate_channel ( + audio.get(), + i, + static_cast (j), + map.get (i, static_cast (j)) + ); + } } } @@ -367,16 +383,16 @@ void Player::flush () { TimedAudioBuffers