A light-weight Flutter Engine Embedder for Raspberry Pi that runs without X.

Overview

πŸ“° NEWS

  • The new latest flutter gallery commit for flutter 2.2 is 633be8a
  • There's now a #custom-embedders channel on the flutter discord which you can use if you have any questions regarding flutter-pi or generally, anything related to embedding the engine for which you don't want to open issue about or write an email.

flutter-pi

A light-weight Flutter Engine Embedder for Raspberry Pi. Inspired by https://github.com/chinmaygarde/flutter_from_scratch. Flutter-pi also runs without X11, so you don't need to boot into Raspbian Desktop & have X11 and LXDE load up; just boot into the command-line.

You can now theoretically run every flutter app you want using flutter-pi, including apps using packages & plugins, just that you'd have to build the platform side of the plugins you'd like to use yourself.

The difference between packages and plugins is that packages don't include any native code, they are just pure Dart. Plugins (like the connectivity plugin) include platform-specific code.

πŸ–₯️ Supported Platforms

Although flutter-pi is only tested on a Rasberry Pi 4 2GB, it should work fine on other linux platforms, with the following conditions:

  • support for hardware 3D acceleration. more precisely support for kernel-modesetting (KMS) and the direct rendering infrastructure (DRI)
  • CPU architecture is one of ARMv7, ARMv8, x86 or x86 64bit.

This means flutter-pi won't work on a Pi Zero or Pi 1. A Pi 3 works fine, even the 512MB A+ model, and a Pi 2 should work fine too.

If you encounter issues running flutter-pi on any of the supported platforms listed above, please report them to me and I'll fix them.

πŸ“‘ Contents

  1. Building flutter-pi on the Raspberry Pi
    1.1 Dependencies
    1.2 Compiling
  2. Running your App on the Raspberry Pi
    2.1 Configuring your Raspberry Pi
    2.2 Building the Asset bundle
    2.3 Building the app.so (for running your app in Release/Profile mode)
    2.4 Running your App with flutter-pi
  3. Performance
    3.1 Graphics Performance
    3.2 Touchscreen latency

πŸ›  Building flutter-pi on the Raspberry Pi

  • If you want to update flutter-pi, you check out the latest commit using git pull && git checkout origin/master and continue with compiling, step 2.

Dependencies

  1. Install the flutter engine binaries using the instructions in the in the flutter-engine-binaries-for-arm repo..

    More Info

    flutter-pi needs flutters flutter_embedder.h to compile and icudtl.dat at runtime. It also needs libflutter_engine.so.release at runtime when invoked with the --release flag and libflutter_engine.so.debug when invoked without. You actually have two options here:

    • you build the engine yourself. takes a lot of time, and it most probably won't work on the first try. But once you have it set up, you have unlimited freedom on which engine version you want to use. You can find some rough guidelines here.
    • you can use the pre-built engine binaries I am providing in the flutter-engine-binaries-for-arm repo.. I will only provide binaries for some engine versions though (most likely the stable ones).
  2. Install cmake, graphics, system libraries and fonts:

    sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev ttf-mscorefonts-installer fontconfig libsystemd-dev libinput-dev libudev-dev  libxkbcommon-dev
    More Info
    • flutter-pi needs the mesa OpenGL ES and EGL implementation and libdrm & libgbm. It may work with non-mesa implementations too, but that's untested.
    • The flutter engine depends on the Arial font. Since that doesn't come included with Raspbian, you need to install it.
    • libsystemd is not systemd, it's just an utility library. It provides the event loop and dbus support for flutter-pi.
    • libinput-dev, libudev-dev and libxkbcommon-dev are needed for (touch, mouse, raw keyboard and text) input support.
    • libudev-dev is required, but actual udev is not. Flutter-pi will just open all event devices inside /dev/input (unless overwritten using -i) if udev is not present.
    • gpiod and libgpiod-dev where required in the past, but aren't anymore since the flutter_gpiod plugin will directly access the kernel interface.
  3. Update the system fonts.

    sudo fc-cache

Compiling

  1. Clone flutter-pi and cd into the cloned directory:
    git clone https://github.com/ardera/flutter-pi
    cd flutter-pi
  2. Compile:
    mkdir build && cd build
    cmake ..
    make -j`nproc`
  3. Install:
    sudo make install

πŸš€ Running your App on the Raspberry Pi

