#include "film.h"
#include "exceptions.h"
#include "util.h"
-#include "raw_convert.h"
#include "log.h"
#include "ffmpeg_subtitle_stream.h"
#include "ffmpeg_audio_stream.h"
#include "digester.h"
#include "compose.hpp"
+#include <dcp/raw_convert.h>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
using std::vector;
using boost::shared_ptr;
using boost::optional;
+using dcp::raw_convert;
boost::mutex FFmpeg::_mutex;
boost::weak_ptr<Log> FFmpeg::_ffmpeg_log;
av_dict_set (&options, "analyzeduration", raw_convert<string> (5 * 60 * 1000000).c_str(), 0);
av_dict_set (&options, "probesize", raw_convert<string> (5 * 60 * 1000000).c_str(), 0);
- if (avformat_open_input (&_format_context, 0, 0, &options) < 0) {
- throw OpenFileError (_ffmpeg_content->path(0).string ());
+ int e = avformat_open_input (&_format_context, 0, 0, &options);
+ if (e < 0) {
+ throw OpenFileError (_ffmpeg_content->path(0).string(), e, true);
}
if (avformat_find_stream_info (_format_context, 0) < 0) {
digester.add (sub.pts);
for (unsigned int i = 0; i < sub.num_rects; ++i) {
AVSubtitleRect* rect = sub.rects[i];
- digester.add (rect->x);
- digester.add (rect->y);
- digester.add (rect->w);
- digester.add (rect->h);
+ if (rect->type == SUBTITLE_BITMAP) {
+ digester.add (rect->x);
+ digester.add (rect->y);
+ digester.add (rect->w);
+ digester.add (rect->h);
#ifdef DCPOMATIC_HAVE_AVSUBTITLERECT_PICT
- int const line = rect->pict.linesize[0];
- for (int j = 0; j < rect->h; ++j) {
- digester.add (rect->pict.data[0] + j * line, line);
- }
+ int const line = rect->pict.linesize[0];
+ for (int j = 0; j < rect->h; ++j) {
+ digester.add (rect->pict.data[0] + j * line, line);
+ }
#else
- int const line = rect->linesize[0];
- for (int j = 0; j < rect->h; ++j) {
- digester.add (rect->data[0] + j * line, line);
- }
+ int const line = rect->linesize[0];
+ for (int j = 0; j < rect->h; ++j) {
+ digester.add (rect->data[0] + j * line, line);
+ }
#endif
+ } else if (rect->type == SUBTITLE_TEXT) {
+ digester.add (string (rect->text));
+ } else if (rect->type == SUBTITLE_ASS) {
+ digester.add (string (rect->ass));
+ }
}
return digester.get ();
}
/* Now adjust so that the video pts starts on a frame */
if (first_video) {
ContentTime const fvc = first_video.get() + po;
- po += fvc.round_up (video_frame_rate) - fvc;
+ po += fvc.ceil (video_frame_rate) - fvc;
}
return po;