Browse code

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.

Originally committed as revision 23611 to svn://svn.ffmpeg.org/ffmpeg/trunk

Måns Rullgård authored on 2010/06/15 22:26:52
Showing 3 changed files
... ...
@@ -1084,6 +1084,9 @@ HAVE_LIST="
1084 1084
     struct_sockaddr_in6
1085 1085
     struct_sockaddr_sa_len
1086 1086
     struct_sockaddr_storage
1087
+    symver
1088
+    symver_gnu_asm
1089
+    symver_asm_label
1087 1090
     sys_mman_h
1088 1091
     sys_resource_h
1089 1092
     sys_select_h
... ...
@@ -1198,6 +1201,8 @@ fast_unaligned_if_any="armv6 ppc x86"
1198 1198
 need_memalign="altivec neon sse"
1199 1199
 inline_asm_deps="!tms470"
1200 1200
 
1201
+symver_if_any="symver_asm_label symver_gnu_asm"
1202
+
1201 1203
 # subsystems
1202 1204
 mdct_select="fft"
1203 1205
 rdft_select="fft"
... ...
@@ -2714,8 +2719,17 @@ check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUI
2714 2714
 check_ldflags -Wl,-Bsymbolic
2715 2715
 
2716 2716
 echo "X{};" > $TMPV
2717
-test_ldflags -Wl,--version-script,$TMPV &&
2717
+if test_ldflags -Wl,--version-script,$TMPV; then
2718 2718
     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2719
+    check_cc <<EOF && enable symver_asm_label
2720
+void ff_foo(void) __asm__ ("av_foo@VERSION");
2721
+void ff_foo(void) {}
2722
+EOF
2723
+    check_cc <<EOF && enable symver_gnu_asm
2724
+__asm__(".symver ff_foo,av_foo@VERSION");
2725
+void ff_foo(void) {}
2726
+EOF
2727
+fi
2719 2728
 
2720 2729
 if enabled small; then
2721 2730
     add_cflags $size_cflags
... ...
@@ -283,8 +283,38 @@ AVInputFormat *av_find_input_format(const char *short_name)
283 283
     return NULL;
284 284
 }
285 285
 
286
-/* memory handling */
286
+#if LIBAVFORMAT_VERSION_MAJOR < 53 && CONFIG_SHARED && HAVE_SYMVER
287
+FF_SYMVER(void, av_destruct_packet_nofree, (AVPacket *pkt), "LIBAVFORMAT_52")
288
+{
289
+    av_destruct_packet_nofree(pkt);
290
+}
291
+
292
+FF_SYMVER(void, av_destruct_packet, (AVPacket *pkt), "LIBAVFORMAT_52")
293
+{
294
+    av_destruct_packet(pkt);
295
+}
296
+
297
+FF_SYMVER(int, av_new_packet, (AVPacket *pkt, int size), "LIBAVFORMAT_52")
298
+{
299
+    return av_new_packet(pkt, size);
300
+}
301
+
302
+FF_SYMVER(int, av_dup_packet, (AVPacket *pkt), "LIBAVFORMAT_52")
303
+{
304
+    return av_dup_packet(pkt);
305
+}
306
+
307
+FF_SYMVER(void, av_free_packet, (AVPacket *pkt), "LIBAVFORMAT_52")
308
+{
309
+    av_free_packet(pkt);
310
+}
287 311
 
312
+FF_SYMVER(void, av_init_packet, (AVPacket *pkt), "LIBAVFORMAT_52")
313
+{
314
+    av_log(NULL, AV_LOG_WARNING, "Diverting av_*_packet function calls to libavcodec. Recompile to improve performance\n");
315
+    av_init_packet(pkt);
316
+}
317
+#endif
288 318
 
289 319
 int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size)
290 320
 {
... ...
@@ -196,4 +196,15 @@
196 196
 #   define NULL_IF_CONFIG_SMALL(x) x
197 197
 #endif
198 198
 
199
+#if HAVE_SYMVER_ASM_LABEL
200
+#   define FF_SYMVER(type, name, args, ver)             \
201
+    type ff_##name args __asm__ (#name "@" ver);        \
202
+    type ff_##name args
203
+#elif HAVE_SYMVER_GNU_ASM
204
+#   define FF_SYMVER(type, name, args, ver)             \
205
+    __asm__ (".symver ff_" #name "," #name "@" ver);    \
206
+    type ff_##name args;                                \
207
+    type ff_##name args
208
+#endif
209
+
199 210
 #endif /* AVUTIL_INTERNAL_H */