When symbol versioning is enabled, moving symbols from one library to another breaks binary compatibility. This adds wrappers with the old version tag for the av_*packet functions recently moved to lavc. backport r23611 by mru Originally committed as revision 23613 to svn://svn.ffmpeg.org/ffmpeg/branches/0.6tags/v0.6
| @@ -1086,6 +1086,9 @@ HAVE_LIST=" | |||||
| struct_sockaddr_in6 | struct_sockaddr_in6 | ||||
| struct_sockaddr_sa_len | struct_sockaddr_sa_len | ||||
| struct_sockaddr_storage | struct_sockaddr_storage | ||||
| symver | |||||
| symver_gnu_asm | |||||
| symver_asm_label | |||||
| sys_mman_h | sys_mman_h | ||||
| sys_resource_h | sys_resource_h | ||||
| sys_select_h | sys_select_h | ||||
| @@ -1200,6 +1203,8 @@ fast_unaligned_if_any="armv6 ppc x86" | |||||
| need_memalign="altivec neon sse" | need_memalign="altivec neon sse" | ||||
| inline_asm_deps="!tms470" | inline_asm_deps="!tms470" | ||||
| symver_if_any="symver_asm_label symver_gnu_asm" | |||||
| # subsystems | # subsystems | ||||
| mdct_select="fft" | mdct_select="fft" | ||||
| rdft_select="fft" | rdft_select="fft" | ||||
| @@ -2732,8 +2737,17 @@ check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUI | |||||
| check_ldflags -Wl,-Bsymbolic | check_ldflags -Wl,-Bsymbolic | ||||
| echo "X{};" > $TMPV | 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' | 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 | if enabled small; then | ||||
| add_cflags $size_cflags | add_cflags $size_cflags | ||||
| @@ -282,8 +282,38 @@ AVInputFormat *av_find_input_format(const char *short_name) | |||||
| return NULL; | 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) | int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size) | ||||
| { | { | ||||
| @@ -204,4 +204,15 @@ | |||||
| # define NULL_IF_CONFIG_SMALL(x) x | # define NULL_IF_CONFIG_SMALL(x) x | ||||
| #endif | #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 */ | #endif /* AVUTIL_INTERNAL_H */ | ||||