}
-TimedAudioBuffers<DCPTime>
+TimedAudioBuffers
AudioMerger::pull (DCPTime time)
{
assert (time >= _last_pull);
- TimedAudioBuffers<DCPTime> out;
+ TimedAudioBuffers out;
int64_t const to_return = DCPTime (time - _last_pull).frames (_frame_rate);
out.audio.reset (new AudioBuffers (_buffers->channels(), to_return));
_buffers->set_frames (after);
}
-TimedAudioBuffers<DCPTime>
+TimedAudioBuffers
AudioMerger::flush ()
{
if (_buffers->frames() == 0) {
- return TimedAudioBuffers<DCPTime> ();
+ return TimedAudioBuffers ();
}
- return TimedAudioBuffers<DCPTime> (_buffers, _last_pull);
+ return TimedAudioBuffers (_buffers, _last_pull);
}
void
/** Pull audio up to a given time; after this call, no more data can be pushed
* before the specified time.
*/
- TimedAudioBuffers<DCPTime> pull (DCPTime time);
+ TimedAudioBuffers pull (DCPTime time);
void push (boost::shared_ptr<const AudioBuffers> audio, DCPTime time);
- TimedAudioBuffers<DCPTime> flush ();
+ TimedAudioBuffers flush ();
void clear (DCPTime t);
private:
/* Assuming that all subs are at the same time */
DecodedTextSubtitle (std::list<dcp::SubtitleString> s)
- : Decoded (ContentTime::from_seconds (subs.front().in().to_ticks() * 4 / 1000.0))
- , content_time_to (ContentTime::from_seconds (subs.front().out().to_ticks() * 4 / 1000.0))
+ : Decoded (ContentTime::from_seconds (s.front().in().to_ticks() * 4 / 1000.0))
+ , content_time_to (ContentTime::from_seconds (s.front().out().to_ticks() * 4 / 1000.0))
, subs (s)
{
AVStream* s = _format_context->streams[_video_stream];
if (s->avg_frame_rate.num && s->avg_frame_rate.den) {
- cout << "here we bitchen well are " << av_q2d (s->avg_frame_rate) << "\n";
return av_q2d (s->avg_frame_rate);
}
if (earliest_audio.get() < 0) {
earliest_audio = DCPTime ();
}
- TimedAudioBuffers<DCPTime> tb = _audio_merger.pull (earliest_audio);
+ TimedAudioBuffers tb = _audio_merger.pull (earliest_audio);
Audio (tb.audio, tb.time);
/* This assumes that the audio-frames-to-time conversion is exact
so that there are no accumulated errors caused by rounding.
void
Player::flush ()
{
- TimedAudioBuffers<DCPTime> tb = _audio_merger.flush ();
+ TimedAudioBuffers tb = _audio_merger.flush ();
if (_audio && tb.audio) {
Audio (tb.audio, tb.time);
_audio_position += DCPTime::from_frames (tb.audio->frames (), _film->audio_frame_rate ());
{
Content::examine (job);
SubRip s (shared_from_this ());
- boost::mutex::scoped_lock lm (_mutex);
shared_ptr<const Film> film = _film.lock ();
- _length = DCPTime (s.length (), film->active_frame_rate_change (position ()));
+ DCPTime len (s.length (), film->active_frame_rate_change (position ()));
+
+ boost::mutex::scoped_lock lm (_mutex);
+ _length = len;
}
string
#include <stdint.h>
#include <boost/shared_ptr.hpp>
#include <dcp/util.h>
+#include "dcpomatic_time.h"
class Content;
class VideoContent;
typedef std::vector<boost::shared_ptr<SubtitleContent> > SubtitleContentList;
typedef std::vector<boost::shared_ptr<FFmpegContent> > FFmpegContentList;
-template<class T>
struct TimedAudioBuffers
{
TimedAudioBuffers ()
: time (0)
{}
- TimedAudioBuffers (boost::shared_ptr<AudioBuffers> a, T t)
+ TimedAudioBuffers (boost::shared_ptr<AudioBuffers> a, DCPTime t)
: audio (a)
, time (t)
{}
boost::shared_ptr<AudioBuffers> audio;
- T time;
+ DCPTime time;
};
enum VideoFrameType
/* These examiner calls could call other content methods which take a lock on the mutex */
dcp::Size const vs = d->video_size ();
float const vfr = d->video_frame_rate ();
- cout << "taking " << vfr << "\n";
{
boost::mutex::scoped_lock lm (_mutex);
_video_size = vs;
_video_frame_rate = vfr;
- cout << "and then " << _video_frame_rate << "\n";
}
signal_changed (VideoContentProperty::VIDEO_SIZE);
/* Push 64 samples, 0 -> 63 at time 22 */
merger.push (buffers, DCPTime::from_frames (22, frame_rate));
- TimedAudioBuffers<DCPTime> tb = merger.pull (DCPTime::from_frames (22, frame_rate));
+ TimedAudioBuffers tb = merger.pull (DCPTime::from_frames (22, frame_rate));
BOOST_CHECK (tb.audio != shared_ptr<const AudioBuffers> ());
BOOST_CHECK_EQUAL (tb.audio->frames(), 22);
BOOST_CHECK_EQUAL (tb.time, DCPTime ());
}
merger.push (buffers, DCPTime::from_frames (9, frame_rate));
- TimedAudioBuffers<DCPTime> tb = merger.pull (DCPTime::from_frames (9, frame_rate));
+ TimedAudioBuffers tb = merger.pull (DCPTime::from_frames (9, frame_rate));
BOOST_CHECK_EQUAL (tb.audio->frames(), 9);
BOOST_CHECK_EQUAL (tb.time, DCPTime ());