diff --git a/configure b/configure index 2083217b9b7c0f81fb3d6d29ba001299c7e153ee..7016e5bc02ea63c8f85f274bf3de540045b9a430 100755 --- a/configure +++ b/configure @@ -1084,6 +1084,9 @@ HAVE_LIST=" struct_sockaddr_in6 struct_sockaddr_sa_len struct_sockaddr_storage + symver + symver_gnu_asm + symver_asm_label sys_mman_h sys_resource_h sys_select_h @@ -1198,6 +1201,8 @@ fast_unaligned_if_any="armv6 ppc x86" need_memalign="altivec neon sse" inline_asm_deps="!tms470" +symver_if_any="symver_asm_label symver_gnu_asm" + # subsystems mdct_select="fft" rdft_select="fft" @@ -2714,8 +2719,17 @@ check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUI check_ldflags -Wl,-Bsymbolic echo "X{};" > $TMPV -test_ldflags -Wl,--version-script,$TMPV && +if test_ldflags -Wl,--version-script,$TMPV; then append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver' + check_cc <<EOF && enable symver_asm_label +void ff_foo(void) __asm__ ("av_foo@VERSION"); +void ff_foo(void) {} +EOF + check_cc <<EOF && enable symver_gnu_asm +__asm__(".symver ff_foo,av_foo@VERSION"); +void ff_foo(void) {} +EOF +fi if enabled small; then add_cflags $size_cflags diff --git a/libavformat/utils.c b/libavformat/utils.c index 6365f3e33e46f196b467e7dcd93132e97d8fe3fd..9faa566a8c96a19169dca46b5263397de00dcdc6 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -283,8 +283,38 @@ AVInputFormat *av_find_input_format(const char *short_name) return NULL; } -/* memory handling */ +#if LIBAVFORMAT_VERSION_MAJOR < 53 && CONFIG_SHARED && HAVE_SYMVER +FF_SYMVER(void, av_destruct_packet_nofree, (AVPacket *pkt), "LIBAVFORMAT_52") +{ + av_destruct_packet_nofree(pkt); +} + +FF_SYMVER(void, av_destruct_packet, (AVPacket *pkt), "LIBAVFORMAT_52") +{ + av_destruct_packet(pkt); +} + +FF_SYMVER(int, av_new_packet, (AVPacket *pkt, int size), "LIBAVFORMAT_52") +{ + return av_new_packet(pkt, size); +} + +FF_SYMVER(int, av_dup_packet, (AVPacket *pkt), "LIBAVFORMAT_52") +{ + return av_dup_packet(pkt); +} + +FF_SYMVER(void, av_free_packet, (AVPacket *pkt), "LIBAVFORMAT_52") +{ + av_free_packet(pkt); +} +FF_SYMVER(void, av_init_packet, (AVPacket *pkt), "LIBAVFORMAT_52") +{ + av_log(NULL, AV_LOG_WARNING, "Diverting av_*_packet function calls to libavcodec. Recompile to improve performance\n"); + av_init_packet(pkt); +} +#endif int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size) { diff --git a/libavutil/internal.h b/libavutil/internal.h index 2faafc9af19db2c114d2bb2b79e3bc9be85af669..2d744dfd4bb583df01eaae15d6107f718d82a37a 100644 --- a/libavutil/internal.h +++ b/libavutil/internal.h @@ -196,4 +196,15 @@ # define NULL_IF_CONFIG_SMALL(x) x #endif +#if HAVE_SYMVER_ASM_LABEL +# define FF_SYMVER(type, name, args, ver) \ + type ff_##name args __asm__ (#name "@" ver); \ + type ff_##name args +#elif HAVE_SYMVER_GNU_ASM +# define FF_SYMVER(type, name, args, ver) \ + __asm__ (".symver ff_" #name "," #name "@" ver); \ + type ff_##name args; \ + type ff_##name args +#endif + #endif /* AVUTIL_INTERNAL_H */