Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions bin/start_viewer.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,22 @@ trap '' 16
# Disable swapping
echo 0 > /sys/fs/cgroup/memory/memory.swappiness

# Start X server with dummy video driver
export DISPLAY=:0
rm -rf /tmp/.X0-lock
Xorg :0 -s 0 dpms &

# Wait for X server to be ready
until xset -display :0 q > /dev/null 2>&1; do
echo "Waiting for X server to be ready"
sleep 0.1
done

# Now that X is ready, configure display settings
xset -display :0 s off
xset -display :0 s noblank
xset -display :0 -dpms

# Start viewer
sudo -E -u viewer dbus-run-session python viewer.py &

Expand Down
8 changes: 6 additions & 2 deletions docker/Dockerfile.viewer.j2
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ RUN c_rehash

# QT Base from packages does not support eglfs

{% if board != 'pi5' %}
{% if board != 'pi5' and board != 'pi4-64' %}
RUN curl "{{webview_base_url}}/qt{{qt_major_version}}-{{qt_version}}-{{debian_version}}-{{board}}.tar.gz" \
-sL -o "/tmp/qt{{qt_major_version}}-{{qt_version}}-{{debian_version}}-{{board}}.tar.gz" && \
curl "{{webview_base_url}}/qt{{qt_major_version}}-{{qt_version}}-{{debian_version}}-{{board}}.tar.gz.sha256" \
Expand All @@ -65,8 +65,12 @@ RUN curl "{{webview_base_url}}/webview-{{qt_version}}-{{debian_version}}-{{board
tar -xzf "/tmp/webview-{{qt_version}}-{{debian_version}}-{{board}}-{{webview_git_hash}}.tar.gz" -C /usr/local && \
rm "webview-{{qt_version}}-{{debian_version}}-{{board}}-{{webview_git_hash}}.tar.gz"

ENV QT_QPA_EGLFS_FORCE888=1
{% if board == 'pi4' and target_platform == 'linux/arm64/v8' %}
ENV QT_QPA_PLATFORM=xcb
ENV DISPLAY=:0
{% else %}
ENV QT_QPA_PLATFORM=linuxfb
{% endif %}

# Turn on debug logging for now
#ENV QT_LOGGING_RULES=qt.qpa.*=true
Expand Down
8 changes: 7 additions & 1 deletion lib/media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import sh
import vlc
import platform

from lib.device_helper import get_device_type
from settings import settings
Expand Down Expand Up @@ -81,10 +82,15 @@ def get_alsa_audio_device(self):
return 'default:CARD=HID'

def __get_options(self):
return [
options = [
f'--alsa-audio-device={self.get_alsa_audio_device()}',
]

if platform.architecture()[0] == '64bit' and get_device_type() == 'pi4':
options.append('--vout=xcb_x11')

return options

def set_asset(self, uri, duration):
self.player.set_mrl(uri)
settings.load()
Expand Down
8 changes: 5 additions & 3 deletions tools/image_builder/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,11 @@ def build_image(
]

if board in ['pi1', 'pi2', 'pi3', 'pi4']:
base_apt_dependencies.extend(['libraspberrypi0'])
if not (board == 'pi4' and target_platform == 'linux/arm64/v8'):
base_apt_dependencies.extend(['libraspberrypi0'])

if service == 'viewer':
context.update(get_viewer_context(board))
context.update(get_viewer_context(board, target_platform))
elif service == 'test':
context.update(get_test_context())
elif service == 'wifi-connect':
Expand Down Expand Up @@ -171,7 +172,8 @@ def main(
git_hash = str(pygit2.Repository('.').head.target)
git_short_hash = git_hash[:SHORT_HASH_LENGTH]

build_parameters = get_build_parameters(build_target)
build_parameters = get_build_parameters(build_target, target_platform)

board = build_parameters['board']
base_image = build_parameters['base_image']

Expand Down
42 changes: 33 additions & 9 deletions tools/image_builder/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from tools.image_builder.constants import GITHUB_REPO_URL


def get_build_parameters(build_target: str) -> dict:
def get_build_parameters(build_target: str, target_platform: str | None = None) -> dict:
default_build_parameters = {
'board': 'x86',
'base_image': 'debian',
Expand All @@ -19,11 +19,18 @@ def get_build_parameters(build_target: str) -> dict:
'target_platform': 'linux/arm64/v8',
}
if build_target == 'pi4':
return {
'board': 'pi4',
'base_image': 'balenalib/raspberrypi3-debian',
'target_platform': 'linux/arm/v8',
}
if target_platform == 'linux/arm64/v8':
return {
'board': 'pi4',
'base_image': 'balenalib/raspberrypi4-64-debian',
'target_platform': 'linux/arm64/v8',
}
else:
return {
'board': 'pi4',
'base_image': 'balenalib/raspberrypi3-debian',
'target_platform': 'linux/arm/v8',
}
elif build_target == 'pi3':
return {
'board': 'pi3',
Expand Down Expand Up @@ -98,7 +105,7 @@ def get_test_context() -> dict:
}


def get_viewer_context(board: str) -> dict:
def get_viewer_context(board: str, target_platform: str) -> dict:
webview_git_hash = (
'389f1ccc' if board == 'pi5'
else '5e556681738a1fa918dc9f0bf5879ace2e603e12'
Expand All @@ -108,6 +115,7 @@ def get_viewer_context(board: str) -> dict:
f'{releases_url}/WebView-v0.3.4' if board == 'pi5'
else f'{releases_url}/WebView-v0.3.3'
)
context = {}

qt_version = '5.15.14'

Expand Down Expand Up @@ -229,13 +237,22 @@ def get_viewer_context(board: str) -> dict:
'libswscale-dev',
]

if board == 'pi5':
if board == 'pi5' or (board == 'pi4' and target_platform == 'linux/arm64/v8'):
apt_dependencies.extend([
'qt6-base-dev',
'qt6-webengine-dev',
])

if board not in ['x86', 'pi5']:
if board == 'pi4' and target_platform == 'linux/arm64/v8':
apt_dependencies.extend([
'xserver-xorg-core',
'xserver-xorg-video-fbdev',
'x11-xserver-utils',
'xauth',
'xinit',
])

if board not in ['x86', 'pi5'] and not (board == 'pi4' and target_platform == 'linux/arm64/v8'):
apt_dependencies.extend([
'libraspberrypi0',
'libgst-dev',
Expand All @@ -246,12 +263,19 @@ def get_viewer_context(board: str) -> dict:
if board != 'pi1':
apt_dependencies.extend(['libssl1.1'])

if board == 'pi4' and target_platform == 'linux/arm64/v8':
context.update({
'board': 'pi4-64',
})

return {
'apt_dependencies': apt_dependencies,
'qt_version': qt_version,
'qt_major_version': qt_major_version,
'webview_git_hash': webview_git_hash,
'webview_base_url': webview_base_url,
'target_platform': target_platform,
**context,
}


Expand Down
Loading