*/
+#include "audio_content.h"
#include "audio_stream.h"
#include "content.h"
+#include "dcp_content.h"
+#include "decoder.h"
#include "piece.h"
+#include "text_content.h"
+#include "video_content.h"
#include <boost/foreach.hpp>
using std::copy;
using std::list;
+using std::map;
+using boost::dynamic_pointer_cast;
+using boost::optional;
using boost::shared_ptr;
+using namespace dcpomatic;
Piece::Piece (shared_ptr<Content> c, shared_ptr<Decoder> d, FrameRateChange f)
Piece::resampled_audio_to_dcp (shared_ptr<const Film> film, Frame f) const
{
/* See comment in dcp_to_content_video */
- return DCPTime::from_frames(f, film->audio_frame_rate()) - DCPTime(_content[0]->trim_start(), frc) + position();
+ return DCPTime::from_frames(f, film->audio_frame_rate()) - DCPTime(_content[0]->trim_start(), _frc) + position();
}
Piece::dcp_to_content_time (shared_ptr<const Film> film, DCPTime t) const
{
DCPTime s = t - position();
- s = min (_content[0]->length_after_trim(_film), s);
+ s = min (_content[0]->length_after_trim(film), s);
return max (ContentTime(), ContentTime(s, _frc) + _content[0]->trim_start());
}
bool
Piece::has_text () const
{
- return !_decoder[0].text.empty();
+ return !_decoder[0]->text.empty();
}
void
-Piece::pass () const
+Piece::pass ()
{
_done = _decoder[0]->pass();
}
{
return _content[0]->video && _content[0]->video->use();
}
+
+
+Crop
+Piece::video_crop () const
+{
+ return _content[0]->video->crop();
+}
+
+
+optional<double>
+Piece::video_fade (boost::shared_ptr<const Film> film, Frame frame) const
+{
+ return _content[0]->video->fade(film, frame);
+}
+
+
+optional<ColourConversion>
+Piece::video_colour_conversion () const
+{
+ return _content[0]->video->colour_conversion();
+}
+
+
+VideoRange
+Piece::video_range () const
+{
+ return _content[0]->video->range();
+}
+
+
+dcp::Size
+Piece::video_scaled_size (dcp::Size container_size) const
+{
+ return _content[0]->video->scaled_size(container_size);
+}
+
+
+int
+Piece::audio_resampled_frame_rate (shared_ptr<const Film> film) const
+{
+ return _content[0]->audio->resampled_frame_rate(film);
+}
+
+
+double
+Piece::audio_gain () const
+{
+ return _content[0]->audio->gain();
+}
+
+
+void
+Piece::seek (shared_ptr<const Film> film, DCPTime time, bool accurate)
+{
+ if (time < position()) {
+ /* Before; seek to the start of the content. Even if this request is for an inaccurate seek
+ we must seek this (following) content accurately, otherwise when we come to the end of the current
+ content we may not start right at the beginning of the next, causing a gap (if the next content has
+ been trimmed to a point between keyframes, or something).
+ */
+ _decoder[0]->seek (dcp_to_content_time(film, position()), true);
+ _done = false;
+ } else if (position() <= time && time < end(film)) {
+ /* During; seek to position */
+ _decoder[0]->seek (dcp_to_content_time(film, time), accurate);
+ _done = false;
+ } else {
+ /* After; this piece is done */
+ _done = true;
+ }
+}
+
+
+optional<DCPTime>
+Piece::content_time_to_dcp (shared_ptr<Content> content, ContentTime t) const
+{
+ if (content != _content[0]) {
+ return optional<DCPTime>();
+ }
+
+ return content_time_to_dcp (t);
+}
+
#ifndef DCPOMATIC_PIECE_H
#define DCPOMATIC_PIECE_H
+
#include "audio_stream.h"
-#include "dcpomatic_font.h"
+#include "colour_conversion.h"
+#include "font.h"
#include "dcpomatic_time.h"
#include "frame_rate_change.h"
#include "types.h"
+
class Content;
class Decoder;
+struct check_reuse_old_data_test;
+
class Piece
{
bool reference_audio () const;
void pass ();
+ void seek (boost::shared_ptr<const Film> film, dcpomatic::DCPTime time, bool accurate);
dcpomatic::DCPTime position () const;
dcpomatic::DCPTime end (boost::shared_ptr<const Film> film) const;
}
bool video_use () const;
+ Crop video_crop () const;
+ boost::optional<double> video_fade (boost::shared_ptr<const Film> film, Frame) const;
+ boost::optional<ColourConversion> video_colour_conversion () const;
+ VideoRange video_range () const;
+ dcp::Size video_scaled_size (dcp::Size container_size) const;
+
+ int audio_resampled_frame_rate (boost::shared_ptr<const Film> film) const;
+ double audio_gain () const;
dcpomatic::DCPTime content_video_to_dcp (Frame f) const;
dcpomatic::DCPTime resampled_audio_to_dcp (boost::shared_ptr<const Film> film, Frame f) const;
dcpomatic::ContentTime dcp_to_content_time (boost::shared_ptr<const Film> film, dcpomatic::DCPTime t) const;
dcpomatic::DCPTime content_time_to_dcp (dcpomatic::ContentTime t) const;
+ boost::optional<dcpomatic::DCPTime> content_time_to_dcp (boost::shared_ptr<Content> content, dcpomatic::ContentTime t) const;
void add_fonts (std::list<boost::shared_ptr<dcpomatic::Font> >& fonts) const;
private:
+ friend struct ::check_reuse_old_data_test;
+
std::vector<boost::shared_ptr<Content> > _content;
std::vector<boost::shared_ptr<Decoder> > _decoder;
FrameRateChange _frc;
PART_WHOLE,
PresetColourConversion::all().front().conversion,
VIDEO_RANGE_FULL,
- boost::weak_ptr<Content>(),
+ boost::weak_ptr<Piece>(),
boost::optional<Frame>(),
false
)
_last_video[wp].reset (
new PlayerVideo (
video.image,
- piece->content->video->crop (),
- piece->content->video->fade (_film, video.frame),
- scale_for_display(piece->content->video->scaled_size(_film->frame_size()), _video_container_size, _film->frame_size()),
+ piece->video_crop(),
+ piece->video_fade(_film, video.frame),
+ scale_for_display(piece->video_scaled_size(_film->frame_size()), _video_container_size, _film->frame_size()),
_video_container_size,
video.eyes,
video.part,
- piece->content->video->colour_conversion(),
- piece->content->video->range(),
- piece->content,
+ piece->video_colour_conversion(),
+ piece->video_range(),
+ piece,
video.frame,
false
)
return;
}
- shared_ptr<AudioContent> content = piece->content->audio;
- DCPOMATIC_ASSERT (content);
-
- int const rfr = content->resampled_frame_rate (_film);
+ int const rfr = piece->audio_resampled_frame_rate (_film);
/* Compute time in the DCP */
- DCPTime time = resampled_audio_to_dcp (piece, content_audio.frame);
+ DCPTime time = piece->resampled_audio_to_dcp (_film, content_audio.frame);
LOG_DEBUG_PLAYER("Received audio frame %1 at %2", content_audio.frame, to_string(time));
-
/* And the end of this block in the DCP */
DCPTime end = time + DCPTime::from_frames(content_audio.audio->frames(), rfr);
/* Gain */
- if (content->gain() != 0) {
+ if (piece->audio_gain() != 0) {
shared_ptr<AudioBuffers> gain (new AudioBuffers (content_audio.audio));
- gain->apply_gain (content->gain ());
+ gain->apply_gain (piece->audio_gain());
content_audio.audio = gain;
}
return;
}
- DCPTime const dcp_to = content_time_to_dcp (piece, to);
+ DCPTime const dcp_to = piece->content_time_to_dcp (to);
if (dcp_to > piece->end(_film)) {
return;
}
BOOST_FOREACH (shared_ptr<Piece> i, _pieces) {
- if (time < i->position()) {
- /* Before; seek to the start of the content. Even if this request is for an inaccurate seek
- we must seek this (following) content accurately, otherwise when we come to the end of the current
- content we may not start right at the beginning of the next, causing a gap (if the next content has
- been trimmed to a point between keyframes, or something).
- */
- i->decoder->seek (dcp_to_content_time (i, i->position()), true);
- i->done = false;
- } else if (i->position() <= time && time < i->end(_film)) {
- /* During; seek to position */
- i->decoder->seek (dcp_to_content_time (i, time), accurate);
- i->done = false;
- } else {
- /* After; this piece is done */
- i->done = true;
- }
+ i->seek (_film, time, accurate);
}
if (accurate) {
boost::mutex::scoped_lock lm (_mutex);
BOOST_FOREACH (shared_ptr<Piece> i, _pieces) {
- if (i->content == content) {
- return content_time_to_dcp (i, t);
+ optional<DCPTime> d = i->content_time_to_dcp (content, t);
+ if (d) {
+ return d;
}
}
*/
+#include "piece.h"
#include "player_video.h"
#include "content.h"
#include "video_content.h"
Part part,
optional<ColourConversion> colour_conversion,
VideoRange video_range,
- weak_ptr<Content> content,
+ weak_ptr<Piece> piece,
optional<Frame> video_frame,
bool error
)
, _part (part)
, _colour_conversion (colour_conversion)
, _video_range (video_range)
- , _content (content)
+ , _piece (piece)
, _video_frame (video_frame)
, _error (error)
{
_part,
_colour_conversion,
_video_range,
- _content,
+ _piece,
_video_frame,
_error
)
bool
PlayerVideo::reset_metadata (shared_ptr<const Film> film, dcp::Size player_video_container_size)
{
- shared_ptr<Content> content = _content.lock();
- if (!content || !_video_frame) {
+ shared_ptr<Piece> piece = _piece.lock();
+ if (!piece || !_video_frame) {
return false;
}
- _crop = content->video->crop();
- _fade = content->video->fade(film, _video_frame.get());
- _inter_size = scale_for_display(content->video->scaled_size(film->frame_size()), player_video_container_size, film->frame_size());
- _out_size = player_video_container_size;
- _colour_conversion = content->video->colour_conversion();
- _video_range = content->video->range();
+ _crop = piece->video_crop();
+ _fade = piece->video_fade(film, _video_frame.get());
+ _inter_size = scale_for_display(piece->video_scaled_size(film->frame_size()), player_video_container_size, film->frame_size());
+ _out_size = video_container_size;
+ _colour_conversion = piece->video_colour_conversion();
+ _video_range = piece->video_range();
return true;
}
#define DCPOMATIC_PLAYER_VIDEO_H
#include "types.h"
+#include "piece.h"
#include "position.h"
#include "dcpomatic_time.h"
#include "colour_conversion.h"
Part,
boost::optional<ColourConversion>,
VideoRange video_range,
- boost::weak_ptr<Content>,
+ boost::weak_ptr<Piece>,
boost::optional<Frame>,
bool error
);
size_t memory_used () const;
- boost::weak_ptr<Content> content () const {
- return _content;
+ boost::weak_ptr<Piece> piece () const {
+ return _piece;
}
bool error () const {
boost::optional<ColourConversion> _colour_conversion;
VideoRange _video_range;
boost::optional<PositionImage> _text;
- /** Content that we came from. This is so that reset_metadata() can work. */
- boost::weak_ptr<Content> _content;
+ /** Piece that we came from. This is so that reset_metadata() can work. */
+ */
+ boost::weak_ptr<Piece> _piece;
/** Video frame that we came from. Again, this is for reset_metadata() */
boost::optional<Frame> _video_frame;
PART_WHOLE,
ColourConversion(),
VIDEO_RANGE_FULL,
- weak_ptr<Content>(),
+ weak_ptr<Piece>(),
optional<Frame>(),
false
)
PART_WHOLE,
ColourConversion(),
VIDEO_RANGE_FULL,
- weak_ptr<Content>(),
+ weak_ptr<Piece>(),
optional<Frame>(),
false
)
PART_WHOLE,
ColourConversion(),
VIDEO_RANGE_FULL,
- weak_ptr<Content>(),
+ weak_ptr<Piece>(),
optional<Frame>(),
false
)
PART_WHOLE,
PresetColourConversion::all().front().conversion,
VIDEO_RANGE_FULL,
- weak_ptr<Content>(),
+ weak_ptr<Piece>(),
optional<Frame>(),
false
)
BOOST_REQUIRE (!wait_for_jobs());
shared_ptr<Player> player (new Player(test));
- shared_ptr<DCPDecoder> decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+ shared_ptr<DCPDecoder> decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
BOOST_REQUIRE (decoder);
list<shared_ptr<dcp::Reel> > reels = decoder->reels();
ov_content->set_position (test, dcpomatic::DCPTime(96000));
- decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+ decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
BOOST_REQUIRE (decoder);
BOOST_REQUIRE (reels == decoder->reels());
BOOST_REQUIRE (!wait_for_jobs());
player.reset (new Player(test));
- decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+ decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
BOOST_REQUIRE (decoder);
reels = decoder->reels();
vf_content->add_ov (ov->dir(ov->dcp_name(false)));
JobManager::instance()->add (shared_ptr<Job>(new ExamineContentJob(test, vf_content)));
BOOST_REQUIRE (!wait_for_jobs());
- decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+ decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
BOOST_REQUIRE (decoder);
BOOST_REQUIRE (reels != decoder->reels());
BOOST_REQUIRE (!wait_for_jobs());
player.reset (new Player(test));
- decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+ decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
BOOST_REQUIRE (decoder);
reels = decoder->reels();
encrypted_content->add_kdm (kdm);
JobManager::instance()->add (shared_ptr<Job>(new ExamineContentJob(test, encrypted_content)));
BOOST_REQUIRE (!wait_for_jobs());
- decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+ decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
BOOST_REQUIRE (decoder);
BOOST_REQUIRE (reels != decoder->reels());
}
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
shared_ptr<Piece> piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0).get(), 0);
- BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 12).get(), DCPTime::from_seconds(0.5).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72).get(), DCPTime::from_seconds(3.0).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(12).get(), DCPTime::from_seconds(0.5).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(3.0).get());
/* Position 3s, no trim, content rate = DCP rate */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(4.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 162).get(), DCPTime::from_seconds(9.75).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(4.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(162).get(), DCPTime::from_seconds(9.75).get());
/* Position 3s, 1.5s trim, content rate = DCP rate */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(3.00).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 198).get(), DCPTime::from_seconds(9.75).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(1.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(3.00).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(4.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(198).get(), DCPTime::from_seconds(9.75).get());
/* Position 0, no trim, content rate 24, DCP rate 25.
Now, for example, a DCPTime position of 3s means 3s at 25fps. Since we run the video
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0);
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 15).get(), DCPTime::from_seconds(0.6).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 75).get(), DCPTime::from_seconds(3.0).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(15).get(), DCPTime::from_seconds(0.6).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(75).get(), DCPTime::from_seconds(3.0).get());
/* Position 3s, no trim, content rate 24, DCP rate 25 */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 40).get(), DCPTime::from_seconds(4.60).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 169).get(), DCPTime::from_seconds(9.76).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(40).get(), DCPTime::from_seconds(4.60).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(169).get(), DCPTime::from_seconds(9.76).get());
/* Position 3s, 1.6s trim, content rate 24, DCP rate 25, so the 1.6s trim is at 24fps */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 142080);
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 40).get(), 295680);
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 80).get(), 449280);
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 209).get(), 944640);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 142080);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(40).get(), 295680);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(80).get(), 449280);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(209).get(), 944640);
/* Position 0, no trim, content rate 24, DCP rate 48
Now, for example, a DCPTime position of 3s means 3s at 48fps. Since we run the video
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0);
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 12).get(), DCPTime::from_seconds(0.5).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(3.0).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(12).get(), DCPTime::from_seconds(0.5).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(3.0).get());
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(4.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 162).get(), DCPTime::from_seconds(9.75).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(4.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(162).get(), DCPTime::from_seconds(9.75).get());
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(3.00).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 198).get(), DCPTime::from_seconds(9.75).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(1.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(3.00).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(4.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(198).get(), DCPTime::from_seconds(9.75).get());
/* Position 0, no trim, content rate 48, DCP rate 24
Now, for example, a DCPTime position of 3s means 3s at 24fps. Since we run the video
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0);
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 24).get(), DCPTime::from_seconds(0.5).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 144).get(), DCPTime::from_seconds(3.0).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(24).get(), DCPTime::from_seconds(0.5).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(144).get(), DCPTime::from_seconds(3.0).get());
/* Position 3s, no trim, content rate 24, DCP rate 48 */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 324).get(), DCPTime::from_seconds(9.75).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(4.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(324).get(), DCPTime::from_seconds(9.75).get());
/* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
content->set_position (film, DCPTime::from_seconds(3));
player->setup_pieces ();
BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
piece = player->_pieces.front ();
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(3.00).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 144).get(), DCPTime::from_seconds(4.50).get());
- BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 396).get(), DCPTime::from_seconds(9.75).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(1.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(3.00).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(144).get(), DCPTime::from_seconds(4.50).get());
+ BOOST_CHECK_EQUAL (piece->content_video_to_dcp(396).get(), DCPTime::from_seconds(9.75).get());
}
/** Test Player::dcp_to_content_audio */