Configuring your Raspberry Pi

  1. Open raspi-config:

    sudo raspi-config
  2. Switch to console mode: System Options -> Boot / Auto Login and select Console or Console (Autologin).

  3. Enable the V3D graphics driver Advanced Options -> GL Driver -> GL (Fake KMS)

  4. Configure the GPU memory Performance Options -> GPU Memory and enter 64.

  5. Leave raspi-config.

  6. Give the pi permission to use 3D acceleration. (NOTE: potential security hazard. If you don't want to do this, launch flutter-pi using sudo instead.)

    usermod -a -G render pi
  7. Finish and reboot.

More information
  • flutter-pi requires that no other process, like a X11- or wayland-server, is using the video output. So to disable the desktop environment, we boot into console instead.
  • The old broadcom-proprietary GL driver was bugged and not working with flutter, so we have to use the Fake KMS driver.
  • Actually, you can also configure 16MB of GPU memory if you want to. 64MB are needed when you want to use the omxplayer_video_player plugin.
  • pi isn't allowed to directly access the GPU because IIRC this has some privilege escalation bugs. Raspberry Pi has quite a lot of system-critical, not graphics-related stuff running on the GPU. I read somewhere it's easily possible to gain control of the GPU by writing malicious shaders. From there you can gain control of the CPU and thus the linux kernel. So basically the pi user could escalate privileges and become root just by directly accessing the GPU. But maybe this has already been fixed, I'm not sure.

Building the Asset bundle

  • The asset bundle must be built on your development machine. Note that you can't use a Raspberry Pi as your development machine.
  1. Make sure you've installed the flutter SDK. You must use a flutter SDK that's compatible to the installed engine binaries.

    • for the flutter SDK, use flutter stable and keep it up to date.
    • always use the latest available engine binaries

    If you encounter error messages like Invalid kernel binary format version, Invalid SDK hash or Invalid engine hash:

    1. Make sure your flutter SDK is on stable and up to date and your engine binaries are up to date.
    2. If you made sure that's the case and the error still happens, create a new issue.
  2. Open terminal or commandline and cd into your app directory.

  3. flutter build bundle

  4. Deploy the asset bundle to the Raspberry Pi using rsync or scp.

    • Using rsync (available on linux and macOS or on Windows when using WSL)
      rsync -a --info=progress2 ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_apps_flutter_assets
    • Using scp (available on linux, macOS and Windows)
      scp -r ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_apps_flutter_assets

Example

  1. We'll build the asset bundle for flutter_gallery and deploy it using rsync in this example.
git clone https://github.com/flutter/gallery.git flutter_gallery
cd flutter_gallery
git checkout 633be8a
flutter build bundle
rsync -a ./build/flutter_assets/ pi@raspberrypi:/home/pi/flutter_gallery/
  1. Done. You can now run this app in debug-mode using flutter-pi /home/pi/flutter_gallery.
More information
  • flutter_gallery is developed against flutter master. 633be8aa13799bf1215d03a155132025f42c7d07 is currently the latest flutter gallery commit working with flutter stable.

Building the app.so (for running your app in Release/Profile mode)

  • This is done entirely on your development machine as well.
  1. Find out the path to your flutter SDK. For me it's C:\flutter. (I'm on Windows)

  2. Open terminal or commandline and cd into your app directory.

  3. Build the asset bundle.

    flutter build bundle
    
  4. Build the kernel snapshot. (Replace my_app_name with the name of your app)

    C:\flutter\bin\cache\dart-sdk\bin\dart.exe ^
      C:\flutter\bin\cache\dart-sdk\bin\snapshots\frontend_server.dart.snapshot ^
      --sdk-root C:\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk_product ^
      --target=flutter ^
      --aot ^
      --tfa ^
      -Ddart.vm.product=true ^
      --packages .packages ^
      --output-dill build\kernel_snapshot.dill ^
      --verbose ^
      --depfile build\kernel_snapshot.d ^
      package:my_app_name/main.dart
  5. Fetch the latest gen_snapshot_linux_x64_release I provide in the engine binaries repo.

  6. The following steps must be executed on a linux x64 machine. If you're on windows, you can use WSL. If you're on macOS, you can use a linux VM.

  7. Build the app.so. If you're building for arm64, you need to omit the --sim-use-hardfp flag.

    gen_snapshot_linux_x64_release \
      --deterministic \
      --snapshot_kind=app-aot-elf \
      --elf=build/flutter_assets/app.so \
      --strip \
      --sim-use-hardfp \
      build/kernel_snapshot.dill
  8. Now you can switch to your normal OS again.

  9. Upload the asset bundle and the app.so to your Raspberry Pi.

    rsync -a --info=progress2 ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_app

    or

    scp -r ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_app
    
  10. You can now launch the app in release mode using flutter-pi --release /home/pi/my_app

Complete example on Windows

  1. We'll build the asset bundle for flutter_gallery and deploy it using rsync in this example.
    git clone https://github.com/flutter/gallery.git flutter_gallery
    git clone --depth 1 https://github.com/ardera/flutter-engine-binaries-for-arm.git engine-binaries
    cd flutter_gallery
    git checkout 633be8a
    flutter build bundle
    C:\flutter\bin\cache\dart-sdk\bin\dart.exe ^
      C:\flutter\bin\cache\dart-sdk\bin\snapshots\frontend_server.dart.snapshot ^
      --sdk-root C:\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk_product ^
      --target=flutter ^
      --aot ^
      --tfa ^
      -Ddart.vm.product=true ^
      --packages .packages ^
      --output-dill build\kernel_snapshot.dill ^
      --verbose ^
      --depfile build\kernel_snapshot.d ^
      package:gallery/main.dart
    wsl
    ../engine-binaries/arm/gen_snapshot_linux_x64_release \
      --deterministic \
      --snapshot_kind=app-aot-elf \
      --elf=build/flutter_assets/app.so \
      --strip \
      --sim-use-hardfp \
      build/kernel_snapshot.dill
    rsync -a --info=progress2 ./build/flutter_assets/ pi@raspberrypi:/home/pi/flutter_gallery/
    exit
  2. Done. You can now run this app in release mode using flutter-pi --release /home/pi/flutter_gallery.

Running your App with flutter-pi

USAGE:
  flutter-pi [options] <asset bundle path> [flutter engine options]

OPTIONS:
  --release                  Run the app in release mode. The AOT snapshot
                             of the app ("app.so") must be located inside the
                             asset bundle directory.
                             This also requires a libflutter_engine.so that was
                             built with --runtime-mode=release.

  -o, --orientation <orientation>  Start the app in this orientation. Valid
                             for <orientation> are: portrait_up, landscape_left,
                             portrait_down, landscape_right.
                             For more information about this orientation, see
                             the flutter docs for the "DeviceOrientation"
                             enum.
                             Only one of the --orientation and --rotation
                             options can be specified.

  -r, --rotation <degrees>   Start the app with this rotation. This is just an
                             alternative, more intuitive way to specify the
                             startup orientation. The angle is in degrees and
                             clock-wise.
                             Valid values are 0, 90, 180 and 270.

  -d, --dimensions "width_mm,height_mm" The width & height of your display in
                             millimeters. Useful if your GPU doesn't provide
                             valid physical dimensions for your display.
                             The physical dimensions of your display are used
                             to calculate the flutter device-pixel-ratio, which
                             in turn basically "scales" the UI.

  -i, --input <glob pattern> Appends all files matching this glob pattern to the
                             list of input (touchscreen, mouse, touchpad,
                             keyboard) devices. Brace and tilde expansion is
                             enabled.
                             Every file that matches this pattern, but is not
                             a valid touchscreen / -pad, mouse or keyboard is
                             silently ignored.
                             If no -i options are given, flutter-pi will try to
                             use all input devices assigned to udev seat0.
                             If that fails, or udev is not installed, flutter-pi
                             will fallback to using all devices matching
                             "/dev/input/event*" as inputs.
                             In most cases, there's no need to specify this
                             option.
                             Note that you need to properly escape each glob
                             pattern you use as a parameter so it isn't
                             implicitly expanded by your shell.

  -h, --help                 Show this help and exit.

