在同一程序中使用 OMXIV、OMXPLAYER 和写入帧缓冲区

Using OMXIV, OMXPLAYER and writing to framebuffer in the same program

在我的程序中,我将菜单直接写入 Raspberry Pi 上的帧缓冲区。这个程序可以用omxplayer播放视频,调用另一个程序用omxiv显示jpeg图片。如果 omxplayer 运行s 在 omxiv 之前,菜单在之后变得不可见,并且在我再次使用 omxplayer 播放视频之前我无法再次写入帧缓冲区。重启程序也没用。

这里显示了一个简单的例子。该程序在绿色背景上绘制一个蓝色矩形,播放 wideo,然后显示图像。我原以为最后会绘制一个蓝色矩形,但它并没有发生。下一次程序是运行,矩形是不可见的。如果我在 omxiv 之后播放视频,一切正常。

用户pi是否失去了写入帧缓冲区的权限?

#!/usr/bin/env python

import numpy as np
from PIL import Image
import time, subprocess, os

fb = np.memmap('/dev/fb0', dtype='uint8',mode='w+', shape=(1024,1280,4))
fb[:] = [0,255,0,255]
x0, y0 = 50, 100
w, h = 300, 200

img = Image.new('RGBA', size=(w, h), color=(255,0,0,255))
n = np.array(img)
fb[y0:y0+h, x0:x0+w] = n
time.sleep(2)

os.system('omxplayer -b -r -o both video.mp4')
time.sleep(2)

subprocess.Popen('omxiv 0.jpg >/dev/null 2>&1', shell = True)
time.sleep(2)
subprocess.Popen('pkill omxiv >/dev/null 2>&1',shell = True)
time.sleep(2)

fb[y0:y0+h, x0:x0+w] = n

我自己解决了这个问题。 省略 omxplayer 的 -b 选项 (--blank),解决问题:

os.system('omxplayer -r -o both video.mp4')