[FFmpeg-cvslog] msvc: Properly specify dllexport for data symbols shared across dll boundaries

Martin Storsjö git at videolan.org
Sat Nov 11 16:29:35 EET 2017


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Thu Aug 24 22:07:04 2017 +0300| [abf1c058d1bd0ed1b820ea5e501a4484756f00b0] | committer: Martin Storsjö

msvc: Properly specify dllexport for data symbols shared across dll boundaries

We currently only have exported data symbols within libavcodec, but
the concept is easy to extend to other libraries if necessary.
The attribute declaration needs to be in a private header though,
since we can't use CONFIG_SHARED in public installed headers.

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=abf1c058d1bd0ed1b820ea5e501a4484756f00b0
---

 avbuild/library.mak        |  2 ++
 libavcodec/ac3tab.h        |  3 ++-
 libavcodec/dca.h           |  4 ++--
 libavcodec/internal.h      | 10 ++++++++++
 libavcodec/jpegtables.h    | 16 ++++++++--------
 libavcodec/mpeg4audio.h    |  3 ++-
 libavcodec/mpegaudiodata.h |  6 +++---
 libavutil/internal.h       |  6 ------
 8 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/avbuild/library.mak b/avbuild/library.mak
index 30757546fd..4e4b3f196d 100644
--- a/avbuild/library.mak
+++ b/avbuild/library.mak
@@ -31,6 +31,8 @@ define RULES
 $(TOOLS):     THISLIB = $(NAME:%=$(LD_LIB))
 $(TESTPROGS): THISLIB = $(SUBDIR)$(LIBNAME)
 
+$(LIBOBJS): CPPFLAGS += -DBUILDING_$(NAME)
+
 $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o
 	$$(LD) $(LDFLAGS) $(LDEXEFLAGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $(FFEXTRALIBS) $$(EXTRALIBS-$$(*F)) $$(ELIBS)
 
diff --git a/libavcodec/ac3tab.h b/libavcodec/ac3tab.h
index 83edec52d1..4c0122c39d 100644
--- a/libavcodec/ac3tab.h
+++ b/libavcodec/ac3tab.h
@@ -26,6 +26,7 @@
 
 #include "libavutil/internal.h"
 #include "ac3.h"
+#include "internal.h"
 
 #if CONFIG_HARDCODED_TABLES
 #   define HCONST const
@@ -35,7 +36,7 @@
 
 extern const uint16_t ff_ac3_frame_size_tab[38][3];
 extern const uint8_t  ff_ac3_channels_tab[8];
-extern av_export const uint16_t avpriv_ac3_channel_layout_tab[8];
+extern av_export_avcodec const uint16_t avpriv_ac3_channel_layout_tab[8];
 extern const uint8_t  ff_ac3_enc_channel_map[8][2][6];
 extern const uint8_t  ff_ac3_dec_channel_map[8][2][6];
 extern const uint16_t ff_ac3_sample_rate_tab[3];
diff --git a/libavcodec/dca.h b/libavcodec/dca.h
index 787a9c74de..b2f5cbacf4 100644
--- a/libavcodec/dca.h
+++ b/libavcodec/dca.h
@@ -28,12 +28,12 @@
 #include <stdint.h>
 
 #include "libavutil/float_dsp.h"
-#include "libavutil/internal.h"
 
 #include "avcodec.h"
 #include "dcadsp.h"
 #include "fmtconvert.h"
 #include "get_bits.h"
+#include "internal.h"
 
 #define DCA_PRIM_CHANNELS_MAX  (7)
 #define DCA_ABITS_MAX         (32)      /* Should be 28 */
@@ -288,7 +288,7 @@ typedef struct DCAContext {
     FmtConvertContext fmt_conv;
 } DCAContext;
 
-extern av_export const uint32_t avpriv_dca_sample_rates[16];
+extern av_export_avcodec const uint32_t avpriv_dca_sample_rates[16];
 
 /**
  * Convert bitstream to one representation based on sync marker
diff --git a/libavcodec/internal.h b/libavcodec/internal.h
index 403fb4a090..0efe34f667 100644
--- a/libavcodec/internal.h
+++ b/libavcodec/internal.h
@@ -285,4 +285,14 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame);
  */
 AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx);
 
+#if defined(_MSC_VER) && CONFIG_SHARED
+#ifdef BUILDING_avcodec
+#    define av_export_avcodec __declspec(dllexport)
+#else
+#    define av_export_avcodec __declspec(dllimport)
+#endif
+#else
+#    define av_export_avcodec
+#endif
+
 #endif /* AVCODEC_INTERNAL_H */