EXAMPLES:
  flutter-pi ~/hello_world_app
  flutter-pi --release ~/hello_world_app
  flutter-pi -o portrait_up ./my_app
  flutter-pi -r 90 ./my_app
  flutter-pi -d "155, 86" ./my_app

SEE ALSO:
  Author:  Hannes Winkler, a.k.a ardera
  Source:  https://github.com/ardera/flutter-pi
  License: MIT

  For instructions on how to build an asset bundle or an AOT snapshot
    of your app, please see the linked git repository.
  For a list of options you can pass to the flutter engine, look here:
    https://github.com/flutter/engine/blob/master/shell/common/switches.h

<asset bundle path> is the path of the flutter asset bundle directory (i.e. the directory containing kernel_blob.bin) of the flutter app you're trying to run.

[flutter engine options...] will be passed as commandline arguments to the flutter engine. You can find a list of commandline options for the flutter engine Here.

πŸ“Š Performance

Graphics Performance

Graphics performance is actually pretty good. With most of the apps inside the flutter SDK -> examples -> catalog directory I get smooth 50-60fps on the Pi 4 2GB and Pi 3 A+.

Touchscreen Latency

Due to the way the touchscreen driver works in raspbian, there's some delta between an actual touch of the touchscreen and a touch event arriving at userspace. The touchscreen driver in the raspbian kernel actually just repeatedly polls some buffer shared with the firmware running on the VideoCore, and the videocore repeatedly polls the touchscreen. (both at 60Hz) So on average, there's a delay of 17ms (minimum 0ms, maximum 34ms). Actually, the firmware is polling correctly at ~60Hz, but the linux driver is not because there's a bug. The linux side actually polls at 25Hz, which makes touch applications look terrible. (When you drag something in a touch application, but the application only gets new touch data at 25Hz, it'll look like the application itself is redrawing at 25Hz, making it look very laggy) The github issue for this raspberry pi kernel bug is here. Leave a like on the issue if you'd like to see this fixed in the kernel.

This is why I created my own (userspace) touchscreen driver, for improved latency & polling rate. See this repo for details. The driver is very easy to use and the difference is noticeable, flutter apps look and feel a lot better with this driver.

