);
assert (_audio_codec_context->channels == _ffmpeg_content->audio_channels());
- Audio (deinterleave_audio (_frame->data, data_size), source_pts_seconds);
+ audio (deinterleave_audio (_frame->data, data_size), source_pts_seconds);
}
copy_packet.data += decode_result;
Time
FFmpegDecoder::next () const
{
- if (_decode_video && _decode_audio) {
+ if (_decode_video && _decode_audio && _audio_codec_context) {
return min (_next_video, _next_audio);
}
- if (_decode_audio) {
+ if (_decode_audio && _audio_codec_context) {
return _next_audio;
}
using std::stringstream;
using std::string;
using std::list;
+using std::cout;
using boost::shared_ptr;
using boost::weak_ptr;
using libdcp::Size;
stringstream a;
a << "video_size=" << _size.width << "x" << _size.height << ":"
<< "pix_fmt=" << _pixel_format << ":"
- << "time_base=0/1:"
- << "pixel_aspect=0/1";
+ << "time_base=1/1:"
+ << "pixel_aspect=1/1";
int r;
if (time > _next_audio) {
/* We can emit some audio from our buffers */
- assert (_film->time_to_audio_frames (time - _next_audio) <= _audio_buffers.frames());
OutputAudioFrame const N = _film->time_to_audio_frames (time - _next_audio);
+ assert (N <= _audio_buffers.frames());
shared_ptr<AudioBuffers> emit (new AudioBuffers (_audio_buffers.channels(), N));
emit->copy_from (&_audio_buffers, N, 0, 0);
Audio (emit, _next_audio);
/* Now accumulate the new audio into our buffers */
_audio_buffers.ensure_size (_audio_buffers.frames() + audio->frames());
_audio_buffers.accumulate_frames (audio.get(), 0, 0, audio->frames ());
+ _audio_buffers.set_frames (_audio_buffers.frames() + audio->frames());
}
/** @return true on error */
if (diff > 0) {
add_black_piece (video_pos, diff);
}
-
video_pos = (*i)->content->end();
- } else {
+ }
+
+ shared_ptr<AudioContent> ac = dynamic_pointer_cast<AudioContent> ((*i)->content);
+ if (ac && ac->audio_channels()) {
Time const diff = (*i)->content->start() - audio_pos;
if (diff > 0) {
add_silent_piece (video_pos, diff);
Playlist::content_changed (weak_ptr<Content> c, int p)
{
if (p == ContentProperty::LENGTH && _sequence_video && !_sequencing_video) {
- cout << "sequencing.\n";
_sequencing_video = true;
ContentList cl = _content;
}
(*i)->set_start (last);
- cout << (*i)->file() << " -> " << last << "\n";
last = (*i)->end ();
}
{
shared_ptr<Film> film = new_test_film ("make_dcp_test");
film->set_name ("test_film2");
- film->add_content (shared_ptr<FFmpegContent> (new FFmpegContent (film, "../../../test/test.mp4")));
+ system ("pwd");
+ film->examine_and_add_content (shared_ptr<FFmpegContent> (new FFmpegContent (film, "test/test.mp4")));
+
+ /* Wait for the examine to finish */
+ while (JobManager::instance()->work_to_do ()) {
+ dcpomatic_sleep (1);
+ }
+
film->set_container (Container::from_id ("185"));
film->set_dcp_content_type (DCPContentType::from_pretty_name ("Test"));
film->make_dcp ();
boost::filesystem::remove (p);
BOOST_CHECK (!f.have_dcp ());
}
-
-BOOST_AUTO_TEST_CASE (make_dcp_with_range_test)
-{
- shared_ptr<Film> film = new_test_film ("make_dcp_with_range_test");
- film->set_name ("test_film3");
- film->add_content (shared_ptr<Content> (new FFmpegContent (film, "../../../test/test.mp4")));
-// film->examine_content ();
- film->set_container (Container::from_id ("185"));
- film->set_dcp_content_type (DCPContentType::from_pretty_name ("Test"));
- film->make_dcp ();
-
- while (JobManager::instance()->work_to_do() && !JobManager::instance()->errors()) {
- dcpomatic_sleep (1);
- }
-
- BOOST_CHECK_EQUAL (JobManager::instance()->errors(), false);
-}
-
BOOST_CHECK (f->dcp_content_type() == 0);
f->set_name ("fred");
-// BOOST_CHECK_THROW (f->add_content ("jim"), OpenFileError);
f->set_dcp_content_type (DCPContentType::from_pretty_name ("Short"));
f->set_container (Container::from_id ("185"));
f->set_ab (true);
f->write_metadata ();
stringstream s;
- s << "diff -u test/metadata.ref " << test_film << "/metadata";
+ s << "diff -u test/metadata.xml.ref " << test_film << "/metadata.xml";
BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0);
shared_ptr<Film> g (new Film (test_film));
+++ /dev/null
-version 4
-name fred
-use_dci_name 1
-content
-trust_content_header 1
-dcp_content_type SHR
-format 185
-left_crop 1
-right_crop 2
-top_crop 3
-bottom_crop 4
-filter pphb
-filter unsharp
-scaler bicubic
-trim_start 42
-trim_end 99
-trim_type cpl
-dcp_ab 1
-use_content_audio 1
-audio_gain 0
-audio_delay 0
-still_duration 10
-with_subtitles 0
-subtitle_offset 0
-subtitle_scale 1
-colour_lut 0
-j2k_bandwidth 200000000
-audio_language
-subtitle_language
-territory
-rating
-studio
-facility
-package_type
-dci_date 20130211
-dcp_frame_rate 0
-width 0
-height 0
-length 0
-content_digest
-external_audio_stream external 0 0
-source_frame_rate 0
--- /dev/null
+<?xml version="1.0"?>
+<Metadata>
+ <Version>4</Version>
+ <Name>fred</Name>
+ <UseDCIName>1</UseDCIName>
+ <DCPContentType>SHR</DCPContentType>
+ <Container>185</Container>
+ <Scaler>bicubic</Scaler>
+ <AB>1</AB>
+ <WithSubtitles>0</WithSubtitles>
+ <SubtitleOffset>0</SubtitleOffset>
+ <SubtitleScale>1</SubtitleScale>
+ <ColourLUT>0</ColourLUT>
+ <J2KBandwidth>200000000</J2KBandwidth>
+ <DCIMetadata>
+ <AudioLanguage></AudioLanguage>
+ <SubtitleLanguage></SubtitleLanguage>
+ <Territory></Territory>
+ <Rating></Rating>
+ <Studio></Studio>
+ <Facility></Facility>
+ <PackageType></PackageType>
+ </DCIMetadata>
+ <DCPVideoFrameRate>0</DCPVideoFrameRate>
+ <DCIDate>20130211</DCIDate>
+ <DCPAudioChannels>6</DCPAudioChannels>
+ <Playlist>
+ <Loop>1</Loop>
+ <SequenceVideo>1</SequenceVideo>
+ </Playlist>
+</Metadata>
f->width = 640;
f->height = 480;
f->format = static_cast<int> (i->format);
+ av_frame_get_buffer (f, true);
SimpleImage t (f);
BOOST_CHECK_EQUAL(t.components(), i->components);
BOOST_CHECK_EQUAL(t.lines(0), i->lines[0]);
Config::instance()->set_servers (vector<ServerDescription*> ());
Config::instance()->set_server_port (61920);
Config::instance()->set_default_dci_metadata (DCIMetadata ());
+ Config::instance()->set_default_container (0);
+ Config::instance()->set_default_dcp_content_type (0);
}
};