[vlc-devel] [PATCH] omxil: Add a prefix to the iomx function symbols

Martin Storsjö martin at martin.st
Tue Jan 24 08:48:01 CET 2012


On Tue, 24 Jan 2012, Rafaël Carré wrote:

> Le 2012-01-24 02:27, Martin Storsjö a écrit :
>> On some devices (apparently froyo and earlier), some OMX core
>> (with sw-only codecs) already is loaded into the process, and
>> dlsym(RTLD_DEFAULT) can just as well return functions from that
>> one instead of the ones from the iomx wrapper that we've loaded.
>>
>> This makes sure we really get the functions we want.
>> ---
>>  modules/codec/omxil/iomx.cpp |   16 ++++++++++------
>>  modules/codec/omxil/omxil.c  |    2 +-
>>  2 files changed, 11 insertions(+), 7 deletions(-)
>>
>> diff --git a/modules/codec/omxil/iomx.cpp b/modules/codec/omxil/iomx.cpp
>> index ccc4abb..1316c0b 100644
>> --- a/modules/codec/omxil/iomx.cpp
>> +++ b/modules/codec/omxil/iomx.cpp
>> @@ -29,6 +29,8 @@
>>  #include <binder/MemoryDealer.h>
>>  #include <OMX_Component.h>
>>
>> +#define PREFIX(x) I ## x
>
> shouldn't we use "vlc" ?

We could use whatever, I felt that function names like "IOMX_Init" and so 
on would be neat, but "vlcOMX_Init" would work just as well.

The original idea was that when we build the iomx wrapper separately, it 
actually becomes a fully functional drop-in-replacement for any other OMX 
core, so any other app that does dlopen + dlsym for loading an OMX core 
could use this implementation, too.

I kept this as a separate macro, to ease modification if someone wants to 
build it with normal OMX entry point names instead.

The reason for not using normal dlopen (but preloading it from the java 
side instead) is twofold: dlopen doesn't look in the app lib directory by 
default (so we'd have to add extra code there to find out what the 
directory is) and that we don't (easily) know which version (gingerbread 
or ics) to load, both of which are taken care of automatically on the java 
side.

>> +
>>  using namespace android;
>>
>>  class IOMXContext {
>> @@ -270,7 +272,8 @@ static OMX_ERRORTYPE iomx_set_config(OMX_HANDLETYPE component, OMX_INDEXTYPE ind
>>      return get_error(ctx->iomx->setConfig(node->node, index, param, sizeof(OMX_BOOL)));
>>  }
>>
>> -OMX_ERRORTYPE OMX_GetHandle(OMX_HANDLETYPE *handle_ptr, OMX_STRING component_name, OMX_PTR app_data, OMX_CALLBACKTYPE *callbacks)
>> +extern "C" {
>
> not related? is that needed though?

It's related and needed - this wrapper is built as C++, and we need to 
declare these functions to have C linkage. It wasn't needed when they were 
named with the official entry point names, since the omx headers declare 
those functions with C linkage already.

// Martin


More information about the vlc-devel mailing list