Commits on Source 28

  • Pascal Nowack's avatar
    daemon: Exit, if all backends fail to initialize · 1ae05005
    Pascal Nowack authored
    When gnome-remote-desktop is started, it attempts to initialize the RDP
    and VNC backend, depending on with which backends gnome-remote-desktop
    was built.
    However, if all backends fail to initialize, gnome-remote-desktop will
    still continue to run, despite not being usable.
    This is especially problematic, as the systemd user service still runs
    as if there would be no problem, making it hard to find the cause why a
    connection to the server won't make it.
    
    To get rid of this situation, also check the result of the backend
    initialization.
    If all backends fail, exit the daemon, as there is no reason to
    continue running.
    1ae05005
  • Dudemanguy's avatar
    build: make systemd optional · e284cb0e
    Dudemanguy authored
    e284cb0e
  • Yaron Shahrabani's avatar
    Update Hebrew translation · 36fbd18d
    Yaron Shahrabani authored
    36fbd18d
  • Марко Костић's avatar
    Add Serbian translation · fb7925f5
    Марко Костић authored
    fb7925f5
  • Quentin PAGÈS's avatar
    Update Occitan translation · d150e700
    Quentin PAGÈS authored
    d150e700
  • Alexander Shopov's avatar
    Add Bulgarian translation · 605b1636
    Alexander Shopov authored
    605b1636
  • Pascal Nowack's avatar
    rdp-event-queue: Always explicitly use global main context · f70c3381
    Pascal Nowack authored
    All D-Bus operations happen in the main thread, which is unlikely to
    change.
    So, explicitly use the global main context, as the threads default
    GMainContext might not always be the global one.
    f70c3381
  • Pascal Nowack's avatar
    rdp-fuse-clipboard: Always explicitly use global main context · 070c44cc
    Pascal Nowack authored
    While g_main_context_get_thread_default() refers in the context of the
    timeout_reset_source creation to the global main context, this function
    can technically also return a different main context.
    The intention is, however, that the timeout_reset_source always runs on
    the main thread.
    
    Thus, change the main context, to attach the GSource to, to NULL, which
    refers to the global main context.
    070c44cc
  • Pascal Nowack's avatar
    rdp: Get rid of the grd_session_rdp_resize_framebuffer() API · 88529f06
    Pascal Nowack authored
    Currently, when the PipeWire stream parameters of the monitor content
    change, grd_session_rdp_resize_framebuffer() is called.
    However, this call is not necessary and can be delayed right before the
    next graphics update.
    In addition to that, this also allows to easily run do_render() later
    in a different thread, as no order of graphics output buffer resizes
    and frame updates needs to be considered.
    
    So, remove the grd_session_rdp_resize_framebuffer() API from the
    session-rdp header file and make this function private.
    Call this private function then at the beginning of
    grd_session_rdp_take_buffer() to ensure that the graphics output buffer
    is correctly resized.
    88529f06
  • Pascal Nowack's avatar
    rdp: Allow using custom GMainContext for RDPGFX GSources · 1aa0507b
    Pascal Nowack authored
    The usage of a custom GMainContext for all RDPGFX specific GSources is
    a required step in order to be able to run all graphics operations in a
    separate thread.
    1aa0507b
  • Pascal Nowack's avatar
    rdp: Run do_render() as GSourceFunc in custom GMainContext · acd990af
    Pascal Nowack authored
    In order to be able to run all graphics operations in a different
    thread, add a new GSource, which runs do_render() as callback function.
    This GSource will then be attached to a custom GMainContext.
    In a future commit, this custom GMainContext will be the GMainContext
    of the graphics thread.
    acd990af
  • Pascal Nowack's avatar
    rdp-nvenc: Add APIs to push and pop current CUDA context · 1e8f1a2b
    Pascal Nowack authored
    In order to allow CUDA function correctly, the current CUDA context
    needs to be pushed for its calling thread.
    Since all graphics operations will happen in the future in a different
    thread, add APIs to set these threads correctly up.
    1e8f1a2b
  • Pascal Nowack's avatar
    session-rdp: Fix small style issue · c0ae3641
    Pascal Nowack authored
    c0ae3641
  • Pascal Nowack's avatar
    session-rdp: Protect close_session_idle_id with a mutex · d2b7af90
    Pascal Nowack authored
    maybe_queue_close_session_idle() can be called from three different
    threads:
    
    1. The main thread (e.g. when the remote desktop session is stopped
       from the g-s system menu).
    2. The socket thread (most common case) (e.g. when the user closes the
       RDP client)
    3. The RDPGFX thread inside FreeRDP (e.g. when the RDP client uses the
       CapsAdvertise PDU without providing any capability sets.
    
    To avoid race conditions, when queueing the idle source to stop the
    remote desktop session, add a mutex around close_session_idle_id, when
    creating the idle source.
    d2b7af90
  • Pascal Nowack's avatar
    session-rdp: Handle all graphics operations in a separate thread · 0ecacc67
    Pascal Nowack authored
    Currently, all graphics operations happen in the main thread, which
    means that remote input is delayed until the current graphics
    operation, such as encoding frame content for example, is done.
    On very slow servers or with the raw bitmaps path in the legacy path,
    this highly reduces the input responsiveness, as the main thread can
    become fully occupied.
    
    So, run all graphics operations in a separate thread, while the main
    thread takes care of pushing the input events to mutter.
    0ecacc67
  • Pascal Nowack's avatar
    rdp-pipewire-stream: Also clear pending frame, when destroying stream · c3ea5b3c
    Pascal Nowack authored
    Currently, when the PipeWire stream is destroyed, there could still be
    a pending frame, that won't be encoded any more.
    In such case, the frame data is leaked.
    
    So, fix this by freeing the pending frame data, when the stream is
    destroyed.
    c3ea5b3c
  • Pascal Nowack's avatar
    session-rdp: Default to max 60 FPS, when using graphics pipeline · 26e8122f
    Pascal Nowack authored
    With the graphics pipeline, gnome-remote-desktop has a way to control
    to control the encoding rate based on the speed of decoding and
    displaying frames on the client side.
    With the PipeWire stream running at 60 FPS also decreases the frame
    latency between when the frame was rendered by mutter and when
    gnome-remote-desktop can start encoding it.
    A 60 FPS PipeWire stream does not mean that 60 are always reached.
    The maximum FPS is determined by the minimum of the encoding rate in
    gnome-remote-desktop and the frame acknowledge rate of the RDP client.
    26e8122f
  • Pascal Nowack's avatar
    session-rdp: Only signal GCond, when all encode jobs are complete · ad950d44
    Pascal Nowack authored
    Currently, when using the raw bitmaps path, every worker thread in the
    raw bitmaps path signals the GCond for the thread pool once their task
    is done.
    However, this is wasteful, since the only necessary signal here is the
    final one, where the last tile is being encoded.
    
    So, make the signal call conditional. For a FullHD frame this saves
    about 509 unnecessary wakeups of the graphics thread.
    ad950d44
  • Pascal Nowack's avatar
    clipboard-rdp: Always check return value of ConvertFromUnicode · 81a890d2
    Pascal Nowack authored
    Currently, gnome-remote-desktop always assumes that
    ConvertFromUnicode() never fails.
    While this is usually the case, this behaviour should not be assumed by
    default, as on invalid input ConvertFromUnicode() will fail.
    
    So, always check the return value of ConvertFromUnicode(), which
    indicates whether the conversion was successful or not.
    81a890d2
  • Pascal Nowack's avatar
    rdp-fuse-clipboard: Fix small style issue · 3b437f88
    Pascal Nowack authored
    3b437f88
  • Pascal Nowack's avatar
    rdp-fuse-clipboard: Fix potential race when accessing FuseFile path · 17fc830e
    Pascal Nowack authored
    When outputting debug information about which FuseFile is opened, the
    FuseFile path might already be invalid, since the FuseFile could
    already be deleted due to a new clipboard selection.
    While this situation is unlikely to happen, since pasting content and
    copying content would have to happen at the same time, it is in theory
    still possible.
    
    So, duplicate the FuseFile path before unlocking the filesystem mutex.
    This will avoid this situation.
    17fc830e
  • Pascal Nowack's avatar
    rdp-graphics-pipeline: Fix small style issue · ab14761a
    Pascal Nowack authored
    The NVENC include is currently conditional, so put it under the
    unconditional includes.
    ab14761a
  • Pascal Nowack's avatar
    rdp/rdpgfx: Unref surface serial after looking up surface context · 72b75dcd
    Pascal Nowack authored
    The surface context of a surface exists until the surface is deleted
    and all references are cleared.
    
    So, when looking up a the surface context to ack a frame, unref the
    serial afterwards and not before, as otherwise gnome-remote-desktop
    would crash since the surface context might already be deleted, due to
    the already been deleted.
    Currently, gnome-remote-desktop is not able to crash with its current
    architecture here, since only one monitor is screencasted and the GFX
    surface currently exists until the end of the remote desktop session.
    72b75dcd
  • Pascal Nowack's avatar
    rdp-pipewire-stream: Take frame data from pending frame, when needed · 5ff041bd
    Pascal Nowack authored
    Currently, when gnome-remote-desktop receives a new frame update via
    PipeWire and an already pending frame exists, then this frame will be
    replaced.
    However, not every frame contains all data. For example frame n can
    contain both actual frame data and a new mouse pointer bitmap, while
    frame n + 1 might contain only actual frame data.
    In that case, the mouse pointer bitmap update will be omitted.
    
    To prevent this behaviour, take the frame data of the previous frame.
    5ff041bd
  • Pascal Nowack's avatar
    vnc-pipewire-stream: Take frame data from pending frame, when needed · 6ea163eb
    Pascal Nowack authored
    Currently, when gnome-remote-desktop receives a new frame update via
    PipeWire and an already pending frame exists, then this frame will be
    replaced.
    However, not every frame contains all data. For example frame n can
    contain both actual frame data and a new mouse pointer bitmap, while
    frame n + 1 might contain only actual frame data.
    In that case, the mouse pointer bitmap update will be omitted.
    
    To prevent this behaviour, take the frame data of the previous frame.
    6ea163eb
  • Jordi Mas's avatar
    Update Catalan translation · 2567e750
    Jordi Mas authored
    2567e750
  • Jonas Ådahl's avatar
    build: Bump version to 41.1 · f895c2b2
    Jonas Ådahl authored
    f895c2b2
  • Sebastien Bacher's avatar
    New upstream version 41.1 · 71211bc4
    Sebastien Bacher authored
    71211bc4
Loading
Loading