[FFmpeg-devel] [PATCH] pixdesc: Add av_get_pix_fmt_descriptor()
Måns Rullgård
mans
Wed Sep 8 16:03:33 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.
>
>
> 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
Are you sure that shouldn't be _WIN32?
> +#define AV_DLLIMPORT __declspec(dllimport)
> +#else
> +#define AV_DLLIMPORT
> +#endif
I don't like the name AV_DLLIMPORT; it is too Windows-specific. I'd
rather call it AV_EXTERN_DATA and include "extern" in its definition
(and remove extern from the declarations which would use it). This
way the name carries more meaning to someone unfamiliar with Windows,
and it wouldn't feel misnamed if it were ever to be needed on another
system.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list