Firefly开源社区

寻找RK3288,Android4.4 SDK硬件解码源码

493

积分

6

威望

0

贡献

技术达人

Rank: 2

积分
493
QQ
发表于 2016-2-18 15:50:38     
本帖最后由 jingjin221 于 2016-2-18 17:28 编辑

小弟正做基于Android4.4 PAD,SDK来做264解码方面的工作,目前遇到了一些问题,追究到OMX层,下面的具体硬件解码的源码,SDK里却没有,是直接调用的libstagefrighthw.so库,小弟想在此研究下具体生成此解码库的源码在何处,望求知情人士给出一些帮助!在此谢谢
顺便问一下在OMX添加解码组件的时候,分为了硬件解码和软件解码
OMXMaster::OMXMaster()
    : mVendorLibHandle(NULL) {
    addVendorPlugin();//硬件
    addPlugin(new SoftOMXPlugin);//软件
}
那OMX默认优先使用谁呢?RkOn2Decoder这个编码组件应该是硬件解码?那究竟在什么情况下才使用这个解码组件呢?默认的硬件解码不是OMX.rk.video_decoder.avc吗???
mPlayerExtCfg.use_iommu这个参数究竟有何用???设置为0,PAD版本就可以解码隔行但是用的是RkOn2Decoder这个组件,设置为1,就不能解码隔行,而且用的就是OMX.rk.video_decoder.avc这个组件!!!究竟有何区别啊????又没有代码注释!很难懂啊!
回复

使用道具 举报

493

积分

6

威望

0

贡献

技术达人

Rank: 2

积分
493
QQ
发表于 2016-2-19 10:54:42     
基本找到原因
在OMXCodec::Create中findMatchingCodecs
list = MediaCodecList::getInstance();
parseXMLFile解析/etc/media_codecs.xml
得到OMX.rk.video_decoder.avc和RkOn2Decoder
循环匹配mine
list->findCodecByType(mime, createEncoder, index);}

将匹配到的解码组件添加到列表中
        if (((flags & kSoftwareCodecsOnly) &&   IsSoftwareCodec(componentName)) ||
            ((flags & kHardwareCodecsOnly) &&  !IsSoftwareCodec(componentName)) ||
            (!(flags & (kSoftwareCodecsOnly | kHardwareCodecsOnly)))) {
            ssize_t index = matchingCodecs->add();
            CodecNameAndQuirks *entry = &matchingCodecs->editItemAt(index);
            entry->mName = String8(componentName);
            entry->mQuirks = getComponentQuirks(list, matchIndex);
        }

在setNativeWindow_l中
    if(!pfrmanager->mPlayerExtCfg.use_iommu){
       err = initVideoDecoder(OMXCodec::kSoftwareCodecsOnly);
    }else{
       err = initVideoDecoder(OMXCodec::kHardwareCodecsOnly);
    }

注意这里的flag是和传入的flag相与的结果,当io_mmu设置为1时,这里的flag为kHardwareCodecsOnly,为0时flag为kSoftwareCodecsOnly
事实证明
当社会io_mmu为1时此时匹配到的解码组件应该是OMX.rk.video_decoder.avc,io_mmu为0时匹配到的是RkOn2Decoder,这也解释了为什么设置io_mmu为1时可以解码隔行视频是因为AWESOMPLAYER调用了RkOn2Decoder解码和以及在FrameQueueManager里的IEP来解交错!


回复

使用道具 举报

8

积分

0

威望

0

贡献

游客

积分
8
发表于 2016-2-26 14:03:56     
jingjin221 发表于 2016-2-19 10:54
基本找到原因
在OMXCodec::Create中findMatchingCodecs
list = MediaCodecList::getInstance();

请问您实现硬件解码了吗 ,效果怎么样?能播放rtsp流吗
回复

使用道具 举报

493

积分

6

威望

0

贡献

技术达人

Rank: 2

积分
493
QQ
发表于 2016-3-10 13:41:54     
诗雨轩 发表于 2016-2-26 14:03
请问您实现硬件解码了吗 ,效果怎么样?能播放rtsp流吗

RTSP只是类似HTTP的一种流的传输方式而已,解码都搞定了,添加相应的输入接口就好了
回复

使用道具 举报

15

积分

0

威望

0

贡献

技术小白

积分
15
发表于 2016-4-27 13:10:18     
羡慕老兄这样的水平,好好学习一下
回复

使用道具 举报

发表于 2016-5-4 09:58:48     
不错的帖子,楼主很有专研精神:lol
暴走的创客!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表