REVISION needs re-bumping, but otherwise this still applies. +cc maintainer
----- Forwarded message from Brad Smith <b...@comstyle.com> ----- From: Brad Smith <b...@comstyle.com> Date: Sat, 3 Aug 2024 13:04:01 -0400 To: ports@openbsd.org Subject: UPDATE: OpenSceneGraph - FFmpeg Here is a diff to fix building OpenSceneGraph with newer FFmpeg. Please test. Index: Makefile =================================================================== RCS file: /cvs/ports/graphics/openscenegraph/Makefile,v retrieving revision 1.34 diff -u -p -u -p -r1.34 Makefile --- Makefile 15 Nov 2023 17:55:22 -0000 1.34 +++ Makefile 3 Aug 2024 16:51:08 -0000 @@ -10,7 +10,7 @@ GH_ACCOUNT = openscenegraph GH_PROJECT = OpenSceneGraph GH_TAGNAME = OpenSceneGraph-$V DISTNAME = openscenegraph-${V} -REVISION = 5 +REVISION = 6 SUBST_VARS += V Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_cpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_cpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_cpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,83 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp +--- src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp +@@ -13,15 +13,6 @@ + #define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 + #endif + +-#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1) +-#define av_frame_alloc avcodec_alloc_frame +-#define av_frame_free avcodec_free_frame +-#endif +- +-#if LIBAVCODEC_VERSION_MAJOR < 56 +- #define AV_CODEC_ID_NONE CODEC_ID_NONE +-#endif +- + namespace osgFFmpeg { + + static int decode_audio(AVCodecContext *avctx, int16_t *samples, +@@ -32,25 +23,23 @@ static int decode_audio(AVCodecContext *avctx, int16_t + int out_nb_channels, + AVSampleFormat out_sample_format) + { +-#if LIBAVCODEC_VERSION_MAJOR >= 53 || (LIBAVCODEC_VERSION_MAJOR==52 && LIBAVCODEC_VERSION_MINOR>=32) +- + AVPacket avpkt; + av_init_packet(&avpkt); + avpkt.data = const_cast<uint8_t *>(buf); + avpkt.size = buf_size; + + AVFrame *frame = av_frame_alloc(); +- int ret, got_frame = 0; ++ int ret; + + if (!frame) + return AVERROR(ENOMEM); + +- ret = avcodec_decode_audio4(avctx, frame, &got_frame, &avpkt); ++ ret = avcodec_receive_frame(avctx, frame); + + #ifdef USE_AVRESAMPLE // libav's AVFrame structure does not contain a 'channels' field +- if (ret >= 0 && got_frame) { ++ if (ret >= 0) { + #else +- if (ret >= 0 && got_frame && av_frame_get_channels(frame)>0) { ++ if (ret >= 0 && frame->channels>0) { + #endif + int ch, plane_size; + int planar = av_sample_fmt_is_planar(avctx->sample_fmt); +@@ -108,11 +97,6 @@ static int decode_audio(AVCodecContext *avctx, int16_t + } + av_frame_free(&frame); + return ret; +- +-#else +- // fallback for older versions of ffmpeg that don't have avcodec_decode_audio3. +- return avcodec_decode_audio2(avctx, samples, frame_size_ptr, buf, buf_size); +-#endif + } + + +@@ -151,7 +135,9 @@ void FFmpegDecoderAudio::open(AVStream * const stream, + return; + + m_stream = stream; +- m_context = stream->codec; ++ m_codecpar = stream->codecpar; ++ const AVCodec* p_codec = avcodec_find_decoder(m_codecpar->codec_id); ++ m_context = avcodec_alloc_context3(p_codec); + + m_in_sample_rate = m_context->sample_rate; + m_in_nb_channels = m_context->channels; +@@ -214,7 +200,7 @@ printf("### CONVERTING from sample format %s TO %s\n\t + throw std::runtime_error("invalid audio codec");; + + // Find the decoder for the audio stream +- AVCodec * const p_codec = avcodec_find_decoder(m_context->codec_id); ++ p_codec = avcodec_find_decoder(m_context->codec_id); + + if (p_codec == 0) + throw std::runtime_error("avcodec_find_decoder() failed"); Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_hpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_hpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_hpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderAudio_hpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,13 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp +--- src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp +@@ -59,6 +59,7 @@ class FFmpegDecoderAudio : public OpenThreads::Thread + PacketQueue & m_packets; + FFmpegClocks & m_clocks; + AVStream * m_stream; ++ AVCodecParameters * m_codecpar; + AVCodecContext * m_context; + FFmpegPacket m_packet; + const uint8_t * m_packet_data; Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_cpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_cpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_cpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,134 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp +--- src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp +@@ -62,7 +62,9 @@ FFmpegDecoderVideo::~FFmpegDecoderVideo() + void FFmpegDecoderVideo::open(AVStream * const stream) + { + m_stream = stream; +- m_context = stream->codec; ++ m_codecpar = stream->codecpar; ++ const AVCodec* p_codec = avcodec_find_decoder(m_codecpar->codec_id); ++ m_context = avcodec_alloc_context3(p_codec); + + // Trust the video size given at this point + // (avcodec_open seems to sometimes return a 0x0 size) +@@ -74,11 +76,7 @@ void FFmpegDecoderVideo::open(AVStream * const stream) + m_alpha_channel = (m_context->pix_fmt == AV_PIX_FMT_YUVA420P); + + // Find out the framerate +- #if LIBAVCODEC_VERSION_MAJOR >= 56 + m_frame_rate = av_q2d(stream->avg_frame_rate); +- #else +- m_frame_rate = av_q2d(stream->r_frame_rate); +- #endif + + // Find the decoder for the video stream + m_codec = avcodec_find_decoder(m_context->codec_id); +@@ -99,11 +97,12 @@ void FFmpegDecoderVideo::open(AVStream * const stream) + + // Allocate converted RGB frame + m_frame_rgba.reset(av_frame_alloc()); +- m_buffer_rgba[0].resize(avpicture_get_size(AV_PIX_FMT_RGB24, width(), height())); ++ m_buffer_rgba[0].resize(av_image_get_buffer_size(AV_PIX_FMT_RGB24, width(), height(), 1)); + m_buffer_rgba[1].resize(m_buffer_rgba[0].size()); + + // Assign appropriate parts of the buffer to image planes in m_frame_rgba +- avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[0])[0], AV_PIX_FMT_RGB24, width(), height()); ++ AVFrame *avf = m_frame_rgba.get(); ++ av_image_fill_arrays(avf->data, avf->linesize, &(m_buffer_rgba[0])[0], AV_PIX_FMT_RGB24, width(), height(), 1); + + // Override get_buffer()/release_buffer() from codec context in order to retrieve the PTS of each frame. + m_context->opaque = this; +@@ -169,7 +168,7 @@ void FFmpegDecoderVideo::decodeLoop() + int frame_finished = 0; + + // We want to use the entire packet since some codecs will require extra information for decoding +- const int bytes_decoded = avcodec_decode_video2(m_context, m_frame.get(), &frame_finished, &(packet.packet)); ++ const int bytes_decoded = avcodec_receive_frame(m_context, m_frame.get()); + + if (bytes_decoded < 0) + throw std::runtime_error("avcodec_decode_video failed()"); +@@ -180,40 +179,9 @@ void FFmpegDecoderVideo::decodeLoop() + // Publish the frame if we have decoded a complete frame + if (frame_finished) + { +-#if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(57,24,102) +- //ffmpeg-3.0 and below +- AVRational timebase; + // Find out the frame pts + if (m_frame->pts != int64_t(AV_NOPTS_VALUE)) + { +- pts = m_frame->pts; +- timebase = m_context->time_base; +- } +- else if (packet.packet.dts == int64_t(AV_NOPTS_VALUE) && +- m_frame->opaque != 0 && +- *reinterpret_cast<const int64_t*>(m_frame->opaque) != int64_t(AV_NOPTS_VALUE)) +- { +- pts = *reinterpret_cast<const int64_t*>(m_frame->opaque); +- timebase = m_stream->time_base; +- } +- else if (packet.packet.dts != int64_t(AV_NOPTS_VALUE)) +- { +- pts = packet.packet.dts; +- timebase = m_stream->time_base; +- } +- else +- { +- pts = 0; +- timebase = m_context->time_base; +- } +- +- pts *= av_q2d(timebase); +- +-#else +- //above ffmpeg-3.0 +- // Find out the frame pts +- if (m_frame->pts != int64_t(AV_NOPTS_VALUE)) +- { + pts = av_q2d(m_stream->time_base) * m_frame->pts; + } + else if (packet.packet.dts == int64_t(AV_NOPTS_VALUE) && +@@ -230,7 +198,6 @@ void FFmpegDecoderVideo::decodeLoop() + { + pts = 0; + } +-#endif + const double synched_pts = m_clocks.videoSynchClock(m_frame.get(), av_q2d(av_inv_q(m_context->framerate)), pts); + const double frame_delay = m_clocks.videoRefreshSchedule(synched_pts); + +@@ -283,7 +250,7 @@ void FFmpegDecoderVideo::findAspectRatio() + m_pixel_aspect_ratio = ratio; + } + +-int FFmpegDecoderVideo::convert(AVPicture *dst, int dst_pix_fmt, AVPicture *src, ++int FFmpegDecoderVideo::convert(AVFrame *dst, int dst_pix_fmt, AVFrame *src, + int src_pix_fmt, int src_width, int src_height) + { + osg::Timer_t startTick = osg::Timer::instance()->tick(); +@@ -334,11 +301,11 @@ void FFmpegDecoderVideo::publishFrame(const double del + return; + #endif + +- AVPicture * const src = (AVPicture *) m_frame.get(); +- AVPicture * const dst = (AVPicture *) m_frame_rgba.get(); ++ AVFrame * const src = (AVFrame *) m_frame.get(); ++ AVFrame * const dst = (AVFrame *) m_frame_rgba.get(); + + // Assign appropriate parts of the buffer to image planes in m_frame_rgba +- avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[m_writeBuffer])[0], AV_PIX_FMT_RGB24, width(), height()); ++ av_image_fill_arrays(dst->data, dst->linesize, &(m_buffer_rgba[m_writeBuffer])[0], AV_PIX_FMT_RGB24, width(), height(), 1); + + // Convert YUVA420p (i.e. YUV420p plus alpha channel) using our own routine + +@@ -370,7 +337,7 @@ void FFmpegDecoderVideo::publishFrame(const double del + + + +-void FFmpegDecoderVideo::yuva420pToRgba(AVPicture * const dst, AVPicture * const src, int width, int height) ++void FFmpegDecoderVideo::yuva420pToRgba(AVFrame * const dst, AVFrame * const src, int width, int height) + { + convert(dst, AV_PIX_FMT_RGB24, src, m_context->pix_fmt, width, height); + Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_hpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_hpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_hpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoderVideo_hpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,28 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp +--- src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp +@@ -88,9 +88,9 @@ class FFmpegDecoderVideo : public OpenThreads::Thread + void findAspectRatio(); + void publishFrame(double delay, bool audio_disabled); + double synchronizeVideo(double pts); +- void yuva420pToRgba(AVPicture *dst, AVPicture *src, int width, int height); ++ void yuva420pToRgba(AVFrame *dst, AVFrame *src, int width, int height); + +- int convert(AVPicture *dst, int dst_pix_fmt, AVPicture *src, ++ int convert(AVFrame *dst, int dst_pix_fmt, AVFrame *src, + int src_pix_fmt, int src_width, int src_height); + + +@@ -100,8 +100,9 @@ class FFmpegDecoderVideo : public OpenThreads::Thread + PacketQueue & m_packets; + FFmpegClocks & m_clocks; + AVStream * m_stream; ++ AVCodecParameters * m_codecpar; + AVCodecContext * m_context; +- AVCodec * m_codec; ++ const AVCodec * m_codec; + const uint8_t * m_packet_data; + int m_bytes_remaining; + int64_t m_packet_pts; Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_cpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_cpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_cpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,52 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegDecoder.cpp +--- src/osgPlugins/ffmpeg/FFmpegDecoder.cpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegDecoder.cpp +@@ -11,12 +11,6 @@ + #include <string.h> + #include <iostream> + +-// Changes for FFMpeg version greater than 0.6 +-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 64, 0) +-#define CODEC_TYPE_AUDIO AVMEDIA_TYPE_AUDIO +-#define CODEC_TYPE_VIDEO AVMEDIA_TYPE_VIDEO +-#endif +- + #ifdef AVERROR + #define AVERROR_IO AVERROR(EIO) + #define AVERROR_NUMEXPECTED AVERROR(EDOM) +@@ -62,7 +56,11 @@ bool FFmpegDecoder::open(const std::string & filename, + { + // Open video file + AVFormatContext * p_format_context = 0; ++#if LIBAVCODEC_VERSION_MAJOR >= 59 ++ const AVInputFormat *iformat = 0; ++#else + AVInputFormat *iformat = 0; ++#endif + + if (filename.compare(0, 5, "/dev/")==0) + { +@@ -93,7 +91,7 @@ bool FFmpegDecoder::open(const std::string & filename, + } + else + { +- iformat = parameters ? parameters->getFormat() : 0; ++ iformat = parameters ? const_cast<AVInputFormat*>(parameters->getFormat()) : 0; + AVIOContext* context = parameters ? parameters->getContext() : 0; + if (context != NULL) + { +@@ -304,9 +302,9 @@ bool FFmpegDecoder::readNextPacketNormal() + else + { + // Make the packet data available beyond av_read_frame() logical scope. +- if ((error = av_dup_packet(&packet)) < 0) { +- OSG_FATAL << "av_dup_packet() returned " << AvStrError(error) << std::endl; +- throw std::runtime_error("av_dup_packet() failed"); ++ if ((error = av_packet_make_refcounted(&packet)) < 0) { ++ OSG_FATAL << "av_packet_make_refcounted() returned " << AvStrError(error) << std::endl; ++ throw std::runtime_error("av_packet_make_refcounted() failed"); + } + + m_pending_packet = FFmpegPacket(packet); Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_hpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_hpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_hpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegDecoder_hpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,19 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegDecoder.hpp +--- src/osgPlugins/ffmpeg/FFmpegDecoder.hpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegDecoder.hpp +@@ -46,13 +46,8 @@ class FormatContextPtr + { + if (_ptr) + { +-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 17, 0) + OSG_NOTICE<<"Calling avformat_close_input("<<&_ptr<<")"<<std::endl; + avformat_close_input(&_ptr); +-#else +- OSG_NOTICE<<"Calling av_close_input_file("<<_ptr<<")"<<std::endl; +- av_close_input_file(_ptr); +-#endif + } + _ptr = 0; + } Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegHeaders_hpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegHeaders_hpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegHeaders_hpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegHeaders_hpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,34 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegHeaders.hpp +--- src/osgPlugins/ffmpeg/FFmpegHeaders.hpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegHeaders.hpp +@@ -5,7 +5,6 @@ + + extern "C" + { +-#define FF_API_OLD_SAMPLE_FMT 0 + #include <errno.h> // for error codes defined in avformat.h + #include <stdint.h> + #include <libavcodec/avcodec.h> +@@ -44,19 +43,10 @@ extern "C" + #endif + + #include <libavutil/mathematics.h> ++#include <libavutil/imgutils.h> + + #ifdef USE_SWSCALE + #include <libswscale/swscale.h> +-#endif +- +-#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(50,38,0) +-#define AV_SAMPLE_FMT_NONE SAMPLE_FMT_NONE +-#define AV_SAMPLE_FMT_U8 SAMPLE_FMT_U8 +-#define AV_SAMPLE_FMT_S16 SAMPLE_FMT_S16 +-#define AV_SAMPLE_FMT_S32 SAMPLE_FMT_S32 +-#define AV_SAMPLE_FMT_FLT SAMPLE_FMT_FLT +-#define AV_SAMPLE_FMT_DBL SAMPLE_FMT_DBL +-#define AV_SAMPLE_FMT_NB SAMPLE_FMT_NB + #endif + + } Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegPacket_hpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegPacket_hpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegPacket_hpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegPacket_hpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,14 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegPacket.hpp +--- src/osgPlugins/ffmpeg/FFmpegPacket.hpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegPacket.hpp +@@ -42,7 +42,7 @@ namespace osgFFmpeg + void clear() + { + if (packet.data != 0) +- av_free_packet(&packet); ++ av_packet_unref(&packet); + + release(); + } Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_cpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_cpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_cpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,23 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegParameters.cpp +--- src/osgPlugins/ffmpeg/FFmpegParameters.cpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegParameters.cpp +@@ -5,17 +5,9 @@ + #include <iostream> + #include <sstream> + +-#if LIBAVCODEC_VERSION_MAJOR >= 53 + extern "C" + { + #include <libavutil/parseutils.h> +-} +-#define av_parse_video_frame_size av_parse_video_size +-#define av_parse_video_frame_rate av_parse_video_rate +-#endif +- +-extern "C" +-{ + #include <libavutil/pixdesc.h> + } + Index: patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_hpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_hpp diff -N patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_hpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_FFmpegParameters_hpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,23 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/FFmpegParameters.hpp +--- src/osgPlugins/ffmpeg/FFmpegParameters.hpp.orig ++++ src/osgPlugins/ffmpeg/FFmpegParameters.hpp +@@ -20,7 +20,7 @@ class FFmpegParameters : public osg::Referenced (publi + + bool isFormatAvailable() const { return m_format!=NULL; } + +- AVInputFormat* getFormat() { return m_format; } ++ const AVInputFormat* getFormat() { return m_format; } + AVDictionary** getOptions() { return &m_options; } + void setContext(AVIOContext* context) { m_context = context; } + AVIOContext* getContext() { return m_context; } +@@ -29,7 +29,7 @@ class FFmpegParameters : public osg::Referenced (publi + + protected: + +- AVInputFormat* m_format; ++ const AVInputFormat* m_format; + AVIOContext* m_context; + AVDictionary* m_options; + }; Index: patches/patch-src_osgPlugins_ffmpeg_ReaderWriterFFmpeg_cpp =================================================================== RCS file: patches/patch-src_osgPlugins_ffmpeg_ReaderWriterFFmpeg_cpp diff -N patches/patch-src_osgPlugins_ffmpeg_ReaderWriterFFmpeg_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_osgPlugins_ffmpeg_ReaderWriterFFmpeg_cpp 3 Aug 2024 16:51:08 -0000 @@ -0,0 +1,73 @@ +Fix building with newer FFmpeg + +Index: src/osgPlugins/ffmpeg/ReaderWriterFFmpeg.cpp +--- src/osgPlugins/ffmpeg/ReaderWriterFFmpeg.cpp.orig ++++ src/osgPlugins/ffmpeg/ReaderWriterFFmpeg.cpp +@@ -19,13 +19,6 @@ + #include <osgDB/FileNameUtils> + #include <osgDB/FileUtils> + +- +-#if LIBAVCODEC_VERSION_MAJOR >= 53 || \ +- (LIBAVCODEC_VERSION_MAJOR==52 && LIBAVCODEC_VERSION_MINOR>=30) || \ +- (LIBAVCODEC_VERSION_MAJOR==52 && LIBAVCODEC_VERSION_MINOR==20 && LIBAVCODEC_VERSION_MICRO >= 1) +- #define USE_AV_LOCK_MANAGER +-#endif +- + extern "C" { + + static void log_to_osg(void* /*ptr*/, int level, const char *fmt, va_list vl) +@@ -113,13 +106,6 @@ class ReaderWriterFFmpeg : public osgDB::ReaderWriter + + av_log_set_callback(log_to_osg); + +-#ifdef USE_AV_LOCK_MANAGER +- // enable thread locking +- av_lockmgr_register(&lockMgr); +-#endif +- // Register all FFmpeg formats/codecs +- av_register_all(); +- + avformat_network_init(); + } + +@@ -218,39 +204,6 @@ class ReaderWriterFFmpeg : public osgDB::ReaderWriter + } + } + } +- +-#ifdef USE_AV_LOCK_MANAGER +- static int lockMgr(void **mutex, enum AVLockOp op) +- { +- // returns are 0 success +- OpenThreads::Mutex **m=(OpenThreads::Mutex**)mutex; +- if (op==AV_LOCK_CREATE) +- { +- *m=new OpenThreads::Mutex; +- return !*m; +- } +- else if (op==AV_LOCK_DESTROY) +- { +- delete *m; +- return 0; +- } +- else if (op==AV_LOCK_OBTAIN) +- { +- (*m)->lock(); +- return 0; +- } +- else if (op==AV_LOCK_RELEASE) +- { +- (*m)->unlock(); +- return 0; +- } +- else +- { +- return -1; +- } +- } +-#endif +- + }; + + ----- End forwarded message -----