Android中的OpenMax适配层的接口在frameworks/base/include/media/目录中的IOMX.h文件定义,其内容如下所示:

        
  1. classIOMX:publicIInterface{
  2. public:
  3. DECLARE_META_INTERFACE(OMX);
  4. typedefvoid*buffer_id;
  5. typedefvoid*node_id;
  6. virtualboollivesLocally(pid_tpid)=0;
  7. structComponentInfo{//组件的信息
  8. String8mName;
  9. List < String8 > mRoles;
  10. };
  11. virtualstatus_tlistNodes(List < ComponentInfo >
    *list)=0;//节点列表
  12. virtualstatus_tallocateNode(
  13. constchar*name,constsp < IOMXObserver >
    &observer,//分配节点
  14. node_id*node)=0;
  15. virtualstatus_tfreeNode(node_idnode)=0;
    //找到节点
  16. virtualstatus_tsendCommand(
    //发送命令
  17. node_idnode,OMX_COMMANDTYPEcmd,
    OMX_S32param)=0;
  18. virtualstatus_tgetParameter(
    //获得参数
  19. node_idnode,OMX_INDEXTYPEindex,
  20. void*params,size_tsize)=0;
  21. virtualstatus_tsetParameter(
    //设置参数
  22. node_idnode,OMX_INDEXTYPEindex,
  23. constvoid*params,size_tsize)=0;
  24. virtualstatus_tgetConfig(
    //获得配置
  25. node_idnode,OMX_INDEXTYPEindex,
  26. void*params,size_tsize)=0;
  27. virtualstatus_tsetConfig(
    //设置配置
  28. node_idnode,OMX_INDEXTYPEindex,
  29. constvoid*params,size_tsize)=0;
  30. virtualstatus_tuseBuffer(
    //使用缓冲区
  31. node_idnode,OMX_U32port_index,const
    sp
    < IMemory > &params,
  32. buffer_id*buffer)=0;
  33. virtualstatus_tallocateBuffer(
    //分配缓冲区
  34. node_idnode,OMX_U32port_index,size_tsize,
  35. buffer_id*buffer,void**buffer_data)=0;
  36. virtualstatus_tallocateBufferWithBackup(
    //分配带后备缓冲区
  37. node_idnode,OMX_U32port_index,const
    sp
    < IMemory > &params,
  38. buffer_id*buffer)=0;
  39. virtualstatus_tfreeBuffer(
    //释放缓冲区
  40. node_idnode,OMX_U32port_index,
    buffer_idbuffer)=0;
  41. virtualstatus_tfillBuffer(node_idnode,
    buffer_idbuffer)=0;//填充缓冲区
  42. virtualstatus_temptyBuffer(
    //消耗缓冲区
  43. node_idnode,
  44. buffer_idbuffer,
  45. OMX_U32range_offset,OMX_U32range_length,
  46. OMX_U32flags,OMX_TICKStimestamp)=0;
  47. virtualstatus_tgetExtensionIndex(
  48. node_idnode,
  49. constchar*parameter_name,
  50. OMX_INDEXTYPE*index)=0;
  51. virtualsp < IOMXRenderer > createRenderer(
    //创建渲染器(从ISurface)
  52. constsp < ISurface > &surface,
  53. constchar*componentName,
  54. OMX_COLOR_FORMATTYPEcolorFormat,
  55. size_tencodedWidth,size_tencodedHeight,
  56. size_tdisplayWidth,size_tdisplayHeight)=0;
  57. sp < IOMXRenderer > createRenderer(
    //创建渲染器(从Surface)
  58. constsp < Surface > &surface,
  59. constchar*componentName,
  60. OMX_COLOR_FORMATTYPEcolorFormat,
  61. size_tencodedWidth,size_tencodedHeight,
  62. size_tdisplayWidth,size_tdisplayHeight);
  63. sp < IOMXRenderer > createRendererFromJavaSurface(
    //从Java层创建渲染器
  64. JNIEnv*env,jobjectjavaSurface,
  65. constchar*componentName,
  66. OMX_COLOR_FORMATTYPEcolorFormat,
  67. size_tencodedWidth,size_tencodedHeight,
  68. size_tdisplayWidth,size_tdisplayHeight);
  69. };

IOMX表示的是OpenMax的一个组件,根据Android的Binder IPC机制,BnOMX继承IOMX,实现者需要继承实现BnOMX。IOMX类中,除了和标准的OpenMax的 GetParameter,SetParameter,GetConfig,SetConfig,SendCommand,UseBuffer,AllocateBuffer,FreeBuffer,FillThisBuffer 和EmptyThisBuffer等接口之外,还包含了创造渲染器的接口createRenderer(),创建的接口为IOMXRenderer类型。

IOMX中只有第一个createRenderer()函数是纯虚函数,第二个的createRenderer()函数和createRendererFromJavaSurface()通过调用第一个createRenderer()函数实现。

IOMXRenderer类表示一个OpenMax的渲染器,其定义如下所示:

        
  1. classIOMXRenderer:publicIInterface{
  2. public:
  3. DECLARE_META_INTERFACE(OMXRenderer);
  4. virtualvoidrender(IOMX::buffer_id
    buffer)=0;//渲染输出函数
  5. };

IOMXRenderer只包含了一个render接口,其参数类型IOMX::buffer_id实际上是void*,根据不同渲染器使用不同的类型。

在IOMX.h文件中,另有表示观察器类的IOMXObserver,这个类表示OpenMax的观察者,其中只包含一个onMessage()函 数,其参数为omx_message接口体,其中包含Event事件类型、FillThisBuffer完成和EmptyThisBuffer完成几种类 型。

提示:Android中OpenMax的适配层是OpenMAX IL层至上的封装层,在Android系统中被StageFright调用,也可以被其他部分调用。

http://book.51cto.com/art/201101/243162.htm

更多相关文章

  1. 箭头函数的基础使用
  2. Python技巧匿名函数、回调函数和高阶函数
  3. Android获取屏幕大小
  4. android 包管理系统分析
  5. Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
  6. Android(安卓)初识Retrofit
  7. Android(安卓)启动过程(2)
  8. [Innost]Android深入浅出之Binder机制
  9. Native Activity讲解

随机推荐

  1. Android中layout_gravity与gravity及layo
  2. 在移动互联时代下,介绍几个Android(安卓)
  3. android中Webview与javascript的交互(互相
  4. Android(安卓)开发技术周报 Issue#292
  5. Android、IOS开发思路及项目文件结构
  6. 主题:三,android编码规范 & 常用布局 & 常
  7. Android(安卓)轻松实现语音识别
  8. android ndk初体验和Android.mk文件报: no
  9. Android将使用ext4文件系统的特性
  10. 利用BLCR加快Android的启动过程