aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2010-06-15 13:31:27 +0000
committerReinhard Tartler <siretart@tauware.de>2010-06-15 13:31:27 +0000
commit522f1861ca4dedc021fa515c79bc5bdc9685c250 (patch)
treee70ddf0c02a107e93a51a8df7e95587ef1bae1ae
parent44f91788a5e39478509fc279445ff38fab770bc4 (diff)
downloadffmpeg-522f1861ca4dedc021fa515c79bc5bdc9685c250.tar.gz
Add compatibility wrappers for functions moved from lavf to lavc
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.6
-rwxr-xr-xconfigure16
-rw-r--r--libavformat/utils.c32
-rw-r--r--libavutil/internal.h11
3 files changed, 57 insertions, 2 deletions
diff --git a/configure b/configure
index 783e59d62d..ac09f808bd 100755
--- a/configure
+++ b/configure
@@ -1086,6 +1086,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
@@ -1200,6 +1203,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"
@@ -2732,8 +2737,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 e975f5de24..6224a35d4d 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -282,8 +282,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 70cf2ffef9..e5dd8b9549 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -204,4 +204,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 */