Git Product home page Git Product logo

deflect's Introduction

Deflect

Welcome to Deflect, a C++ library for streaming pixels to other Deflect-based applications, for example Tide. Deflect offers a stable API marked with version 1.0 (for the client part).

Overview

Deflect features overview

Features

Deflect provides the following functionality:

  • Stream pixels to a remote Server from one or multiple sources
  • Stream stereo images from a distributed 3D application
  • Receive input events from the Server and send data to it
  • Transmitted events include keyboard, mouse and multi-point touch gestures
  • Compressed or uncompressed streaming
  • Fast multi-threaded JPEG (de)compression using libjpeg-turbo

DeflectQt (optional) provides the following additional functionality:

  • Create QML applications which render offscreen and stream and receive events via Deflect

The following applications are provided which make use of the streaming API:

  • DesktopStreamer: A small utility that lets you stream your desktop.
  • SimpleStreamer: A simple example to demonstrate streaming of an OpenGL application.
  • QmlStreamer (optional): An offscreen application to stream any given qml file.

Building from source

  git clone --recursive https://github.com/BlueBrain/Deflect.git
  mkdir Deflect/build
  cd Deflect/build
  cmake -GNinja ..
  ninja

ChangeLog

To keep track of the changes between releases check the @ref Changelog.

About

Deflect is a cross-platform library, designed to run on any modern operating system, including all Unix variants. Deflect uses CMake to create a platform-specific build environment. The following platforms and build environments are tested:

  • Linux: Ubuntu 16.04 and RHEL 6 (Makefile, Ninja; x64)
  • Mac OS X: 10.7 - 10.10 (Makefile, Ninja; x86_64)

The latest API documentation can be found on bluebrain.github.io.

Funding & Acknowledgment

The development of this software was supported by funding to the Blue Brain Project, a research center of the École polytechnique fédérale de Lausanne (EPFL), from the Swiss government’s ETH Board of the Swiss Federal Institutes of Technology.

This project has received funding from the European Union’s FP7-ICT programme under Grant Agreement No. 604102 (Human Brain Project RUP).

This project has received funding from the European Union's Horizon 2020 Framework Programme for Research and Innovation under the Specific Grant Agreement No. 720270 (Human Brain Project SGA1).

This project is based upon work supported by the King Abdullah University of Science and Technology (KAUST) Office of Sponsored Research (OSR) under Award No. OSR-2017-CRG6-3438.

License

Deflect is licensed under the LGPL, unless noted otherwise, e.g., for external dependencies. See file LICENSE.txt for the full license. External dependencies are either LGPL or BSD-licensed. See file ACKNOWLEDGEMENTS.txt and AUTHORS.txt for further details.

Copyright (C) 2013-2023 Blue Brain Project/EPFL and King Abdullah University of Science and Technology.

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

deflect's People

Contributors

63n avatar bbpgithubaudit avatar eile avatar favreau avatar jplanasc avatar karjonas avatar nadirrogue avatar ppodhajski avatar ptoharia avatar tribal-tec avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deflect's Issues

Cmake common options not honored

Running CMake with -DCOMMON_WARN_DEPRECATED:BOOL=OFF results in deprecated warnings still failing the build… There is still a -Wall in the build lines.

building self-contained OSX app

I have tried to build a self contained OS X application but I'm not able. Any chance you could provide some basic instructions? Seeing your Travis or Jenkins builds would work too

Thanks
Noel

Usage of deprecated Qt methods

See the following build log:

/tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.cpp: In member function 'void MainWindow::_update()':
/tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.cpp:200:22: error: 'void QTime::start()' is deprecated: Use QElapsedTimer instead [-Werror=deprecated-declarations]
  200 |     _frameTime.start();
      |                      ^
In file included from /gpfs/bbp.cscs.ch/ssd/apps/hpc/jenkins/merge/deploy/external-libraries/2020-07-20/linux-rhel7-x86_64/gcc-9.3.0/qt-5.14.2-ts7jj3x4eq/include/QtCore/QTime:1,
                 from /tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.h:53,
                 from /tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.cpp:41:
