X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fffmpeg_image_proxy.cc;h=f513eef2d57cbef6dc58c243f065c797905639eb;hb=bc4ab3bf40f7f58f50ad9e10222c0e3c17d47e45;hp=0b40b8f830cdc92a0f7ec0aa4a9b503a58a06faf;hpb=62f9b78a2eb5f0fc6b9028264bac6ad501d83309;p=dcpomatic.git diff --git a/src/lib/ffmpeg_image_proxy.cc b/src/lib/ffmpeg_image_proxy.cc index 0b40b8f83..f513eef2d 100644 --- a/src/lib/ffmpeg_image_proxy.cc +++ b/src/lib/ffmpeg_image_proxy.cc @@ -21,21 +21,22 @@ #include "compose.hpp" #include "cross.h" +#include "dcpomatic_assert.h" #include "dcpomatic_socket.h" #include "exceptions.h" #include "ffmpeg_image_proxy.h" #include "image.h" -#include "util.h" -#include "warnings.h" +#include "memory_util.h" #include -DCPOMATIC_DISABLE_WARNINGS +#include +LIBDCP_DISABLE_WARNINGS extern "C" { #include #include #include } #include -DCPOMATIC_ENABLE_WARNINGS +LIBDCP_ENABLE_WARNINGS #include #include "i18n.h" @@ -122,7 +123,7 @@ FFmpegImageProxy::avio_seek (int64_t const pos, int whence) ImageProxy::Result -FFmpegImageProxy::image (optional) const +FFmpegImageProxy::image (Image::Alignment alignment, optional) const { auto constexpr name_for_errors = "FFmpegImageProxy::image"; @@ -133,11 +134,11 @@ FFmpegImageProxy::image (optional) const } uint8_t* avio_buffer = static_cast (wrapped_av_malloc(4096)); - AVIOContext* avio_context = avio_alloc_context (avio_buffer, 4096, 0, const_cast(this), avio_read_wrapper, 0, avio_seek_wrapper); + auto avio_context = avio_alloc_context (avio_buffer, 4096, 0, const_cast(this), avio_read_wrapper, 0, avio_seek_wrapper); AVFormatContext* format_context = avformat_alloc_context (); format_context->pb = avio_context; - AVDictionary* options = 0; + AVDictionary* options = nullptr; /* These durations are in microseconds, and represent how far into the content file we will look for streams. */ @@ -150,7 +151,7 @@ FFmpegImageProxy::image (optional) const directly from the file). This code just does enough to allow the probe code to take a hint from "foo.tga" and so try targa format. */ - AVInputFormat* f = av_find_input_format ("image2"); + auto f = av_find_input_format ("image2"); format_context = avformat_alloc_context (); format_context->pb = avio_context; format_context->iformat = f; @@ -166,12 +167,12 @@ FFmpegImageProxy::image (optional) const int r = avformat_find_stream_info(format_context, 0); if (r < 0) { - throw DecodeError (N_("avcodec_find_stream_info"), name_for_errors, r); + throw DecodeError (N_("avcodec_find_stream_info"), name_for_errors, r, *_path); } DCPOMATIC_ASSERT (format_context->nb_streams == 1); - AVFrame* frame = av_frame_alloc (); + auto frame = av_frame_alloc (); if (!frame) { std::bad_alloc (); } @@ -181,31 +182,31 @@ FFmpegImageProxy::image (optional) const auto context = avcodec_alloc_context3 (codec); if (!context) { - throw DecodeError (N_("avcodec_alloc_context3"), name_for_errors); + throw DecodeError (N_("avcodec_alloc_context3"), name_for_errors, *_path); } r = avcodec_open2 (context, codec, 0); if (r < 0) { - throw DecodeError (N_("avcodec_open2"), name_for_errors, r); + throw DecodeError (N_("avcodec_open2"), name_for_errors, r, *_path); } AVPacket packet; r = av_read_frame (format_context, &packet); if (r < 0) { - throw DecodeError (N_("av_read_frame"), name_for_errors, r); + throw DecodeError (N_("av_read_frame"), name_for_errors, r, *_path); } r = avcodec_send_packet (context, &packet); if (r < 0) { - throw DecodeError (N_("avcodec_send_packet"), name_for_errors, r); + throw DecodeError (N_("avcodec_send_packet"), name_for_errors, r, *_path); } r = avcodec_receive_frame (context, frame); if (r < 0) { - throw DecodeError (N_("avcodec_receive_frame"), name_for_errors, r); + throw DecodeError (N_("avcodec_receive_frame"), name_for_errors, r, *_path); } - _image = make_shared(frame); + _image = make_shared(frame, alignment); av_packet_unref (&packet); av_frame_free (&frame);