From 9b54ad37f0174c1eeebb903cefae7567dee79959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= Date: Tue, 18 Jan 2022 02:34:51 +0100 Subject: [PATCH] Port to ffmpeg 5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port to ffmpeg 5.0 -- av_register_all removed, AVPicture removed, pkt_pts changed to pts Signed-off-by: Bernhard Rosenkränzer --- src/ffmpeg.imageio/ffmpeginput.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ffmpeg.imageio/ffmpeginput.cpp b/src/ffmpeg.imageio/ffmpeginput.cpp index b3018903b3..a71c09d9d7 100644 --- a/src/ffmpeg.imageio/ffmpeginput.cpp +++ b/src/ffmpeg.imageio/ffmpeginput.cpp @@ -32,7 +32,7 @@ extern "C" { // ffmpeg is a C api inline int -avpicture_fill(AVPicture* picture, uint8_t* ptr, enum AVPixelFormat pix_fmt, +avpicture_fill(AVFrame* picture, uint8_t* ptr, enum AVPixelFormat pix_fmt, int width, int height) { AVFrame* frame = reinterpret_cast(picture); @@ -119,7 +119,7 @@ class FFmpegInput final : public ImageInput { int64_t m_nsubimages; AVFormatContext* m_format_context; AVCodecContext* m_codec_context; - AVCodec* m_codec; + const AVCodec* m_codec; AVFrame* m_frame; AVFrame* m_rgb_frame; size_t m_stride; // scanline width in bytes, a.k.a. scanline stride @@ -238,7 +238,6 @@ FFmpegInput::open(const std::string& name, ImageSpec& spec) } static std::once_flag init_flag; - std::call_once(init_flag, av_register_all); const char* file_name = name.c_str(); av_log_set_level(AV_LOG_FATAL); if (avformat_open_input(&m_format_context, file_name, NULL, NULL) != 0) { @@ -608,11 +607,11 @@ FFmpegInput::read_frame(int frame) finished = receive_frame(m_codec_context, m_frame, &pkt); double pts = 0; - if (static_cast(m_frame->pkt_pts) + if (static_cast(m_frame->pts) != int64_t(AV_NOPTS_VALUE)) { pts = av_q2d( m_format_context->streams[m_video_stream]->time_base) - * m_frame->pkt_pts; + * m_frame->pts; } int current_frame = int((pts - m_start_time) * fps() + 0.5f); //??? @@ -620,7 +619,7 @@ FFmpegInput::read_frame(int frame) m_last_search_pos = current_frame; if (current_frame == frame && finished) { - avpicture_fill(reinterpret_cast(m_rgb_frame), + avpicture_fill(m_rgb_frame, &m_rgb_buffer[0], m_dst_pix_format, m_codec_context->width, m_codec_context->height); sws_scale(m_sws_rgb_context,