Qt Mobility videoplayer 源码剖析(2)

上一节谈到QMediaPlayer构造函数如何使用到插件中的类,先回顾一下QMediaPlayer构造函数

我们现在已经知道d -> service指向插件中的一个QMediaService派生类的实例,所以我们开始分析插件的源代码。

首先我们找到插件的root component(cpp文件中包含Q_EXPORT_PLUGIN2的那个类)

可以看出这个插件实现了两个接口,其中QMediaServiceProviderPlugin是提供视频播放服务的接口。它的成员函数create返回一个QMediaService指针,就是QMediaService构造函数d->service的candidate(至于为什么是candidate,是因为源代码还要对这个指针进行一些验证和处理)。下面是create()的源码:

 

(gst_init是GStreamer库的初始化函数,它会对 GStreamer 库做一些必要的初始化工作)

这些宏都是不同服务的id,create根据参数的不同返回不同的QMediaService指针。例如我们需要id为Q_MEDIASERVICE_MEDIAPLAYER的实例,create即创建一个QGstreamerPlayerService实例,并返回其指针。

考察QGstreamerPlayerService类,requestControl的源码:

 

QMediaPlayerControl_iid是我们需要的控制类的id,返回值m_control指向一个新分配的QGstreamerPlayerControl实例,于是d->control指向的对象终于明朗了。要想知道如果控制视频的播放,我们只需要分析QGstreamerPlayerControl类的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值