#include "compose.hpp"
#include "config.h"
#include "colour_conversion.h"
+#include "util.h"
+#include "film.h"
#include "i18n.h"
VideoContent::VideoContent (shared_ptr<const Film> f, shared_ptr<const cxml::Node> node)
: Content (f, node)
+ , _ratio (0)
{
_video_length = node->number_child<VideoContent::Frame> ("VideoLength");
_video_size.width = node->number_child<int> ("VideoWidth");
_("%1x%2 pixels (%3:1)"),
video_size().width,
video_size().height,
- setprecision (3), float (video_size().width) / video_size().height
+ setprecision (3), video_size().ratio ()
);
return s.str ();
VideoContent::identifier () const
{
stringstream s;
- s << Content::digest()
+ s << Content::identifier()
<< "_" << crop().left
<< "_" << crop().right
<< "_" << crop().top
signal_changed (VideoContentProperty::COLOUR_CONVERSION);
}
+
+/** @return Video size after 3D split and crop */
+libdcp::Size
+VideoContent::video_size_after_crop () const
+{
+ return crop().apply (video_size_after_3d_split ());
+}
+
+/** @param t A time offset from the start of this piece of content.
+ * @return Corresponding frame index.
+ */
+VideoContent::Frame
+VideoContent::time_to_content_video_frames (Time t) const
+{
+ shared_ptr<const Film> film = _film.lock ();
+ assert (film);
+
+ FrameRateConversion frc (video_frame_rate(), film->video_frame_rate());
+
+ /* Here we are converting from time (in the DCP) to a frame number in the content.
+ Hence we need to use the DCP's frame rate and the double/skip correction, not
+ the source's rate.
+ */
+ return t * film->video_frame_rate() / (frc.factor() * TIME_HZ);
+}