summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-04-07 22:15:01 +0200
committerCarl Hetherington <cth@carlh.net>2021-04-07 22:15:01 +0200
commit7bc2134d658778e04f1756c255e604b4ab5a5831 (patch)
treeb5ba51f2534604a6528fbbb130fd0cfca7d6fb70 /src/lib/ffmpeg.cc
parenta771a806291243760552988a1a7a5742bc007ee2 (diff)
Assorted C++11/formatting cleanups.
Diffstat (limited to 'src/lib/ffmpeg.cc')
-rw-r--r--src/lib/ffmpeg.cc27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/lib/ffmpeg.cc b/src/lib/ffmpeg.cc
index f8398763e..eb131d434 100644
--- a/src/lib/ffmpeg.cc
+++ b/src/lib/ffmpeg.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -18,6 +18,7 @@
*/
+
#include "ffmpeg.h"
#include "ffmpeg_content.h"
#include "film.h"
@@ -41,6 +42,7 @@ extern "C" {
#include "i18n.h"
+
using std::string;
using std::cout;
using std::cerr;
@@ -50,20 +52,18 @@ using boost::optional;
using dcp::raw_convert;
using namespace dcpomatic;
+
boost::mutex FFmpeg::_mutex;
+
FFmpeg::FFmpeg (std::shared_ptr<const FFmpegContent> c)
: _ffmpeg_content (c)
- , _avio_buffer (0)
- , _avio_buffer_size (4096)
- , _avio_context (0)
- , _format_context (0)
- , _frame (0)
{
setup_general ();
setup_decoders ();
}
+
FFmpeg::~FFmpeg ()
{
boost::mutex::scoped_lock lm (_mutex);
@@ -78,18 +78,21 @@ DCPOMATIC_ENABLE_WARNINGS
avformat_close_input (&_format_context);
}
+
static int
avio_read_wrapper (void* data, uint8_t* buffer, int amount)
{
return reinterpret_cast<FFmpeg*>(data)->avio_read (buffer, amount);
}
+
static int64_t
avio_seek_wrapper (void* data, int64_t offset, int whence)
{
return reinterpret_cast<FFmpeg*>(data)->avio_seek (offset, whence);
}
+
void
FFmpeg::ffmpeg_log_callback (void* ptr, int level, const char* fmt, va_list vl)
{
@@ -105,6 +108,7 @@ FFmpeg::ffmpeg_log_callback (void* ptr, int level, const char* fmt, va_list vl)
dcpomatic_log->log (String::compose ("FFmpeg: %1", str), LogEntry::TYPE_GENERAL);
}
+
void
FFmpeg::setup_general ()
{
@@ -114,7 +118,7 @@ FFmpeg::setup_general ()
av_log_set_callback (FFmpeg::ffmpeg_log_callback);
_file_group.set_paths (_ffmpeg_content->paths ());
- _avio_buffer = static_cast<uint8_t*> (wrapped_av_malloc (_avio_buffer_size));
+ _avio_buffer = static_cast<uint8_t*> (wrapped_av_malloc(_avio_buffer_size));
_avio_context = avio_alloc_context (_avio_buffer, _avio_buffer_size, 0, this, avio_read_wrapper, 0, avio_seek_wrapper);
if (!_avio_context) {
throw std::bad_alloc ();
@@ -194,6 +198,7 @@ DCPOMATIC_ENABLE_WARNINGS
}
}
+
void
FFmpeg::setup_decoders ()
{
@@ -232,6 +237,7 @@ DCPOMATIC_DISABLE_WARNINGS
DCPOMATIC_ENABLE_WARNINGS
}
+
DCPOMATIC_DISABLE_WARNINGS
AVCodecContext *
FFmpeg::video_codec_context () const
@@ -243,10 +249,11 @@ FFmpeg::video_codec_context () const
return _format_context->streams[_video_stream.get()]->codec;
}
+
AVCodecContext *
FFmpeg::subtitle_codec_context () const
{
- if (!_ffmpeg_content->subtitle_stream ()) {
+ if (!_ffmpeg_content->subtitle_stream()) {
return nullptr;
}
@@ -254,12 +261,14 @@ FFmpeg::subtitle_codec_context () const
}
DCPOMATIC_ENABLE_WARNINGS
+
int
FFmpeg::avio_read (uint8_t* buffer, int const amount)
{
return _file_group.read (buffer, amount);
}
+
int64_t
FFmpeg::avio_seek (int64_t const pos, int whence)
{
@@ -270,6 +279,7 @@ FFmpeg::avio_seek (int64_t const pos, int whence)
return _file_group.seek (pos, whence);
}
+
FFmpegSubtitlePeriod
FFmpeg::subtitle_period (AVSubtitle const & sub)
{
@@ -286,6 +296,7 @@ FFmpeg::subtitle_period (AVSubtitle const & sub)
);
}
+
/** Compute the pts offset to use given a set of audio streams and some video details.
* Sometimes these parameters will have just been determined by an Examiner, sometimes
* they will have been retrieved from a piece of Content, hence the need for this method