Filesrc源码分析

概述

根据上一篇博客的介绍,我们知道对于filesrc类我们只需完成其静态方法即可,调用逻辑则由pipeline/bin来完成。这里额外要提的是filesrc是继承basesrc的,basesrc是所有src类型element的一个模板,其接口完成了状态切换管理、Pad协商、内存分配器协商等等一系列逻辑。filesrc仅仅重载了basesrc的部分接口,如果不想使用basesrc的默认提供的逻辑,也可自己通过重载进行替换。

代码分析

filesrc类的成员和方法的介绍可参见:filesrc官方介绍,官方介绍中详细描述了每个属性和接口的功能。由于filesrc 类并未额外声明接口,其源码所实现接口也全都是重载basesrc接口,因此想了解这些接口的功能,需要查阅basesrc的官方介绍。此处额外补充各个接口的调用逻辑,这样针对filesrc的代码逻辑就一目了然了。

如下便是笔者通过添加打印得出的filesrc函数调用时序。通过该调用时序,我们能窥探出Pipeline的各个阶段需要准备的事情。

  • 【NULL】to【READY】阶段:创建元素的实例。
  • 【READY】to【PAUSED】阶段:打开文件句柄,获取文件流信息。
  • 【PAUSED】to【PREROLL】阶段:成功读取了第一个buffer的数据。
  • 【PLAYING】阶段:源源不断的将读取文件数据,并填充到指定buffer中,直到读完数据返回GST_FLOW_EOS。
  • 【PLAYING】to【PAUSED】阶段:具体实现对filesrc是透明的。
  • 【PAUSED】to【READY】阶段:具体实现对filesrc是透明的。
  • 【READY】to【NULL】阶段:关闭文件句柄
$ gst-launch-1.0 filesrc location=/oem/200frames_count.h264 ! filesink location=/tmp/flc.h264

FLC-DBG:[GstFileSrc] <gst_file_src_class_init> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_init> is called!
Setting pipeline to PAUSED ...
FLC-DBG:[GstFileSrc] <gst_file_src_start> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_get_size> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_is_seekable> is called!
Pipeline is PREROLLING ...
FLC-DBG:[GstFileSrc] <gst_file_src_fill> is called!
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
FLC-DBG:[GstFileSrc] <gst_file_src_fill> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_fill> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_fill> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_fill> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_fill> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_get_size> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_fill> is called!
FLC-DBG:[GstFileSrc] <gst_file_src_get_size> is called!
Got EOS from element "pipeline0".
Execution ended after 0:00:00.009744000
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
FLC-DBG:[GstFileSrc] <gst_file_src_stop> is called!
Setting pipeline to NULL ...
Freeing pipeline ...
FLC-DBG:[GstFileSrc] <gst_file_src_finalize> is called!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值