OMXCodec 是awesomeplayer和下层omax组件的桥梁,试着来分析一下
OMXCodec在 initVideoDecoder中来创建
mVideoSource = OMXCodec::Create(
mClient.interface(), mVideoTrack->getFormat(),
false, // createEncoder
mVideoTrack,
NULL, flags, USE_SURFACE_ALLOC ? mNativeWindow : NULL);
mClient是omxclient,awesomeplayer利用这个类来实现和omx的连接,google设计OMX也是一个aidl的远程接口,所以说呢,OMX并不是只是给mediaplayer service来用的,是提供了接口供其他应用来使用的。第二个参数是MetaData,利用这个参数来找video的metadata相关参数,第四个是videotrack,就是videoextractor返回的track,flags是取下面的值
{
kPreferSoftwareCodecs = 1,
kIgnoreCodecSpecificData = 2,
// The client wants to access the output buffer's video
// data for example for thumbnail extraction.
kClientNeedsFramebuffer = 4,
// Request for software or hardware codecs. If request
// can not be fullfilled, Create() returns NULL.
kSoftwareCodecsOnly = 8,
kHardwareCodecsOnly = 16,
// Store meta data in video buffers
kStoreMetaDataInVideoBuffers = 32,
// Only submit one input buffer at one time.
kOnlySubmitOneInputBufferAtOneTime = 64,
// Enable GRALLOC_USAGE_PROTECTED for output buffers from native window
kEnableGrallocUsageProtected = 128,
// Secure decoding mode
kUseSecureInputBuffers = 256,
//RCS Video share
kIsVsh = 512,
}
最后一个nativewindows,java层播放视频时候需要setdisplay,surface经过一系列的转换后,就成了anativewindow,后面打算写一个display的博客,再详细的分析这个吧
这样omxcodec就创建好了,返回一个videosource,就是解码好的videotrack
看看create里面做啥了
sp<MediaSource> OMXCodec::Create(
c