Linux: tvservice -o 然后 tvservice -p 结果打开显示但没有显示。

创建于 2015-03-17  ·  9评论  ·  资料来源: raspberrypi/linux

我已经在两个不同的显示器和 3.12 和 3.18 .... 在 B+ 和 rev2 B 上尝试过这个。

最有用的评论

sdl 应用程序将创建它自己的帧缓冲区,并将有一个指向帧缓冲区内存的指针,因此它必须自己处理这个问题。
我真的认为当应用程序使用屏幕时你不应该关闭 HDMI。
您可以使用:

vcgencmd display_power 0

vcgencmd display_power 1

这是去除 HDMI 输出信号但保持覆盖完好无损的一种侵入性较小的方式。

所有9条评论

这是正常的。 关闭电源会破坏任何覆盖(帧缓冲区就是其中之一)。
您可以使用“fbset -depth 8 && fbset -depth 16”重新创建它

我拥有的应用程序是基于 sdl 的,并且仍然输出到屏幕上,所以看到了,
3 月 17 日 14:33:46 raspberrypi user.err fbcp[3318]:无法快照 -1。 (60)
3 月 17 日 14:34:00 raspberrypi user.info 内核:[326.704707] bcm2708_fb_ioctl 40044620,0 返回=0 p[1]=0x80000001
3 月 17 日 14:34:00 raspberrypi user.err 内核:[326.704940] bcm2708_fb_pan_display(0,0) 返回 = 16
3 月 17 日 14:34:46 raspberrypi user.err fbcp[3318]:无法快照 -1。 (120)
3 月 17 日 14:35:00 raspberrypi user.info 内核:[386.693696] bcm2708_fb_ioctl 40044620,0 返回=0 p[1]=0x80000001
3 月 17 日 14:35:00 raspberrypi user.err 内核:[386.693907] bcm2708_fb_pan_display(0,720) 返回 = 16

尝试恢复
(tvservice -p && sleep 2 && fbset -depth 8 && fbset -depth 16) 2>&1
没有屏幕输出
3 月 17 日 14:43:26 raspberrypi user.warn 内核:[268.637255] 检测到 fb_set_par 错误,错误代码:16
3 月 17 日 14:43:26 raspberrypi user.err 内核:[268.649473] bcm2708_fb_blank(0) 返回=0 p[1]=0x80000001
3 月 17 日 14:43:26 raspberrypi user.info 内核:[268.821121] bcm2708_fb_ioctl 40044620,0 返回=0 p[1]=0x80000001
3 月 17 日 14:43:26 raspberrypi user.err 内核:[268.821395] bcm2708_fb_pan_display(0,0) 返回 = 16
3 月 17 日 14:43:26 raspberrypi user.info 内核:[268.972086] bcm2708_fb_ioctl 40044620,0 返回=0 p[1]=0x80000001
3 月 17 日 14:43:26 raspberrypi user.err 内核:[268.972286] bcm2708_fb_pan_display(0,720) 返回 = 16
3 月 17 日 14:43:26 raspberrypi user.info 内核:[269.105637] bcm2708_fb_ioctl 40044620,0 返回=0 p[1]=0x80000001
3 月 17 日 14:43:26 raspberrypi user.err 内核:[269.105901] bcm2708_fb_pan_display(0,0) 返回 = 16

此时改变 VT 会导致 pi 楔入。

sdl 应用程序将创建它自己的帧缓冲区,并将有一个指向帧缓冲区内存的指针,因此它必须自己处理这个问题。
我真的认为当应用程序使用屏幕时你不应该关闭 HDMI。
您可以使用:

vcgencmd display_power 0

vcgencmd display_power 1

这是去除 HDMI 输出信号但保持覆盖完好无损的一种侵入性较小的方式。

是的,SDL 应用程序使用了通过内核 fb 设备分配的硬件双缓冲区,并在两个缓冲区之间平移,之后我正在重绘缓冲区,发出恢复命令集。 根据 fbset -i 的输出,经过电源循环后,fb 地址不会更改,但我认为这不可信,并且可能不同步,因此 vt 更改时崩溃。 在该点强制模式更改以重新分配 fb 并更新指针?

一切都说 vcgencmd display_power (减去显示器上的 s)似乎可以做我想做的事(实现软关闭),谢谢。

此论坛帖子 (http://www.raspberrypi.org/forums/viewtopic.php?f=38&t=99822&p=692525&hilit=sdl#p692525) 中引用了 SDL 库的修补版本,可以处理FB 在分辨率改变时改变。 可能值得尝试该版本以查看它的行为是否更好。

@pelwell哈哈,是的,那是我,从那个页面开始 ;-)

您可以在此处阅读有关该问题的信息 - https://github.com/raspberrypi/firmware/issues/354 - 幸运的是有人称为 pssc 已经修复了主要问题,作为他们挤压播放工作的一部分,因此我将修复程序合并到更新中SDL 包。

哈哈。 在我的辩护中,这是不久前的事情,一个无法发音的手柄看起来很像另一个......

断电时不会释放分配的帧缓冲内存,但会删除任何 dispmanx 元素。 如果您使用的是 sdl 的 dispmanx 后端,那么通常的 dispmanx_element_add 序列将使帧缓冲区返回到显示器上。
如果您使用的是默认的帧缓冲区后端,则需要对其进行更改以使其被删除/添加。 从 SDL 中有效地执行与“fbset -depth 8 && fbset -depth 16”相同的操作(例如更改大小或深度)。
然而,“vcgencmd display_power”解决方案可能是最简单的。

vcgencmd display_power 编码的解决方案可以满足我的需求,因此可以解决问题。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

kucharskim picture kucharskim  ·  7评论

fivdi picture fivdi  ·  9评论

KevinStartup picture KevinStartup  ·  6评论

pvouzis picture pvouzis  ·  9评论

Nuntis-Spayz picture Nuntis-Spayz  ·  5评论