我正在Linux上编写一个视频播放器,我想把它分成两个过程:
一个。解码过程 B. GUI
通过这种方式,我可以使用不同的编程语言,当问题发生时,更容易知道问题出在哪里。
问题是,可以直接处理A渲染解码图像到B的表面吗?我不想使用某些IPC来发送B这些解码数据,因为这可能是非常低效的。
答案 0 :(得分:8)
答案 1 :(得分: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
答案 2 :(得分:1)
看看如何实现mplayer和smplayer。 mplayer解码并显示视频,而smplayer是(可选)GUI。