Comments
  • With atomic modesetting, flutter-pi can not run on db410c

    With atomic modesetting, flutter-pi can not run on db410c

    I compiled a arm 64 bit version for db410c(qualcomm APQ8016), while with following change

    commit id: 629c0160cbf1d67a1fe6e2572d57d931e48c9a4e atomic modesetting, omxplayer rotation - implement atomic modesetting - make omxplayer satisfy device orientation

    My board can no longer run the flutter-pi. I traced to kernel, looks my board does not support atomic operation.

    it reports [modesetting] Could not commit atomic request. drmModeAtomicCommit: Invalid argument

    Any chance to support the old way of running flutter pi?

    Thanks

    opened by bing-mao 26
  • Raspberry 4 seems to not be supported

    Raspberry 4 seems to not be supported

    Don't know what I'm missing right now. After modifying source code to use card1, downgrading my local flutter to 1.9.1 I still can't see the demo app.

    It seems that app is running, flutter-pi doesn't exit it just stops, but nothing is visible on the monitor. I've checked both HDHMI outputs, also activated fake_KMS, for now I run out of ideas what could be wrong.

    Also seems that flutter engine arguments are not respected, as you can see in the output I'm setting observatory-host, but later on flutter still prints 127.0.0.1 as observatory host.

    Using touchscreen input from /dev/input/event0
    Asset bundle path: /home/pi/flutter-raspberry/flutter_assets/
    engine_argv[0] = /home/pi/flutter-pi/out/flutter-pi
    engine_argv[1] = --observatory-host
    engine_argv[2] = 192.168.0.16
    initializing display...
    Opening DRM device...
    Getting DRM resources...
    Finding a connected connector from 1 available connectors...
      connectors[0]: connected? yes, type: 0x0B (HDMI-A), 340mm x 190mm
    Choosing DRM mode from 26 available modes...
      modes[0]: name: "1366x768", 1366x768p, 60Hz, type: 72, flags: 5
    the chosen DRM mode is preferred by DRM. (DRM_MODE_TYPE_PREFERRED)
    Display properties:
      1366 x 768, 60Hz
      340mm x 190mm
      pixel_ratio = 1.057276
    Finding DRM encoder...
    Creating GBM device
    Querying EGL client extensions...
    Getting EGL display for GBM device...
    Initializing EGL...
    Querying EGL display extensions...
    Using display 18351384 with EGL version 1.4
    ===================================
    EGL information:
      version: 1.4
      vendor: "Mesa Project"
      client extensions: "EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm EGL_MESA_platform_surfaceless EGL_EXT_platform_device"
      display extensions: "EGL_ANDROID_blob_cache EGL_EXT_buffer_age EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_WL_bind_wayland_display "
    ===================================
    Binding OpenGL ES API...
    Choosing EGL config...
    Finding EGL configs with appropriate attributes...
    Creating EGL context...
    Creating EGL window surface...
    ===================================
    OpenGL ES 2.x information:
      version: "OpenGL ES 3.0 Mesa 19.2.0-rc1"
      shading language version: "OpenGL ES GLSL ES 3.00"
      vendor: "Broadcom"
      renderer: "V3D 4.2"
      extensions: "GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_EXT_occlusion_query_boolean GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_integer_mix GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_draw_elements_base_vertex GL_EXT_texture_border_clamp GL_KHR_context_flush_control GL_OES_draw_elements_base_vertex GL_OES_texture_border_clamp GL_OES_texture_stencil8 GL_EXT_float_blend GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_OES_EGL_image_external_essl3 GL_MESA_shader_integer_functions GL_KHR_parallel_shader_compile GL_EXT_texture_query_lod "
    ===================================
    Swapping buffers...
    Locking front buffer...
    getting new framebuffer for BO...
    Setting CRTC...
    Clearing current context...
    finished display setup!
    Initializing Input devices...
    Initializing Application...
    Initializing Plugin Registry...
    Initialized Services plugin.
    [elm327plugin] elm_open: process doesn't have access to serial device "/dev/rfcomm0": No such file or directory
    [elm327plugin] ELM327Plugin_init: ELM327 communication was not initialized successfully. elm327plugin won't supply any OBDII data. error code: No such file or directory
    [elm327plugin] running pid query queue processor
    [ERROR:flutter/shell/platform/embedder/embedder_surface_gl.cc(107)] Could not create a resource context for async texture uploads. Expect degraded performance. Set a valid make_resource_current callback on FlutterOpenGLRendererConfig.
    flutter: Observatory listening on http://127.0.0.1:35297/gARv1zh8gSg=/
    [ERROR:flutter/shell/platform/embedder/embedder_surface_gl.cc(107)] Could not create a resource context for async texture uploads. Expect degraded performance. Set a valid make_resource_current callback on FlutterOpenGLRendererConfig.
    flutter engine successfully started up.
    Running IO thread...
    Sending kAdd 0 to Flutter Engine
    Running message loop...
    Sending kAdd 1 to Flutter Engine
    Sending kAdd 2 to Flutter Engine
    Sending kAdd 3 to Flutter Engine
    Sending kAdd 4 to Flutter Engine
    Sending kAdd 5 to Flutter Engine
    Sending kAdd 6 to Flutter Engine
    Sending kAdd 7 to Flutter Engine
    Sending kAdd 8 to Flutter Engine
    Sending kAdd 9 to Flutter Engine
    
    opened by dluksza 25
  • getting vblank timestamps sometimes fails or results in invalid timestamps

    getting vblank timestamps sometimes fails or results in invalid timestamps

    I am having the same issue as in https://github.com/ardera/flutter-pi/issues/16

    That is, flutter-pi shows a blank screen when I try to start the app when the Pi is connected to this display: https://www.waveshare.com/10.1inch-HDMI-LCD-B-with-case.htm

    Connecting the Raspberry Pi to an hp 1080p monitor, everything works fine, including the touch screen panel from the above Waveshare display, so I can control the app fine by touching the display when I pipe the image to the HP monitor.

    I'm running flutter-pi on Raspberry Pi 4 with the latest version of Raspbian Buster Desktop. I've modified it to boot to command line and then running flutter-pi there. The Waveshare display works otherwise fine, I'm able to for example boot to chromium in kiosk-mode and run a Flutter for Web app on it fine.

    Any ideas how to get the display to work on flutter-pi? My expertise on such hardware issues is limited so it's a bit challenging to troubleshoot this one.

    Here's the log when starting the app from SSH:

    pi@raspberrypi:~/flutter-pi/out $ ./flutter-pi /home/pi/uikit/flutter_assets
    engine_argv[0] = ./flutter-pi
    initializing display...
    Finding a suitable DRM device, since none is given...
    looking for a suitable DRM device from 2 available DRM devices...
      devices[0]:
        available nodes: DRM_NODE_PRIMARY,
        nodes[DRM_NODE_PRIMARY] = "/dev/dri/card1"
        bustype: DRM_BUS_PLATFORM
        businfo.fullname: /soc/gpu
        opening DRM device candidate at "/dev/dri/card1"...
        getting resources of DRM device candidate at "/dev/dri/card1"...
        flutter-pi chose "/dev/dri/card1" as its DRM device.
      devices[1]:
        available nodes: DRM_NODE_PRIMARY, DRM_NODE_RENDER
        nodes[DRM_NODE_PRIMARY] = "/dev/dri/card0"
        nodes[DRM_NODE_RENDER] = "/dev/dri/renderD128"
        bustype: DRM_BUS_PLATFORM
        businfo.fullname: /v3dbus/v3d@7ec04000
    Finding a connected connector from 1 available connectors...
      connectors[0]: connected? yes, type: 0x0B (HDMI-A), 150mm x 100mm
    Choosing DRM mode from 2 available modes...
      modes[0]: name: "1280x800", 1280x800p, 63Hz, type: 72, flags: 10
        this mode is preferred by DRM. (DRM_MODE_TYPE_PREFERRED)
      modes[1]: name: "1280x800", 1280x800p, 60Hz, type: 32, flags: 6
    Display properties:
      1280 x 800, 63Hz
      150mm x 100mm
      pixel_ratio = 2.245614
    Finding DRM encoder...
    Creating GBM device
    Querying EGL client extensions...
    Getting EGL display for GBM device...
    Initializing EGL...
    Querying EGL display extensions...
    Using display 0x5cc538 with EGL version 1.4
    ===================================
    EGL information:
      version: 1.4
      vendor: "Mesa Project"
      client extensions: "EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm EGL_MESA_platform_surfaceless EGL_EXT_platform_device"
      display extensions: "EGL_ANDROID_blob_cache EGL_EXT_buffer_age EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display "
    ===================================
    Binding OpenGL ES API...
    Choosing EGL config...
    Finding EGL configs with appropriate attributes...
    Creating EGL context...
    Creating EGL window surface...
    ===================================
    OpenGL ES information:
      version: "OpenGL ES 3.0 Mesa 19.2.0-rc1"
      shading language version: "OpenGL ES GLSL ES 3.00"
      vendor: "Broadcom"
      renderer: "V3D 4.2"
      extensions: "GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_EXT_occlusion_query_boolean GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_integer_mix GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_draw_elements_base_vertex GL_EXT_texture_border_clamp GL_KHR_context_flush_control GL_OES_draw_elements_base_vertex GL_OES_texture_border_clamp GL_OES_texture_stencil8 GL_EXT_float_blend GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_OES_EGL_image_external_essl3 GL_MESA_shader_integer_functions GL_KHR_parallel_shader_compile GL_EXT_texture_query_lod "
    ===================================
    Swapping buffers...
    Locking front buffer...
    getting new framebuffer for BO...
    Setting CRTC...
    Clearing current context...
    finished display setup!
    Initializing Application...
    Initializing Plugin Registry...
    [services-plugin] init.
    [text_input] init.
    [raw_keyboard] init.
    [test-plugin] init.
    [elm327plugin] elm_open: process doesn't have access to serial device "/dev/rfcomm0": No such file or directory
    [elm327plugin] ELM327Plugin_init: ELM327 communication was not initialized successfully. elm327plugin won't supply any OBDII data. error code: No such file or directory
    [elm327plugin] running pid query queue processor
    [ERROR:engine/src/flutter/shell/platform/embedder/embedder_surface_gl.cc(107)] Could not create a resource context for async texture uploads. Expect degraded performance. Set a valid make_resource_current callback on FlutterOpenGLRendererConfig.
    flutter: Observatory listening on http://127.0.0.1:35431/U7qsOz2kkTw=/
    [ERROR:engine/src/flutter/shell/platform/embedder/embedder_surface_gl.cc(107)] Could not create a resource context for async texture uploads. Expect degraded performance. Set a valid make_resource_current callback on FlutterOpenGLRendererConfig.
    flutter engine successfully started up.
    Initializing Input devices...
      input device 0: path="/dev/input/event0"
          WaveShare WS170120, connected via USB. vendor: 0x0EEF, product: 0x0005, version: 0x0110
    Running IO thread...
    Running message loop...
    
    opened by ekuusi 21
  • Run flutter-pi on i.MX6 CPU

    Run flutter-pi on i.MX6 CPU

    Hello

    I'm trying to get flutter-pi to work in a board called HummingBoard 2 by SolidRun with Freescale i.MX6 processor.

    Flutter-pi starts regularly in debug mode, but in release mode it gives the error "Illegal instruction".

    The i.MX6 is an armv7, exactly like the processor of the Raspberry Pi 3. I have compared the 2 processors with / proc / cpuinfo, and it seems that this processor has a few less features, but they are both ARMv7.

    I compiled the app.so file with a 64 bit linux PC, using the kernel for arm and on the raspberry pi it worked in the past, but on this processor it didn't.

    Can you give me some indication about it?

    Then another thing: at the moment there is no touch screen mounted on this card, and I connected an external HDMI screen. If I connect a mouse, the cursor does not appear and the mouse does not work in any way. Can you give me some indications for this problem too?

    Thank you

    opened by marco-1988 17
  • Memory leak.

    Memory leak.

    Application eat all memory and crash. I look at Observatory. It has 3 isolate and consume 70+40+45 = 155mb The consumption of isolates is always stable and does not grow, but the memory of consumption of the entire process increases. But the process consume 428Mb. And step by step eat memory. image Any idea how to understand what's going on? Before 1.20 and the flutter-pi update it was ok. :(

    opened by DisDis 17
  • Add gstreamer based audioplayers plugin

    Add gstreamer based audioplayers plugin

    This a bit update implementation that we used in our machines. I have a bit of concern on how dispose is supposed to work, but otherwise it is complete

    It unites video and audio into single option as both depend on gstreamer

    CC @laynor

    opened by DoumanAsh 16
  • Render to 3.5inch RPi Display

    Render to 3.5inch RPi Display

    Hi,

    I'm trying to render to a 3.5inch RPi Display but I can't get it working. It's not connected through HDMI but the GPIO pins. Not sure if this makes a difference for flutter-pi? The standard command line output to the display is working well.

    As soon as I plug in another touchscreen via HDMI flutter-pi renders to it just fine.

    A full log is attached at the end.

    I notice some warnings which depend on how I start the app: Command: dev/flutter-pi/build/flutter-pi -d "73.44, 48.96" --release ~/dev/hello_pi/

    [flutter-pi] WARNING: display didn't provide valid physical dimensions. The device-pixel ratio will default to 1.0, which may not be the fitting device-pixel ratio for your display. WARNING: Kernel didn't return a valid vblank timestamp. (timestamp == 0) VSync will be disabled. See https://github.com/ardera/flutter-pi/issues/38 for more info. =================================== display mode: resolution: 1024 x 768 refresh rate: 60Hz physical size: 73mm x 0mm flutter device pixel ratio: 1.000000 =================================== ...

    Command: dev/flutter-pi/build/flutter-pi -d "73, 49" --release ~/dev/hello_pi/

    [flutter-pi] WARNING: display has non-square pixels. Non-square-pixels are not supported by flutter. WARNING: Kernel didn't return a valid vblank timestamp. (timestamp == 0) VSync will be disabled. See https://github.com/ardera/flutter-pi/issues/38 for more info. =================================== display mode: resolution: 1024 x 768 refresh rate: 60Hz physical size: 73mm x 49mm flutter device pixel ratio: 3.691420 ===================================

    Can flutter-pi handle fractional dimensions?

    Also I notice that flutter-pi wants to use 1024 x 768 as resolution where the display only can handle 320 x 480 px. Where to change this?

    Another warning which I get independent from which display I use is this:

    [modesetting] Could not commit atomic request. drmModeAtomicCommit: Device or resource busy [compositor] Non-blocking drmModeAtomicCommit failed with EBUSY. Future drmModeAtomicCommits will be executed blockingly. This may have have an impact on performance.

    The HDMI display works even with this warning.

    It's a PI 4 with 4GB of ram running BUSTER.

    admin@raspberrypi:~ $ uname -a
    Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l GNU/Linux
    

    Any idea what might cause this? Thank you.

    Full log:

    admin@raspberrypi:~ $ sudo dev/flutter-pi/build/flutter-pi -d "73, 49" --release ~/dev/hello_pi/ [flutter-pi] WARNING: display has non-square pixels. Non-square-pixels are not supported by flutter. WARNING: Kernel didn't return a valid vblank timestamp. (timestamp == 0) VSync will be disabled. See https://github.com/ardera/flutter-pi/issues/38 for more info. =================================== display mode: resolution: 1024 x 768 refresh rate: 60Hz physical size: 73mm x 49mm flutter device pixel ratio: 3.691420 =================================== EGL information: version: 1.4 vendor: "Mesa Project" client extensions: "EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm EGL_MESA_platform_surfaceless EGL_EXT_platform_device" display extensions: "EGL_ANDROID_blob_cache EGL_EXT_buffer_age EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display " =================================== OpenGL ES information: version: "OpenGL ES 3.1 Mesa 19.3.2" shading language version: "OpenGL ES GLSL ES 3.10" vendor: "Broadcom" renderer: "V3D 4.2" extensions: "GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_EXT_occlusion_query_boolean GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_draw_elements_base_vertex GL_EXT_primitive_bounding_box GL_EXT_shader_io_blocks GL_EXT_texture_border_clamp GL_EXT_texture_norm16 GL_KHR_context_flush_control GL_NV_image_formats GL_OES_draw_elements_base_vertex GL_OES_primitive_bounding_box GL_OES_shader_io_blocks GL_OES_texture_border_clamp GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_EXT_buffer_storage GL_EXT_float_blend GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_OES_EGL_image_external_essl3 GL_OES_shader_image_atomic GL_MESA_shader_integer_functions GL_KHR_parallel_shader_compile GL_MESA_framebuffer_flip_y GL_EXT_texture_query_lod " =================================== [modesetting] Could not commit atomic request. drmModeAtomicCommit: Device or resource busy [compositor] Non-blocking drmModeAtomicCommit failed with EBUSY. Future drmModeAtomicCommits will be executed blockingly. This may have have an impact on performance.

    opened by fusion44 16
  • [Unclear documentation] libflutter_engine.so: cannot open shared object file: No such file or directory

    [Unclear documentation] libflutter_engine.so: cannot open shared object file: No such file or directory

    I've followed your guideline from README step by step and app was built just fine, but when I run it with flutter-pi --release I get:

    /home/user/flutter_assets/libflutter_engine.so: cannot open shared object file: No such file or directory. Trying to open libflutter_engine.so.release...
    

    Could you please clarify in docs where I can get libflutter_engine.so.release and where to put it?

    Kind regards

    opened by eximius313 15
  • Tearing when using landscape orientation

    Tearing when using landscape orientation

    First of all, thank you for this brilliant project. I've had very minimal issues and the docs are great when first setting up the environment.

    My issue is that when I use an item such as PageViewwith scrollDirection: Axis.horizontal in a landscape orientation, massive tearing occurs

    I start flutter like this: ./flutter-pi/out/flutter-pi -i "/dev/input/event1" -o landscape_right -d "155,86" ./app

    Here is my output

    Output
    [flutter-pi] WARNING: display has non-square pixels. Non-square-pixels are not supported by flutter.
    ===================================
    display mode:
      resolution: 1024 x 600
      refresh rate: 60Hz
      physical size: 155mm x 86mm
      flutter device pixel ratio: 1.738540
    ===================================
    EGL information:
      version: 1.4
      vendor: "Mesa Project"
      client extensions: "EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm EGL_MESA_platform_surfaceless EGL_EXT_platform_device"
      display extensions: "EGL_ANDROID_blob_cache EGL_EXT_buffer_age EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display "
    ===================================
    OpenGL ES information:
      version: "OpenGL ES 3.1 Mesa 19.3.2"
      shading language version: "OpenGL ES GLSL ES 3.10"
      vendor: "Broadcom"
      renderer: "V3D 4.2"
      extensions: "GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_EXT_occlusion_query_boolean GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_draw_elements_base_vertex GL_EXT_primitive_bounding_box GL_EXT_shader_io_blocks GL_EXT_texture_border_clamp GL_EXT_texture_norm16 GL_KHR_context_flush_control GL_NV_image_formats GL_OES_draw_elements_base_vertex GL_OES_primitive_bounding_box GL_OES_shader_io_blocks GL_OES_texture_border_clamp GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_EXT_buffer_storage GL_EXT_float_blend GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_OES_EGL_image_external_essl3 GL_OES_shader_image_atomic GL_MESA_shader_integer_functions GL_KHR_parallel_shader_compile GL_MESA_framebuffer_flip_y GL_EXT_texture_query_lod "
    ===================================
    flutter: Observatory listening on http://127.0.0.1:38633/fxN8LFmXCAE=/
    
    opened by declanwoods 15
  • How to update to 3.0

    How to update to 3.0

    Hello i have been successfuly using flutter-pi with flutter 2.10, i have updated to 3.0 and i get following error during startup.

    Error while initializing the Dart VM: Wrong full snapshot version, expected 'd56742caf7b3b3f4bd2df93a9bbb5503' found '1441d6b13b8623fa7fbf61433abebd31'

    I had pulled latest engine binaries on development machine and called ./install.sh I had called flutter upgrade on development machine. I had pulled latest flutter-pi changes on raspberry os and removed build directory in flutter-pi and called following commands.

    mkdir build && cd build cmake .. make -jnproc sudo make install

    What am i missing?

    Thank you

    opened by kukjevov 12
  • flutter_gallery not running

    flutter_gallery not running

    I followed the wiki but it doesn't work the app.

    `[flutter-pi] WARNING: display didn't provide valid physical dimensions.
                 The device-pixel ratio will default to 1.0, which may not be the fitting device-pixel ratio for your display.
    ===================================
    display mode:
      resolution: 800 x 480
      refresh rate: 59Hz
      physical size: 0mm x 0mm
      flutter device pixel ratio: 1.000000
    ===================================
    EGL information:
      version: 1.4
      vendor: "Mesa Project"
      client extensions: "EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm EGL_MESA_platform_surfaceless EGL_EXT_platform_device"
      display extensions: "EGL_ANDROID_blob_cache EGL_EXT_buffer_age EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display "
    ===================================
    OpenGL ES information:
      version: "OpenGL ES 3.1 Mesa 19.3.2"
      shading language version: "OpenGL ES GLSL ES 3.10"
      vendor: "Broadcom"
      renderer: "V3D 4.2"
      extensions: "GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_EXT_occlusion_query_boolean GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_draw_elements_base_vertex GL_EXT_primitive_bounding_box GL_EXT_shader_io_blocks GL_EXT_texture_border_clamp GL_EXT_texture_norm16 GL_KHR_context_flush_control GL_NV_image_formats GL_OES_draw_elements_base_vertex GL_OES_primitive_bounding_box GL_OES_shader_io_blocks GL_OES_texture_border_clamp GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_EXT_buffer_storage GL_EXT_float_blend GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_OES_EGL_image_external_essl3 GL_OES_shader_image_atomic GL_MESA_shader_integer_functions GL_KHR_parallel_shader_compile GL_MESA_framebuffer_flip_y GL_EXT_texture_query_lod "
    ===================================
    flutter: Observatory listening on http://127.0.0.1:41635/FCWd89l581Y=/
    [modesetting] Could not commit atomic request. drmModeAtomicCommit: Permission denied
    [compositor] Could not present frame. drmModeAtomicCommit: Permission denied
    
    `
    
    opened by kekko7072 12
  • Make use of new `FlutterKeyEvent` API

    Make use of new `FlutterKeyEvent` API

    The embedder API supports a new way for sending key events for quite some time now:

    • https://github.com/flutter/engine/blob/bde8d452466580b9b6230a98008c5c77450c8fd4/shell/platform/embedder/embedder.h#L931-L1000
    • https://github.com/flutter/engine/blob/bde8d452466580b9b6230a98008c5c77450c8fd4/shell/platform/embedder/embedder.h#L2095-L2119

    Support this instead of just the old flutter/keyevent channel, since otherwise the flutter keyboard manager has to synthesize the new HardwareKeyboard-style KeyEvents from the old RawKeyboard-style RawKeyEvents, with a bit of information loss (the produced text characters):

    • https://github.com/flutter/flutter/blob/b938dc13df32cd510844863a66856dd240dc3302/packages/flutter/lib/src/services/hardware_keyboard.dart#L968-L1045
    enhancement 
    opened by ardera 0
  • GStreamer can't open stream RTP

    GStreamer can't open stream RTP

    Hello,

    I have a problem opening an RTP stream in flutter-pi. I am using a RaspberryPI 3B+ (Buster).

    My device is streaming a live camera to rtp://<host-ip>:PORT I correctly installed GStreamer on the Raspberry Pi and used the command:

    $ gst-launch-1.0 udp://<raspberryPi-IP>:PORT ! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 ! rtph264depay ! avdec_h264 ! autovideosink

    GStreamer respond

    Setting pipeline to PAUSED ...
    Pipeline is live and does not need PREROLL ...
    Pipeline is PREROLLED ...
    Setting pipeline to PLAYING ...
    New clock: GstSystemClock
    Redistribute latency...
    Redistribute latency...
    WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstKMSSink:autovideosink0-actual-sink-kms: Pipeline construction is invalid, please add queues.
    Additional debug info:
    ../libs/gst/base/gstbasesink.c(1258): gst_base_sink_query_latency (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstKMSSink:autovideosink0-actual-sink-kms:
    Not enough buffering available for  the processing deadline of 0:00:00.015000000, add enough queues to buffer  0:00:00.015000000 additional data. Shortening processing latency to 0:00:00.000000000.
    WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstKMSSink:autovideosink0-actual-sink-kms: Pipeline construction is invalid, please add queues.
    Additional debug info:
    ../libs/gst/base/gstbasesink.c(1258): gst_base_sink_query_latency (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstKMSSink:autovideosink0-actual-sink-kms:
    Not enough buffering available for  the processing deadline of 0:00:00.015000000, add enough queues to buffer  0:00:00.015000000 additional data. Shortening processing latency to 0:00:00.000000000.
    
    

    and that's work - camera view is showed with minimal latency but that form pipeline for URI in video-player in flutter-pi isn't correct.

    So I try using as URI: udp://<raspberryPi-IP>:PORT or rtp://<raspberryPi-IP>:PORT

    Widget code

      @override
      void initState() {
        super.initState();
        _controller = VideoPlayerController.network("rtp://<raspberryPi-IP>:PORT");
        _controller.addListener(() {
          setState(() {});
        });
        _controller.setLooping(true);
        _controller.initialize().then((_) => setState(() {}));
    
        _controller.play();
      }
    

    but I got error: [gstreamer video_player] Could not fetch duration. (gst_element_query_duration)

    and white screen and displays nothing else. Other elements of the application (like buttons) work. Only the video-player does not show a frame from the camera.

    opened by Progressia 6
  • RawKeyEvent returns incorrect logicalKey

    RawKeyEvent returns incorrect logicalKey

    Hello, I've got so strange behavior with RawKeyboardListener. keyCode is correct, but event.logicalKey.keyLabel returns 8 instead of * and the same for other key events with modifiers.

    I've double-checked my OS and everything is ok in terminal, I've also checked libinput debug-events and it works as expected.

    RawKeyEvent data for both keys:

    Widget code
     RawKeyboardListener(
       focusNode: focusNode,
       child: SizedBox.shrink(),
       onKey: (RawKeyEvent event) {
         if (event is RawKeyDownEvent) {
           debugPrint(event.data.toString());
         }
       },
     )
    

    * (shift+8) RawKeyEventDataLinux#ed7a0(toolkit: GTK, unicodeScalarValues: 56, scanCode: 17, keyCode: 42, modifiers: 1, isDown: true) 8: RawKeyEventDataLinux#85610(toolkit: GTK, unicodeScalarValues: 56, scanCode: 17, keyCode: 56, modifiers: 0, isDown: true)

    raspberry pi 3b+ Flutter 3.0.2 flutter-pi e919e11098dc7c5bcbbe1e0c06334013d5e37ff9 flutter-engine-binaries-for-arm 9eaa027

    opened by mikekosulin 7
  • Mouse no longer visible

    Mouse no longer visible

    I succesfully had Flutter Gallery working on earlier Flutter version (not sure what it was). I updated everything (reinstalled actually) and got 3.3.9 now running.

    Only thing is that the mouse cursor is not visible; it is there as when I click around, items get selected, but it just doesn't appear.

    Is this a known issue and is there a work around?

    Thanks for your aweome work!

    opened by boylenssen 0
  • My Keyboard doesn't work in the Flutter App

    My Keyboard doesn't work in the Flutter App

    I'm running Flutter 3.3.7 on a Raspberry Pi 4 Model B.

    My keyboard input doesn't appear in the Flutter App, only in the terminal and only after I close the flutter app. While I type it doesn't give me any feedback.

    My console when I start the app:

    flutter: The Dart VM service is listening on http://127.0.0.1:45649/sB6MshEPnSg=/
    flutter: IΒ΄m here
    [text_input] warning: flutter requested native autocorrect, whichis not supported by flutter-pi.
    [compositor] GPU does not supported the desired HW plane order.
      Some UI layers may be invisible.
    
    opened by niklasbartsch 1
  • Fetch xkb keyboard layout, model etc from systemd-localed

    Fetch xkb keyboard layout, model etc from systemd-localed

    Instead of reading the XKBMODEL etc from /etc/default/keyboard, talk to the systemd-localed daemon to get that info:

    https://www.freedesktop.org/software/systemd/man/org.freedesktop.locale1.html#

    enhancement 
    opened by ardera 0
Releases(v0.0.1-alpha)
Owner
Hannes Winkler
Hannes Winkler
Experimental embedder for Flutter

NativeShell (Experimental embedder for Flutter) Features Leverages existing Flutter desktop embedder on each platform Unlike Flutter desktop embedders

NativeShell 551 Dec 28, 2022
A Javascript engine to use with flutter. It uses quickjs on Android and JavascriptCore on IOS

Flutter JS plugin A Javascript engine to use with flutter. Now it is using QuickJS on Android through Dart ffi and JavascriptCore on IOS also through

Ábner Oliveira 334 Jan 3, 2023
Yocto meta layer for recipes related to using Google Flutter Engine

meta-flutter Notice: Layer has moved to https://github.com/meta-flutter/meta-flutter. Redirection will be automatic in the next couple of weeks. Yocto

Joel Winarske 46 Dec 4, 2022
Reversi Board with edax, which is the strongest reversi engine.

pedax pedax is Board GUI with edax, which is the strongest reversi program. pedax has 4 features. Mac/Windows/Linux are supported. I distribute on Mac

done 19 Dec 14, 2022
A Dart/Flutter package to register/query/remove URI Schemes without hassle.

protocol_registry Register/query/remove URI Schemes without hassle. Available for Windows and Linux. Installation flutter pub add protocol_registry Us

ZYROUGE 10 Oct 25, 2022
Flutter Installer is an installer for Flutter built with Flutter πŸ’™πŸ˜ŽβœŒ

Flutter Installer Flutter Installer is an installer for Flutter built with Flutter ?? ?? ✌ Flutter and the related logo are trademarks of Google LLC.

Yazeed AlKhalaf 406 Dec 27, 2022
A Flutter package that makes it easy to customize and work with your Flutter desktop app window.

bitsdojo_window A Flutter package that makes it easy to customize and work with your Flutter desktop app window on Windows, macOS and Linux. Watch the

Bits Dojo 607 Jan 4, 2023
Flutter plugin for Flutter desktop(macOS/Linux/Windows) to change window size.

desktop_window Flutter plugin for Flutter desktop(macOS/Linux/Windows) to change window size. Usage import 'package:desktop_window/desktop_window.dart

ChunKoo Park 72 Dec 2, 2022
A Flutter package that makes it easy to customize and work with your Flutter desktop app's system tray.

system_tray A Flutter package that that enables support for system tray menu for desktop flutter apps. on Windows, macOS and Linux. Features: - Modify

AnTler 140 Dec 30, 2022
Fluttern is a web app made with Flutter to list Flutter internships/jobs for the community.

Fluttern Fluttern is a web app made with Flutter to list Flutter internships/jobs for the community. It uses Google Sheet as a backend, simplifying th

Aditya Thakur 3 Jan 5, 2022
Flutter on Windows, MacOS and Linux - based on Flutter Embedding, Go and GLFW.

go-flutter - A package that brings Flutter to the desktop Purpose Flutter allows you to build beautiful native apps on iOS and Android from a single c

null 5.5k Jan 6, 2023
Ubuntu-flutter-plugins - A collection of Flutter plugins and packages for Ubuntu applications.

Flutter plugins for Ubuntu A collection of Flutter plugins and packages for Ubuntu applications. ubuntu_localizations - provides localizations for Flu

Canonical 25 Oct 12, 2022
File picker plugin for Flutter, compatible with mobile (iOS & Android), Web, Desktop (Mac, Linux, Windows) platforms with Flutter Go support.

A package that allows you to use the native file explorer to pick single or multiple files, with extensions filtering support.

Miguel Ruivo 987 Jan 6, 2023
Flutter Community Plus Plugins

Flutter Community Plus Plugins Plus plugins PlusPlugins is a set of Flutter plugins that is developed based on existing Flutter plugins with extra fun

Flutter Community 1.1k Jan 5, 2023
Flutter plugin to store data behind biometric authentication (ie. fingerprint)

biometric_storage Encrypted file store, optionally secured by biometric lock for Android, iOS, MacOS and partial support for Linux, Windows and Web. M

AuthPass 125 Dec 28, 2022
The Chicago widget set for Flutter

Chicago widget library The Chicago widget set is a retro 32-bit desktop design language for Flutter. It was discussed in the Building a desktop design

Todd Volkert 405 Dec 30, 2022
🎞 Flutter media playback, broadcast & recording library for Windows, Linux & macOS. Written in C++ using libVLC & libVLC++. (Both audio & video)

dart_vlc Flutter media playback, broadcast, recording & chromecast library for Windows, Linux & macOS. Written in C++ using libVLC & libVLC++. Install

Hitesh Kumar Saini 417 Dec 29, 2022
Flutter plugins used in Mixin

flutter-plugins This repo contains the source code for Flutter plugins which used in Mixin. Check the packages directory for all plugins. Plugins Plug

Mixin Network 246 Jan 3, 2023
Implements Microsoft's Fluent Design System in Flutter.

fluent_ui Design beautiful native windows apps using Flutter Unofficial implementation of Fluent UI for Flutter. It's written based on the official do

Bruno D'Luka 1.8k Dec 30, 2022