首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定的GStreamer管道中有多少个线程?

给定的GStreamer管道中有多少个线程?
EN

Stack Overflow用户
提问于 2021-10-11 04:47:04
回答 1查看 538关注 0票数 0

这个GStreamer管道中有多少个线程?

代码语言:javascript
复制
gst-launch-1.0 autovideosrc ! queue ! fakesink

我要每个线程的总数和函数。我在网上和文档上搜索,但没有找到明确的答案。

据我所知,这里有一个主循环线程、一个事件线程(不确定)和两个缓冲线程(因为队列元素)。这为上述管道总共提供了4个线程。

我说的对吗?还是有其他的机制?

实验:

第一次运行最初会给出8个线程。

代码语言:javascript
复制
/ # ps -T | grep "gst"
 3681 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3702 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3703 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3704 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3716 root      0:00 {queue0:src} gst-launch-1.0 autovideosrc ! queue ! fakesink
 3717 root      0:00 {fake-auto-video} gst-launch-1.0 autovideosrc ! queue ! fakesink
 3718 root      0:00 {gmain} gst-launch-1.0 autovideosrc ! queue ! fakesink
 3719 root      0:00 {pool} gst-launch-1.0 autovideosrc ! queue ! fakesink
 3729 root      0:00 grep gst

过了一段时间,它变成了7个线程。

代码语言:javascript
复制
/ # ps -T | grep "gst"
 3681 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3702 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3703 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3704 root      0:00 gst-launch-1.0 autovideosrc ! queue ! fakesink
 3716 root      0:00 {queue0:src} gst-launch-1.0 autovideosrc ! queue ! fakesink
 3717 root      0:02 {fake-auto-video} gst-launch-1.0 autovideosrc ! queue ! fakesink
 3718 root      0:00 {gmain} gst-launch-1.0 autovideosrc ! queue ! fakesink
 3731 root      0:00 grep gst

我做了strace -p 3681等等然后发现

3681:

代码语言:javascript
复制
ppoll([{fd=3, events=POLLIN}, {fd=9, events=POLLIN}], 2, NULL, NULL, 0

3702:

代码语言:javascript
复制
ioctl(11, BINDER_WRITE_READ

3703

代码语言:javascript
复制
ioctl(11, BINDER_WRITE_READ

3704:

代码语言:javascript
复制
ioctl(11, BINDER_WRITE_READ

3716:

代码语言:javascript
复制
...
futex(0x5580a842a8, FUTEX_WAIT_PRIVATE, 11083, NULL) = 0

3717:

代码语言:javascript
复制
...
ppoll([{fd=6, events=POLLIN|POLLPRI|POLLERR|POLLHUP|POLLNVAL}], 1, {tv_sec=0, tv_nsec=31373754}, NULL, 8) = 0 (Timeout)
futex(0x5580a842a8, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x5580a84290, FUTEX_WAKE_PRIVATE, 1) = 1

3718:

代码语言:javascript
复制
ppoll([{fd=5, events=POLLIN}], 1, NULL, NULL, 0

这是什么意思?

EN

回答 1

Stack Overflow用户

发布于 2021-10-22 15:11:21

我在https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel上问了这个问题,并得到了尼古拉斯·杜弗兰( Nicolas nicolas@ndufresne.ca )的回复。

不可能说哪个视频来源将被自动视频选择。用一个显式的src替换这个神奇的东西,比如视频this,那么您应该有4个线程,

  • 源流线程
  • 队列流线程
  • 主线程(gst启动运行GLib主循环,尽管这是可选的)
  • 一些线程池。

如果使用初始化GIO的元素,则可能会有更多的线程,这些线程大多处于空闲状态。

您可以使用GStreamer消息跟踪软件中与STREAM_STATUS相关的线程。所有其他线程都来自第三方库、glib或you。

在GStreamer中没有使用Android绑定程序的主线代码,所以我想您使用的是一些特定于HW的视频源,然后天空是第三方相机堆栈所能做的限制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69521161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档