/gpfs/bbp.cscs.ch/ssd/apps/hpc/jenkins/merge/deploy/external-libraries/2020-07-20/linux-rhel7-x86_64/gcc-9.3.0/qt-5.14.2-ts7jj3x4eq/include/QtCore/qdatetime.h:228:55: note: declared here
  228 |     QT_DEPRECATED_X("Use QElapsedTimer instead") void start();
      |                                                       ^~~~~
/tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.cpp: In member function 'void MainWindow::_regulateFrameRate()':
/tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.cpp:421:44: error: 'int QTime::elapsed() const' is deprecated: Use QElapsedTimer instead [-Werror=deprecated-declarations]
  421 |     const int elapsed = _frameTime.elapsed();
      |                                            ^
In file included from /gpfs/bbp.cscs.ch/ssd/apps/hpc/jenkins/merge/deploy/external-libraries/2020-07-20/linux-rhel7-x86_64/gcc-9.3.0/qt-5.14.2-ts7jj3x4eq/include/QtCore/QTime:1,
                 from /tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.h:53,
                 from /tmp/matwolf/spack-stage-deflect-1.0.3-7yb4fmqolpo7mzmghhohk7unxz5l6oks/spack-src/apps/DesktopStreamer/MainWindow.cpp:41:
/gpfs/bbp.cscs.ch/ssd/apps/hpc/jenkins/merge/deploy/external-libraries/2020-07-20/linux-rhel7-x86_64/gcc-9.3.0/qt-5.14.2-ts7jj3x4eq/include/QtCore/qdatetime.h:230:54: note: declared here
  230 |     QT_DEPRECATED_X("Use QElapsedTimer instead") int elapsed() const;
      |                                                      ^~~~~~~
cc1plus: all warnings being treated as errors

Would be nice if we could update the API to follow the latest non-deprecated Qt.

Does Deflect not support QT5?

My enviroments is win 8.1 + vs2013. When I use cmake to generate projects , it shows the following:
CMake Warning at d:/bin/cmake/share/cmake-3.0/Modules/FindQt4.cmake:616 (message):
d:/libs/Qt/Qt5.4.1/5.4/msvc2013_64_opengl/bin/qmake.exe reported QT_INSTALL_LIBS as "D:/libs/Qt/Qt5.4.1/5.4/msvc2013_64_opengl/lib" but QtCore could not be found there. Qt is NOT installed correctly for the target build environment.

Does Deflect not support QT5?

QmlStreamer process tap events with a delay

Sometimes, the tap (or the last deflect::Event in the pipeline) is processed only after another event arrives.
This is very problematic for UIs where users need to click on elements.

DesktopStreamer: Improvement for OSX application streaming

From #61:

  • Hidden windows (at the time of launching DesktopStreamer) never appear in the list, even after made visible. (addressed in #97)
  • Fullscreen applications (i.e those on their own "Desktop") are not shown in the list
  • Only the main virtual desktop can be streamed
  • The list of windows is perfectly functional but not yet super nice to navigate, maybe we can try to improve the look and feel later
  • If window hidden (or image size() is 0), don't stream anymore. (addressed in #97)
  • Show mouse cursor only on window below the mouse cursor
  • Added/removed window(s) for an already open app are not shown in the list
  • Apps with more than one window don't stream any image (use case: two X11 windows from vglrun)
  • Hiding, or closing, one of multiple windows of an application leaves a window behind in the list. Closing the full application does not even make it disappear.
  • Clicking in an application window brings it fullscreen, but the click event itself may be lost if the operation is not fast enough.
  • Use deflect::SizeHints to support resize of streamed window(s)
  • Download pixmap in background thread[s] for better performance
  • Only download changed windows
  • Change the UI so it's more intuitive. It's not obvious that there is a 'Stream' button that needs to be clicked after selecting the windows

Read hosts from file

Instead of hardcoding the hosts that the application can connect to into the binary, it would be interesting if they got written to a file inside the Resources folder (I am thinking on the MacOS app).

This way, the file could be modified and there would not be a need to recompile the app.

We could even use your github releases to connect to our wall!

Allow overriding defaultHosts

It would be nice if by setting a variable during build time one could pass it's own list of hosts instead of having to modify the hardcoded values from Deflect/apps/DesktopStreamer/MainWindow.cpp

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.