[FFmpeg-devel] [PATCH] pixdesc: Add av_get_pix_fmt_descriptor()

Måns Rullgård mans
Mon Aug 30 19:19:14 CEST 2010


Tomas H?rdin <tomas.hardin at codemill.se> writes:

> On Fri, 2010-07-09 at 16:45 +0200, Michael Niedermayer wrote:
>> On Thu, Jul 08, 2010 at 02:48:29PM +0200, Tomas H?rdin wrote:
>> > Hi
>> > 
>> > While poking around with MinGW compiled lav* DLLs in MSVC I noticed
>> > link.exe can't resolve references to av_pix_fmt_descriptors. This is due
>> > to how import libraries work, but I'm not an expert. The important thing
>> > is that only functions get exported properly - globals don't.
>> 
>> see:
>> __declspec(dllexport)
>> __attribute__ ((dllexport))
>> --export-all
>> msdn
>> gcc docs
>
> I finally got around to poking at this again. Adding
> __declspec(dllimport) is enough for the variable to be imported
> properly. It's already exported. The attached patch defines a macro
> called AV_DLLIMPORT, listed below:
>
> #ifdef WIN32
> #define AV_DLLIMPORT __declspec(dllimport)
> #else
> #define AV_DLLIMPORT
> #endif
>
> I'm not sure this is the prettiest solution, but it works well enough on
> my Ubuntu machine, in MSYS and in MSVC.
>
> I also realized that there are more variables that won't be imported
> properly in MSVC without such a macro. A quick search among the
> installed headers indicate that at least the following variables are
> part of the public API:
>
> ff_log2_tab
> av_reverse
> av_pix_fmt_descriptors
> av_md5_size
> av_sha1_size
>
> The attached patch adds AV_DLLIMPORT to those variables, and passes
> regtests.
>
> /Tomas
>
>
> diff --git a/libavutil/common.h b/libavutil/common.h
> index d054f87..d9d99b1 100644
> --- a/libavutil/common.h
> +++ b/libavutil/common.h
> @@ -59,10 +59,16 @@
>  #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
>  #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1))
>  
> +#ifdef WIN32
> +#define AV_DLLIMPORT __declspec(dllimport)
> +#else
> +#define AV_DLLIMPORT
> +#endif
> +
>  /* misc math functions */
> -extern const uint8_t ff_log2_tab[256];
> +extern AV_DLLIMPORT const uint8_t ff_log2_tab[256];
>  
> -extern const uint8_t av_reverse[256];
> +extern AV_DLLIMPORT const uint8_t av_reverse[256];
>  
>  static inline av_const int av_log2_c(unsigned int v)
>  {

Not going to happen.  I have yet to see an actual bug report relating
to this.  I'll that's been presented is hypothetical problems that
nobody appears to actually be suffering from.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list