#include "raw_image_proxy.h"
#include "video_decoder.h"
#include "film.h"
-#include "md5_digester.h"
#include "audio_decoder.h"
#include "compose.hpp"
#include "subtitle_content.h"
}
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
+#include <boost/make_shared.hpp>
#include <vector>
#include <iomanip>
#include <iostream>
using std::max;
using std::map;
using boost::shared_ptr;
+using boost::make_shared;
using boost::is_any_of;
using boost::split;
using dcp::Size;
*/
int const total_samples = size / bytes_per_audio_sample (stream);
int const frames = total_samples / stream->channels();
- shared_ptr<AudioBuffers> audio (new AudioBuffers (stream->channels(), frames));
+ shared_ptr<AudioBuffers> audio = make_shared<AudioBuffers> (stream->channels(), frames);
switch (audio_sample_format (stream)) {
case AV_SAMPLE_FMT_U8:
if (i->second != AV_NOPTS_VALUE) {
double const pts = i->second * av_q2d (_format_context->streams[_video_stream.get()]->time_base) + _pts_offset.seconds ();
video->give (
- shared_ptr<ImageProxy> (new RawImageProxy (image)),
+ make_shared<RawImageProxy> (image),
llrint (pts * _ffmpeg_content->active_video_frame_rate ())
);
} else {
/* Note RGBA is expressed little-endian, so the first byte in the word is R, second
G, third B, fourth A.
*/
- shared_ptr<Image> image (new Image (AV_PIX_FMT_RGBA, dcp::Size (rect->w, rect->h), true));
+ shared_ptr<Image> image = make_shared<Image> (AV_PIX_FMT_RGBA, dcp::Size (rect->w, rect->h), true);
#ifdef DCPOMATIC_HAVE_AVSUBTITLERECT_PICT
/* Start of the first line in the subtitle */
sub::RawSubtitle base;
list<sub::RawSubtitle> raw = sub::SSAReader::parse_line (base, bits[9]);
- list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (raw);
- /* XXX: lots of this is copied from TextSubtitle; there should probably be some sharing */
-
- /* Highest line index in this subtitle */
- int highest = 0;
- BOOST_FOREACH (sub::Subtitle i, subs) {
- BOOST_FOREACH (sub::Line j, i.lines) {
- DCPOMATIC_ASSERT (j.vertical_position.reference && j.vertical_position.reference.get() == sub::TOP_OF_SUBTITLE);
- DCPOMATIC_ASSERT (j.vertical_position.line);
- highest = max (highest, j.vertical_position.line.get());
- }
+ BOOST_FOREACH (sub::Subtitle const & i, sub::collect<list<sub::Subtitle> > (raw)) {
+ subtitle->give_text (period, i);
}
-
- list<dcp::SubtitleString> ss;
-
- BOOST_FOREACH (sub::Subtitle i, sub::collect<list<sub::Subtitle> > (sub::SSAReader::parse_line (base, bits[9]))) {
- BOOST_FOREACH (sub::Line j, i.lines) {
- BOOST_FOREACH (sub::Block k, j.blocks) {
- ss.push_back (
- dcp::SubtitleString (
- boost::optional<string> (),
- k.italic,
- k.bold,
- subtitle->content()->colour(),
- /* 48pt is 1/22nd of the screen height */
- 48,
- 1,
- dcp::Time (i.from.seconds(), 1000),
- dcp::Time (i.to.seconds(), 1000),
- 0,
- dcp::HALIGN_CENTER,
- /* This 1.015 is an arbitrary value to lift the bottom sub off the bottom
- of the screen a bit to a pleasing degree.
- */
- 1.015 - ((1 + highest - j.vertical_position.line.get()) * 1.5 / 22),
- dcp::VALIGN_TOP,
- dcp::DIRECTION_LTR,
- k.text,
- subtitle->content()->outline() ? dcp::BORDER : dcp::NONE,
- subtitle->content()->outline_colour(),
- dcp::Time (),
- dcp::Time ()
- )
- );
- }
- }
- }
-
- subtitle->give_text (period, ss);
}