Android 13 - Media框架(14)- OpenMax(五)

这一节最后来了解 OMX_Video.h 以及 OMX_Audio.h 中的内容

1、OMX_Video.h

这里只了解该文件中的 OMX_VIDEO_CODINGTYPEOMX_VIDEO_PORTDEFINITIONTYPE

1.1、OMX_VIDEO_CODINGTYPE

用于表示视频数据的压缩格式,它和上层的mime type是一一对应的,ACodec 中将会把 mime type 转化为 codingType(compression type),从而确定OMX组件执行哪一套流程。

我们之前有提到,多个OMX 组件可能是共享同一套编解码流程,只是配置上可能会有一点区别,我们可以用 role (通用标准组件名称)来确认当前走的是哪一个分支,也可以用这里的 compression 来确认当前走哪一个流程。

1.2、OMX_VIDEO_PORTDEFINITIONTYPE

注释是这样描述的:用于定义视频路径(video path)的结构体,输入和输出的视频路径的数量将因视频组件的类型而异。

这里的 video path 我理解的就是视频流,后面可能还会碰到 svp(secure video path)指的就是加密流。

视频端口最常见的定义有如下几个:

  • cMIMEType:数据的媒体类型;
  • nFrameWidth:未压缩(解码后)图像的宽度;
  • nFrameHeight:未压缩(解码后)图像的高度;
  • nStride:图像的每行跨度的字节数;
  • nSliceHeight:编码时每个切片的高度;
  • nBitrate:压缩后数据的比特率;
  • eCompressionFormat:当前组件使用的压缩格式;
  • eColorFormat:当前组件使用的解码后的格式类型;

1.3、其他

文件中还有其他的一些结构体,例如 OMX_VIDEO_PARAM_AVCTYPE等,一般是编码/解码过程中需要额外设定的参数,具体的参数意义可以到这里查阅。

2、OMX_Audio.h

audio 和 video 有比较大的不同,audio 的 port mode 结构体比较简单,里面没有像 video 那么详细的信息,这是因为每个不同的 audio type都会有不同的参数信息。

例如 OMX_AUDIO_PARAM_AACPROFILETYPE OMX_AUDIO_PARAM_VORBISTYPE ,他们用于编解码所需要的参数就是不一样的,所以在对音频做编解码时,需要根据不用的 mime type 来给组件设定不同的参数。 video 则可以用相同的流程对编解码组件进行配置,这部分我们会在 ACodec 中看到。

3、扩展

Android OpenMax 给我们预定义了许多类型,但是这些类型并没有覆盖所有的格式,如果我们要添加新的类型的支援,可以查找 VendorStartUnused 相关的字样,并以此索引未起始点来定义我们自己的类型。

ACodec 原生部分只支援 OpenMax 中预定义的编解码类型,如果要支援我们自定义的类型则必须要修改 framework了,这是不能绕过的,这对后期 Android 大版本的进版很不友好。

到此我们就对Android OpenMax相关的接口以及结构体有了初步了解,后续我们将会回到应用层(OMXNode 以及 ACodec)来了解如何调用 OpenMax 组件的。

你可能感兴趣的:(Android,Media,android,C++,Framework,Media,多媒体)