2009-10-25 30 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

相關問題