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@martin.st>
This commit is contained in:
Martin Storsjö 2017-08-24 22:07:04 +03:00
parent e41daa6246
commit abf1c058d1
8 changed files with 29 additions and 21 deletions

View File

@ -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)

View File

@ -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];

View File

@ -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

View File

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

View File

@ -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,

View File

@ -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];
/**

View File

@ -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];

View File

@ -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))