gst-libav build fails with ffmpeg 7
Build of gst-libav fails with FFMPEG 7.0. Part of build log:
[ 8% 2/25] cc -Iext/libav/libgstlibav.so.p -Iext/libav -I../ext/libav -I. -I.. -I/usr/local/include -I/usr/local/include/gstreamer-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include/orc-0.4 -fdiagnostics-color=never -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -fvisibility=hidden -fno-strict-aliasing -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wredundant-decls -Wundef -Wwrite-strings -Wformat -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar -Waggregate-return -Wvla -Wpointer-arith -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -fPIC -pthread -DHAVE_CONFIG_H -MD -MQ ext/libav/libgstlibav.so.p/gstavprotocol.c.o -MF ext/libav/libgstlibav.so.p/gstavprotocol.c.o.d -o ext/libav/libgstlibav.so.p/gstavprotocol.c.o -c ../ext/libav/gstavprotocol.c
FAILED: ext/libav/libgstlibav.so.p/gstavprotocol.c.o
cc -Iext/libav/libgstlibav.so.p -Iext/libav -I../ext/libav -I. -I.. -I/usr/local/include -I/usr/local/include/gstreamer-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include/orc-0.4 -fdiagnostics-color=never -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -fvisibility=hidden -fno-strict-aliasing -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wredundant-decls -Wundef -Wwrite-strings -Wformat -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar -Waggregate-return -Wvla -Wpointer-arith -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -fPIC -pthread -DHAVE_CONFIG_H -MD -MQ ext/libav/libgstlibav.so.p/gstavprotocol.c.o -MF ext/libav/libgstlibav.so.p/gstavprotocol.c.o.d -o ext/libav/libgstlibav.so.p/gstavprotocol.c.o -c ../ext/libav/gstavprotocol.c
../ext/libav/gstavprotocol.c:272:28: error: incompatible function pointer types passing 'int (void *, uint8_t *, int)' (aka 'int (void *, unsigned char *, int)') to parameter of type 'int (*)(void *, const uint8_t *, int)' (aka 'int (*)(void *, const unsigned char *, int)') [-Wincompatible-function-pointer-types]
gst_ffmpegdata_read, gst_ffmpegdata_write, gst_ffmpegdata_seek);
^~~~~~~~~~~~~~~~~~~~
/usr/local/include/libavformat/avio.h:404:25: note: passing argument to parameter 'write_packet' here
int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
^
1 error generated.
ninja: build stopped: subcommand failed.
*** Error code 1
In libavformat/avio.h was changed from:
AVIOContext *avio_alloc_context(
unsigned char *buffer,
int buffer_size,
int write_flag,
void *opaque,
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
#if FF_API_AVIO_WRITE_NONCONST
int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
#else
int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
#endif
int64_t (*seek)(void *opaque, int64_t offset, int whence));
in ffmpeg 6 to:
AVIOContext *avio_alloc_context(
unsigned char *buffer,
int buffer_size,
int write_flag,
void *opaque,
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
int64_t (*seek)(void *opaque, int64_t offset, int whence));
in ffmpeg7.
Patch:
--- ext/libav/gstavprotocol.c.orig
+++ ext/libav/gstavprotocol.c
@@ -102,7 +102,11 @@ gst_ffmpegdata_read (void *priv_data, unsigned char *b
}
static int
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(59, 8, 100)
+gst_ffmpegdata_write (void *priv_data, const uint8_t * buf, int size)
+#else
gst_ffmpegdata_write (void *priv_data, uint8_t * buf, int size)
+#endif
{
GstProtocolInfo *info;
GstBuffer *outbuf;
Downstream bugreport: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278705
Edited by VVD