diff --git a/libavcodec/jpegtables.h b/libavcodec/jpegtables.h
index 1a909bef7a..44c2acabc4 100644
--- a/libavcodec/jpegtables.h
+++ b/libavcodec/jpegtables.h
@@ -23,18 +23,18 @@
 
 #include <stdint.h>
 
-#include "libavutil/internal.h"
+#include "internal.h"
 
-extern av_export const uint8_t avpriv_mjpeg_bits_dc_luminance[];
-extern av_export const uint8_t avpriv_mjpeg_val_dc[];
+extern av_export_avcodec const uint8_t avpriv_mjpeg_bits_dc_luminance[];
+extern av_export_avcodec const uint8_t avpriv_mjpeg_val_dc[];
 
-extern av_export const uint8_t avpriv_mjpeg_bits_dc_chrominance[];
+extern av_export_avcodec const uint8_t avpriv_mjpeg_bits_dc_chrominance[];
 
-extern av_export const uint8_t avpriv_mjpeg_bits_ac_luminance[];
-extern av_export const uint8_t avpriv_mjpeg_val_ac_luminance[];
+extern av_export_avcodec const uint8_t avpriv_mjpeg_bits_ac_luminance[];
+extern av_export_avcodec const uint8_t avpriv_mjpeg_val_ac_luminance[];
 
-extern av_export const uint8_t avpriv_mjpeg_bits_ac_chrominance[];
-extern av_export const uint8_t avpriv_mjpeg_val_ac_chrominance[];
+extern av_export_avcodec const uint8_t avpriv_mjpeg_bits_ac_chrominance[];
+extern av_export_avcodec const uint8_t avpriv_mjpeg_val_ac_chrominance[];
 
 void ff_mjpeg_build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code,
                                   const uint8_t *bits_table,
diff --git a/libavcodec/mpeg4audio.h b/libavcodec/mpeg4audio.h
index 01f30c6ca7..0a0905888a 100644
--- a/libavcodec/mpeg4audio.h
+++ b/libavcodec/mpeg4audio.h
@@ -27,6 +27,7 @@
 #include "libavutil/attributes.h"
 
 #include "get_bits.h"
+#include "internal.h"
 #include "put_bits.h"
 
 typedef struct MPEG4AudioConfig {
@@ -44,7 +45,7 @@ typedef struct MPEG4AudioConfig {
     int frame_length_short;
 } MPEG4AudioConfig;
 
-extern av_export const int avpriv_mpeg4audio_sample_rates[16];
+extern av_export_avcodec const int avpriv_mpeg4audio_sample_rates[16];
 extern const uint8_t ff_mpeg4audio_channels[8];
 
 /**
diff --git a/libavcodec/mpegaudiodata.h b/libavcodec/mpegaudiodata.h
index 2b8ff6587f..1609f48e43 100644
--- a/libavcodec/mpegaudiodata.h
+++ b/libavcodec/mpegaudiodata.h
@@ -29,13 +29,13 @@
 
 #include <stdint.h>
 
-#include "libavutil/internal.h"
+#include "internal.h"
 
 #define MODE_EXT_MS_STEREO 2
 #define MODE_EXT_I_STEREO  1
 
-extern av_export const uint16_t avpriv_mpa_bitrate_tab[2][3][15];
-extern av_export const uint16_t avpriv_mpa_freq_tab[3];
+extern av_export_avcodec const uint16_t avpriv_mpa_bitrate_tab[2][3][15];
+extern av_export_avcodec const uint16_t avpriv_mpa_freq_tab[3];
 extern const int ff_mpa_sblimit_table[5];
 extern const int ff_mpa_quant_steps[17];
 extern const int ff_mpa_quant_bits[17];
diff --git a/libavutil/internal.h b/libavutil/internal.h
index 8a0076f985..7071d2a587 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -57,12 +57,6 @@
 #endif
 #endif
 
-#if defined(_MSC_VER) && CONFIG_SHARED
-#    define av_export __declspec(dllimport)
-#else
-#    define av_export
-#endif
-
 #if HAVE_PRAGMA_DEPRECATED
 #    if defined(__ICL)
 #        define FF_DISABLE_DEPRECATION_WARNINGS __pragma(warning(push)) __pragma(warning(disable:1478))



More information about the ffmpeg-cvslog mailing list