2009-10-25 81 views
5

我在Linux上写的视频播放器,我想将其分成2个过程:在Linux上,进程是否可以呈现另一个进程的GUI?

A.解码过程 B. GUI

这样,我可以用不同的编程语言和时问题发生,更容易知道问题在哪里。

问题是,可以直接处理A渲染解码图片到B的表面上吗?我不想用一些IPC来发送这些解码数据,因为这可能是非常低效的。

回答

8

您可以使用XEmbed规范,它允许您将一个X11窗口嵌入到另一个窗口内,它们可能来自不同的进程。这是其他媒体播放器前端通常所做的。

GTK和Qt都支持XEmbed。

+0

非常感谢!这就是我想要的。 – ablmf 2009-10-25 09:34:53

1

看看mplayer和smplayer是如何实现的。 mplayer解码并显示视频,smplayer是(可选)GUI。

4

IPC(特别是Unix管道)比你想象的更有效率,它可能是正确的使用机制。

不过,既然你问怎么做没有IPC(和我分析这没有上下文切换和副本均值),你可以简单地创建两个进程之间共享内存段:

fd = shm_open("/my_shmem", O_RDWR| O_CREAT, S_IWUSR); 
if(fd == -1) abort(); 
ftruncate(fd, SHMEM_SIZE); 
p = mmap(NULL, SHMEM_SIZE, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0); 
if(p == MAP_FAILED) abort() 

现在p具有由两个(或多个)进程共享的共享内存段的地址。

警告!在进程中,p(虚拟内存地址)的数值可能不同,所以如果你想在共享内存中放置一个链表,你必须使用偏移量。

干杯, gby

相关问题