Hi,
I am from Marvell Semiconductor.
I meet a problem about
registerExtensions()@frameworks/av/media/mediaserver/register.cpp, hope
that I can get some advice here J
In frameworks/av/media/mediaserver/Android.mk
+ifneq ($(BOARD_USE_CUSTOM_MEDIASERVEREXTENSIONS),true)
+include $(CLEAR_VARS)
+LOCAL_SRC_FILES := register.cpp
+LOCAL_MODULE := libregistermsext
+LOCAL_MODULE_TAGS := optional
+include $(BUILD_STATIC_LIBRARY)
+endif
So if we define BOARD_USE_CUSTOM_MEDIASERVEREXTENSIONS := true, we can
implement registerExtensions()@frameworks/av/media/mediaserver/register.cpp
and load some extensions.
Now I have a player called MRVLMediaPlayer(Similar with StageFright
player), so I plan to register it into MediaPlayerFactory.
I implement MRVLMediaPlayer as shared library - libmrvl_media_player.so,
and it links other shared libraries like libOmxCore.so, ……
But here comes the problem: libregistermsext.a is a static library, it
can’t load libmrvl_media_player.so without change
frameworks/av/media/mediaserver/Android.mk
If mediaserver links libdl.so, we can easily load libmrvl_media_player.so
without change frameworks/av/media/mediaserver/Android.mk in this way:
// Add custom players.
void registerExtensions() {
android::registerCustomPlayers();
}
à
static bool registerCustomPlayers() {
dlopen(“player_mmp.so”, RTLD_NOW);
createFactoryFunc createFactory = (createFactoryFunc) dlsym(handle,
"createFactory");
MediaPlayerFactory::IFactory* factory =
createFactory((player_type)kLoadablePlayerStart);
MediaPlayerFactory::registerFactory(factory,
(player_type)kLoadablePlayerStart);
}
And comes the implementation of player_mmp.so:
MmpPlayer.cpp:
extern MediaPlayerBase* createMRVLMediaPlayer();
class MmpPlayerFactory : public MediaPlayerFactory::IFactory {
virtual sp<MediaPlayerBase> createPlayer() {
ALOGD("create MRVLMediaPlayer");
return createMRVLMediaPlayer();
}
}
extern "C" MediaPlayerFactory::IFactory* createFactory(android::player_type
playerType) {
return new MmpPlayerFactory(playerType);
}
Android.mk:
LOCAL_SRC_FILES := MmpPlayer.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libmrvl_media_player
LOCAL_MODULE := player_mmp
include $(BUILD_SHARED_LIBRARY)
If frameworks/av/media/mediaserver/Android.mk mediaserver already linked
libdl.so, the above can be easily done
@@ -25,7 +27,8 @@ LOCAL_SHARED_LIBRARIES := \
libmediaplayerservice \
libutils \
liblog \
- libbinder
+ libbinder \
+ libdl
LOCAL_STATIC_LIBRARIES := \
Libregistermsext
Is it possible that Google add libdl.so into mediaserver
LOCAL_SHARED_LIBRARIES so that vendors can add their players without modify
Android code?
Or do you have any ideas for add customer players which are implemented as
shared libraries?
Thanks
--
--
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting
---
You received this message because you are subscribed to the Google Groups
"android-porting" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.