On Tue, 29 Oct 2024 12:31:48 +0000, Stuart Henderson wrote: > REVISION needs re-bumping, but otherwise this still applies. > > +cc maintainer >
Fine with me. > ----- 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 -----