这个GStreamer管道中有多少个线程?
gst-launch-1.0 autovideosrc ! queue ! fakesink我要每个线程的总数和函数。我在网上和文档上搜索,但没有找到明确的答案。
据我所知,这里有一个主循环线程、一个事件线程(不确定)和两个缓冲线程(因为队列元素)。这为上述管道总共提供了4个线程。
我说的对吗?还是有其他的机制?
实验:
第一次运行最初会给出8个线程。
/ # 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个线程。
/ # 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:
ppoll([{fd=3, events=POLLIN}, {fd=9, events=POLLIN}], 2, NULL, NULL, 03702:
ioctl(11, BINDER_WRITE_READ3703
ioctl(11, BINDER_WRITE_READ3704:
ioctl(11, BINDER_WRITE_READ3716:
...
futex(0x5580a842a8, FUTEX_WAIT_PRIVATE, 11083, NULL) = 03717:
...
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) = 13718:
ppoll([{fd=5, events=POLLIN}], 1, NULL, NULL, 0这是什么意思?
发布于 2021-10-22 15:11:21
我在https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel上问了这个问题,并得到了尼古拉斯·杜弗兰( Nicolas nicolas@ndufresne.ca )的回复。
不可能说哪个视频来源将被自动视频选择。用一个显式的src替换这个神奇的东西,比如视频this,那么您应该有4个线程,
如果使用初始化GIO的元素,则可能会有更多的线程,这些线程大多处于空闲状态。
您可以使用GStreamer消息跟踪软件中与STREAM_STATUS相关的线程。所有其他线程都来自第三方库、glib或you。
在GStreamer中没有使用Android绑定程序的主线代码,所以我想您使用的是一些特定于HW的视频源,然后天空是第三方相机堆栈所能做的限制。
https://stackoverflow.com/questions/69521161
复制相似问题