{
boost::mutex::scoped_lock lm (_mutex);
+DCPOMATIC_DISABLE_WARNINGS
for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
avcodec_close (_format_context->streams[i]->codec);
}
+DCPOMATIC_ENABLE_WARNINGS
av_frame_free (&_frame);
avformat_close_input (&_format_context);
optional<int> video_stream_undefined_frame_rate;
+DCPOMATIC_DISABLE_WARNINGS
for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
AVStream* s = _format_context->streams[i];
if (s->codec->codec_type == AVMEDIA_TYPE_VIDEO && avcodec_find_decoder(s->codec->codec_id)) {
}
}
}
+DCPOMATIC_ENABLE_WARNINGS
/* Files from iTunes sometimes have two video streams, one with the avg_frame_rate.num and .den set
to zero. Only use such a stream if there is no alternative.
{
boost::mutex::scoped_lock lm (_mutex);
+DCPOMATIC_DISABLE_WARNINGS
for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
AVCodecContext* context = _format_context->streams[i]->codec;
dcpomatic_log->log (String::compose ("No codec found for stream %1", i), LogEntry::TYPE_WARNING);
}
}
+DCPOMATIC_ENABLE_WARNINGS
}
+DCPOMATIC_DISABLE_WARNINGS
AVCodecContext *
FFmpeg::video_codec_context () const
{
return _ffmpeg_content->subtitle_stream()->stream(_format_context)->codec;
}
+DCPOMATIC_ENABLE_WARNINGS
int
FFmpeg::avio_read (uint8_t* buffer, int const amount)
#include "file_group.h"
#include "ffmpeg_subtitle_period.h"
+#include "warnings.h"
+DCPOMATIC_DISABLE_WARNINGS
extern "C" {
#include <libavcodec/avcodec.h>
}
+DCPOMATIC_ENABLE_WARNINGS
#include <boost/shared_ptr.hpp>
#include <boost/thread/mutex.hpp>
{
DCPOMATIC_ASSERT (bytes_per_audio_sample (stream));
+DCPOMATIC_DISABLE_WARNINGS
int const size = av_samples_get_buffer_size (
0, stream->stream(_format_context)->codec->channels, _frame->nb_samples, audio_sample_format (stream), 1
);
+DCPOMATIC_ENABLE_WARNINGS
/* XXX: can't we just use _frame->nb_samples directly here? */
/* XXX: can't we use swr_convert() to do the format conversion? */
AVSampleFormat
FFmpegDecoder::audio_sample_format (shared_ptr<FFmpegAudioStream> stream) const
{
+DCPOMATIC_DISABLE_WARNINGS
return stream->stream (_format_context)->codec->sample_fmt;
+DCPOMATIC_ENABLE_WARNINGS
}
int
avcodec_flush_buffers (video_codec_context());
}
+DCPOMATIC_DISABLE_WARNINGS
BOOST_FOREACH (shared_ptr<FFmpegAudioStream> i, ffmpeg_content()->ffmpeg_audio_streams()) {
avcodec_flush_buffers (i->stream(_format_context)->codec);
}
+DCPOMATIC_ENABLE_WARNINGS
if (subtitle_codec_context ()) {
avcodec_flush_buffers (subtitle_codec_context ());
return;
}
+DCPOMATIC_DISABLE_WARNINGS
while (copy_packet.size > 0) {
int frame_finished;
to_string(_pts_offset)
);
}
+DCPOMATIC_ENABLE_WARNINGS
/* Give this data provided there is some, and its time is sane */
if (ct >= ContentTime() && data->frames() > 0) {
DCPOMATIC_ASSERT (_video_stream);
int frame_finished;
+DCPOMATIC_DISABLE_WARNINGS
if (avcodec_decode_video2 (video_codec_context(), _frame, &frame_finished, &_packet) < 0 || !frame_finished) {
return false;
}
+DCPOMATIC_ENABLE_WARNINGS
boost::mutex::scoped_lock lm (_filter_graphs_mutex);
*/
+#include "ffmpeg_examiner.h"
+#include "ffmpeg_content.h"
+#include "job.h"
+#include "ffmpeg_audio_stream.h"
+#include "ffmpeg_subtitle_stream.h"
+#include "util.h"
+#include "warnings.h"
+DCPOMATIC_DISABLE_WARNINGS
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavutil/eval.h>
#include <libavutil/display.h>
}
-#include "ffmpeg_examiner.h"
-#include "ffmpeg_content.h"
-#include "job.h"
-#include "ffmpeg_audio_stream.h"
-#include "ffmpeg_subtitle_stream.h"
-#include "util.h"
+DCPOMATIC_ENABLE_WARNINGS
#include <boost/foreach.hpp>
#include <iostream>
using boost::optional;
using namespace dcpomatic;
+
/** @param job job that the examiner is operating in, or 0 */
FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Job> job)
: FFmpeg (c)
for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
AVStream* s = _format_context->streams[i];
+DCPOMATIC_DISABLE_WARNINGS
if (s->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
/* This is a hack; sometimes it seems that _audio_codec_context->channel_layout isn't set up,
}
AVCodecContext* context = _format_context->streams[_packet.stream_index]->codec;
+DCPOMATIC_ENABLE_WARNINGS
if (_video_stream && _packet.stream_index == _video_stream.get()) {
video_packet (context);
#endif
}
+
void
FFmpegExaminer::video_packet (AVCodecContext* context)
{
}
int frame_finished;
+DCPOMATIC_DISABLE_WARNINGS
if (avcodec_decode_video2 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) {
+DCPOMATIC_ENABLE_WARNINGS
if (!_first_video) {
_first_video = frame_time (_format_context->streams[_video_stream.get()]);
}
}
}
+
void
FFmpegExaminer::audio_packet (AVCodecContext* context, shared_ptr<FFmpegAudioStream> stream)
{
}
int frame_finished;
+DCPOMATIC_DISABLE_WARNINGS
if (avcodec_decode_audio4 (context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) {
+DCPOMATIC_ENABLE_WARNINGS
stream->first_audio = frame_time (stream->stream (_format_context));
}
}
+
optional<ContentTime>
FFmpegExaminer::frame_time (AVStream* s) const
{
optional<ContentTime> t;
+DCPOMATIC_DISABLE_WARNINGS
int64_t const bet = av_frame_get_best_effort_timestamp (_frame);
+DCPOMATIC_ENABLE_WARNINGS
if (bet != AV_NOPTS_VALUE) {
t = ContentTime::from_seconds (bet * av_q2d (s->time_base));
}
return t;
}
+
optional<double>
FFmpegExaminer::video_frame_rate () const
{
throw runtime_error ("could not create FFmpeg output audio stream");
}
+DCPOMATIC_DISABLE_WARNINGS
_video_stream->id = _video_stream_index;
_video_stream->codec = _video_codec_context;
_audio_stream->id = _audio_stream_index;
_audio_stream->codec = _audio_codec_context;
+DCPOMATIC_ENABLE_WARNINGS
if (avcodec_open2 (_video_codec_context, _video_codec, &_video_options) < 0) {
throw runtime_error ("could not open FFmpeg video codec");
packet.size = 0;
int got_packet;
+DCPOMATIC_DISABLE_WARNINGS
avcodec_encode_video2 (_video_codec_context, &packet, 0, &got_packet);
+DCPOMATIC_ENABLE_WARNINGS
if (got_packet) {
packet.stream_index = 0;
av_interleaved_write_frame (_format_context, &packet);
packet.data = 0;
packet.size = 0;
+DCPOMATIC_DISABLE_WARNINGS
avcodec_encode_audio2 (_audio_codec_context, &packet, 0, &got_packet);
+DCPOMATIC_ENABLE_WARNINGS
if (got_packet) {
packet.stream_index = 0;
av_interleaved_write_frame (_format_context, &packet);
packet.size = 0;
int got_packet;
+DCPOMATIC_DISABLE_WARNINGS
if (avcodec_encode_video2 (_video_codec_context, &packet, frame, &got_packet) < 0) {
throw EncodeError ("FFmpeg video encode failed");
}
+DCPOMATIC_ENABLE_WARNINGS
if (got_packet && packet.size) {
packet.stream_index = _video_stream_index;
packet.size = 0;
int got_packet;
+DCPOMATIC_DISABLE_WARNINGS
if (avcodec_encode_audio2 (_audio_codec_context, &packet, frame, &got_packet) < 0) {
throw EncodeError ("FFmpeg audio encode failed");
}
+DCPOMATIC_ENABLE_WARNINGS
if (got_packet && packet.size) {
packet.stream_index = _audio_stream_index;
int
FFmpegImageProxy::avio_read (uint8_t* buffer, int const amount)
{
- int const to_do = min(int64_t(amount), _data.size() - _pos);
+ int const to_do = min(static_cast<int64_t>(amount), static_cast<int64_t>(_data.size()) - _pos);
if (to_do == 0) {
return AVERROR_EOF;
}
return _pos;
}
+DCPOMATIC_DISABLE_WARNINGS
ImageProxy::Result
FFmpegImageProxy::image (optional<dcp::Size>) const
return Result (_image, 0);
}
+DCPOMATIC_ENABLE_WARNINGS
+
void
FFmpegImageProxy::add_metadata (xmlpp::Node* node) const
{
#include "image.h"
#include "text_decoder.h"
#include "job_manager.h"
+#include "warnings.h"
#include <dcp/decrypted_kdm.h>
#include <dcp/locale_convert.h>
#include <dcp/util.h>
SetUnhandledExceptionFilter(exception_handler);
#endif
+DCPOMATIC_DISABLE_WARNINGS
av_register_all ();
avfilter_register_all ();
+DCPOMATIC_ENABLE_WARNINGS
#ifdef DCPOMATIC_OSX
/* Add our library directory to the libltdl search path so that
*/
-#include "video_filter_graph.h"
-#include "image.h"
#include "compose.hpp"
+#include "image.h"
+#include "video_filter_graph.h"
+#include "warnings.h"
extern "C" {
#include <libavfilter/buffersrc.h>
#include <libavfilter/buffersink.h>
{
list<pair<shared_ptr<Image>, int64_t> > images;
+DCPOMATIC_DISABLE_WARNINGS
if (_copy) {
images.push_back (make_pair (shared_ptr<Image> (new Image (frame)), av_frame_get_best_effort_timestamp (frame)));
} else {
av_frame_unref (_frame);
}
}
+DCPOMATIC_ENABLE_WARNINGS
return images;
}