现在的位置: 首页 > 综合 > 正文

bellagio_omx到opencore的移植

2013年08月19日 ⁄ 综合 ⁄ 共 1583字 ⁄ 字号 评论关闭

opencore的pvomx与bellagio_omx同样遵循openmax IL层标准,不过PV中是用c++写的,而bellagio使用c实现的,组件的API都是omx IL标准,但是组件的加载方式是不一样的,opencore中是根据配置直接调用针对各种格式的注册函数,不需要依次打开针对各个格式的so库,而在bellagio中却是要依次打开每个so库调用一个接口函数来完成注册。

1 注册方式的更改

@@在bellagio中编译后会生成一个可执行程序(omxregister-bellagio),要单独执行这个可执行程序,会在root目录下生成一个文件.omxregister,文件中包含了已安装的所有组件以及对应的so库:

/usr/local/lib/bellagio/libomxaudio_effects.so
==> OMX.st.volume.component ==> OMX.st.volume.component: ==> 2 1,65536 1,32768
==> OMX.st.audio.mixer ==> OMX.st.audio.mixer: ==> 1 50,60000
/usr/local/lib/bellagio/libomxvideosched.so
==> OMX.st.video.scheduler ==> OMX.st.video.scheduler: ==> 2 1,456192 1,304128
/usr/local/lib/bellagio/libomxclocksrc.so
==> OMX.st.clocksrc ==> OMX.st.clocksrc:

然后再去读取这个文件,一行行获取库的名字,打开库,查询库的入口函数omx_component_library_Setup,完成组件的注册。

@@而在opencore中却是在函数OMX_Init中会根据配置调用相应的注册函数完成注册,不会去打开组件对应的库;

@@注册流程比较如下图:

image    image

@@函数BOSA_ST_InitComponentLoader(BOSA_COMPONENTLOADER *loader)

将原先读取文件.omxregistry这部分去掉,而是直接依次对libname赋值,

for(i = 0;i {
          if(i == 0)
              {
                   *libname = "/路径/libomxvideosched.so";
              }
         else if(i == 1)
             {
                  *libname = "/路径/libomxclocksrc.so";
             }
            else if(i == 2)
                {
                     *libname = "/路径/libomxaudio_effects.so";
                }
         else if(i == 3)
             {
                  *libname = "/路径/libomxmad.so";
             }

…………………

}

2 so库的封装

opencore中有个mastercore,用于管理对个core的存在,因为openmax中是通过core来管理组件的;android中是将其编译为so库,而且要为每个库添加一个封装,并将mastercore的API与core中的对应,具体代码在omx_sharedlibrary中,

3 参照opencore中的格局,将bellagio分为以下部分:

bellagio_base,bellagio_common,bellagio_sharedlibrary,组件,参照写android.mk

抱歉!评论已关闭.