Linux: tvservice -o, затем tvservice -p результаты при включенном dipslay, но ничего не отображается.

Созданный на 17 мар. 2015  ·  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 и все еще выводит на экран, поэтому вижу,
17 марта 14:33:46 raspberrypi user.err fbcp [3318]: Невозможно сделать снимок -1. (60)
17 марта, 14:34:00 raspberrypi user.info ядро: [326.704707] bcm2708_fb_ioctl 40044620,0 возвращает = 0 p [1] = 0x80000001
17 марта, 14:34:00 raspberrypi user.err kernel: [326.704940] bcm2708_fb_pan_display (0,0) возвращает = 16
17 марта, 14:34:46 raspberrypi user.err fbcp [3318]: Невозможно сделать снимок -1. (120)
17 марта, 14:35:00 raspberrypi user.info ядро: [386.693696] bcm2708_fb_ioctl 40044620,0 возвращает = 0 p [1] = 0x80000001
17 марта, 14:35:00 raspberrypi user.err kernel: [386.693907] bcm2708_fb_pan_display (0,720) возвращает = 16

Пытался восстановить с помощью
(tvservice -p && sleep 2 && fbset -depth 8 && fbset -depth 16) 2> & 1
нет вывода на экран
17 марта 14:43:26 raspberrypi user.warn ядро: [268.637255] обнаружена ошибка fb_set_par, код ошибки: 16
17 марта, 14:43:26 raspberrypi user.err kernel: [268.649473] bcm2708_fb_blank (0) возвращает = 0 p [1] = 0x80000001
17 марта 14:43:26 raspberrypi user.info ядро: [268.821121] bcm2708_fb_ioctl 40044620,0 возвращает = 0 p [1] = 0x80000001
17 марта, 14:43:26 raspberrypi user.err kernel: [268.821395] bcm2708_fb_pan_display (0,0) возвращает = 16
17 марта 14:43:26 raspberrypi user.info ядро: [268.972086] bcm2708_fb_ioctl 40044620,0 возвращает = 0 p [1] = 0x80000001
17 марта 14:43:26 raspberrypi user.err kernel: [268.972286] bcm2708_fb_pan_display (0,720) возвращает = 16
17 марта 14:43:26 raspberrypi user.info ядро: [269.105637] bcm2708_fb_ioctl 40044620,0 возвращает = 0 p [1] = 0x80000001
17 марта 14:43:26 raspberrypi user.err kernel: [269.105901] bcm2708_fb_pan_display (0,0) возвращает = 16

изменение VT в этот момент привело к расклиниванию пи.

Приложение sdl создаст свой собственный буфер кадра и будет иметь указатель на память буфера кадра, поэтому ему придется обрабатывать его самостоятельно.
На самом деле, я думаю, вам не следует отключать HDMI, когда приложения используют экран.
Вы можете использовать:

vcgencmd display_power 0

а также

vcgencmd display_power 1

который является менее навязчивым способом удаления выходного сигнала HDMI, но оставляет нетронутыми наложения.

Да, приложение SDL использовало двойной буфер HW, выделенный через устройство fb ядра, и панорамировал между двумя буферами, после чего я перерисовываю буфер, выпуская набор команд восстановления. согласно выводу fbset -i адрес fb не меняется после прохождения цикла питания, но я не думаю, что это правдоподобно и, вероятно, не синхронизирован, следовательно, сбой при изменении vt. Принудительно изменить режим в этой точке, чтобы перераспределить fb и обновить указатели?

Все сказанное vcgencmd display_power (за вычетом s на дисплеях), похоже, делает то, что я хочу (реализуя мягкое отключение), спасибо.

В этом сообщении на форуме упоминается исправленная версия библиотеки SDL (http://www.raspberrypi.org/forums/viewtopic.php?f=38&t=99822&p=692525&hilit=sdl#p692525), которая справляется с базовым адресом изменение FB при изменении разрешения. Возможно, стоит попробовать эту версию, чтобы увидеть, работает ли она лучше.

@pelwell lol да, это был я, с той страницы ;-)

Вы можете прочитать о проблеме здесь - https://github.com/raspberrypi/firmware/issues/354 - К счастью, кто-то по имени pssc уже исправил основную проблему в рамках своей работы по squeezeplay, поэтому я включил исправление в обновленный Пакет SDL.

Действительно LOL. В свою защиту, это было некоторое время назад, и одна труднопроизносимая ручка очень похожа на другую ...

Выделенная память фреймбуфера не освобождается при отключении питания, но все элементы dispmanx будут удалены. Если вы используете бэкэнд dispmanx для sdl, то обычная последовательность dispmanx_element_add вернет фреймбуфер обратно на дисплей.
Если вы используете заднюю часть фреймбуфера по умолчанию, вам нужно будет изменить его, чтобы он был удален / добавлен. Фактически сделайте то же самое, что и "fbset -depth 8 && fbset -depth 16" из SDL (например, измените размер или глубину).
Однако решение "vcgencmd display_power", вероятно, является самым простым.

Решение vcgencmd display_power делает то, что мне нужно, закрывая проблему.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

thomasklingbeil picture thomasklingbeil  ·  4Комментарии

fivdi picture fivdi  ·  9Комментарии

KevinStartup picture KevinStartup  ·  6Комментарии

Nuntis-Spayz picture Nuntis-Spayz  ·  5Комментарии

pvouzis picture pvouzis  ·  9Комментарии