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
... | ... |
@@ -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 */ |