summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_content.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-05-16 08:36:47 +0100
committerCarl Hetherington <cth@carlh.net>2013-05-16 08:36:47 +0100
commit21ce34c2cd04a2e7e133ff693b84c054182f4f91 (patch)
tree5bda50a34b2fa7526dcd682578247f75a85d26b1 /src/lib/ffmpeg_content.cc
parent0db016f90ae722fc8b72d465e21d9f153f72b340 (diff)
Compiles; strange hang on adding content to a film.
Diffstat (limited to 'src/lib/ffmpeg_content.cc')
-rw-r--r--src/lib/ffmpeg_content.cc33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index a61f777c8..55281ff9b 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -206,7 +206,7 @@ FFmpegContent::audio_length () const
return 0;
}
- return video_frames_to_audio_frames (_video_length, audio_frame_rate(), video_frame_rate());
+ return video_frames_to_audio_frames (_video_length, content_audio_frame_rate(), video_frame_rate());
}
int
@@ -220,7 +220,7 @@ FFmpegContent::audio_channels () const
}
int
-FFmpegContent::audio_frame_rate () const
+FFmpegContent::content_audio_frame_rate () const
{
if (!_audio_stream) {
return 0;
@@ -229,6 +229,28 @@ FFmpegContent::audio_frame_rate () const
return _audio_stream->frame_rate;
}
+int
+FFmpegContent::output_audio_frame_rate (shared_ptr<const Film> film) const
+{
+ /* Resample to a DCI-approved sample rate */
+ double t = dcp_audio_frame_rate (content_audio_frame_rate ());
+
+ FrameRateConversion frc (video_frame_rate(), film->dcp_video_frame_rate());
+
+ /* Compensate if the DCP is being run at a different frame rate
+ to the source; that is, if the video is run such that it will
+ look different in the DCP compared to the source (slower or faster).
+ skip/repeat doesn't come into effect here.
+ */
+
+ if (frc.change_speed) {
+ t *= video_frame_rate() * frc.factor() / film->dcp_video_frame_rate();
+ cout << "-> " << t << "\n";
+ }
+
+ return rint (t);
+}
+
bool
operator== (FFmpegSubtitleStream const & a, FFmpegSubtitleStream const & b)
{
@@ -281,8 +303,9 @@ FFmpegContent::clone () const
return shared_ptr<Content> (new FFmpegContent (*this));
}
-double
-FFmpegContent::temporal_length () const
+Time
+FFmpegContent::length (shared_ptr<const Film> film) const
{
- return video_length() / video_frame_rate();
+ FrameRateConversion frc (video_frame_rate (), film->dcp_video_frame_rate ());
+ return video_length() * frc.factor() * TIME_HZ / film->dcp_video_frame_rate ();
}