From patchwork Fri Aug 25 07:46:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1/5] msvc: Properly specify dllexport for data symbols shared across dll boundaries X-Patchwork-Submitter: =?utf-8?q?Martin_Storsj=C3=B6?= X-Patchwork-Id: 63784 Message-Id: <1503647204-20460-1-git-send-email-martin@martin.st> To: libav-devel@libav.org Date: Fri, 25 Aug 2017 10:46:40 +0300 From: =?utf-8?q?Martin_Storsj=C3=B6?= List-Id: libav development 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. --- Moved the attribute to libavcodec/internal.h, removed the old av_export that isn't used any longer, added an empty definition of av_export_avcodec for the cases where this isn't used at all. --- 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 3075754..4e4b3f1 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 83edec5..4c0122c 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 787a9c7..b2f5cba 100644 --- a/libavcodec/dca.h +++ b/libavcodec/dca.h @@ -28,12 +28,12 @@ #include #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 403fb4a..0efe34f 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 1a909be..44c2aca 100644 --- a/libavcodec/jpegtables.h +++ b/libavcodec/jpegtables.h @@ -23,18 +23,18 @@ #include -#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 01f30c6..0a09058 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 2b8ff65..1609f48 100644 --- a/libavcodec/mpegaudiodata.h +++ b/libavcodec/mpegaudiodata.h @@ -29,13 +29,13 @@ #include -#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 8a0076f..7071d2a 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))