video: OpenGL rendering of incoming frames

The previous system to display the incoming video frames was relying
on CGImage generation with raw framebuffer which were then set as the
content of the CallView. This way of doing it is not efficient as it
implies buffer copies and is discouraged by Apple for pictures that
change often. Moreover, this process was done by the
VideoReceiveThread from the daemon which was then blocked by those
copies without being able to decode further incoming frames. This is
why a lag was appearing and increasing on high resolution stream.

The new system now isolates frame delivering to the UI and their
rendering. The VideoReceiveThread just update the current frame buffer
and size without copy and another thread send those data to an OpenGL
texture on screen refresh which also enables to automatically skip
frames in case of heavy load.

Change-Id: I0b79ddce66f52a3db1eee19945733ff93e7ce34f
Reviewed-by: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
5 files changed
tree: bff9dc4f75e597fa70faa9b742813334d2a29b2b
  1. .tx/
  2. cmake/
  3. data/
  4. sparkle/
  5. src/
  6. ui/
  7. .gitignore
  8. .gitmodules
  9. .gitreview
  10. CMakeLists.txt
  11. COPYING
  12. Credits.rtf
  13. generate-string.sh
  14. README.md
  15. update-translations.sh
README.md

Ring Mac OSX


This is the official Mac port of Ring.

For more information about the ring project, see the following:

AppCIPackaging
Download from ring.cxBuild StatusBuild Status

Requirements

  • Ring daemon
  • libRingClient (Qt5 version)
  • Qt5 Core
  • Cocoa framework

Build instructions

Build Sparkle framework (optional)

Ring can ship with the Sparkle framework to allow automatic app updates. This can be disabled for your custom build by specifying -DENABLE_SPARKLE=false in the cmake phase.

  1. cd sparkle/
  2. git submodule update
  3. cd Sparkle/
  4. make release
  5. A Finder window will popup in the directory where Sparkle has been built. Copy-paste the Sparkle.framework in sparkle/ in our project, or in /Library/Frameworks on your system.

Build Client

  1. mkdir build && cd build

  2. export CMAKE_PREFIX_PATH=<dir_to_qt5>

Now generate an Xcode project with CMake: 3. cmake ../ -DCMAKE_INSTALL_PREFIX=<libringclient_install_path> -G Xcode 4. open Ring.xcodeproj/ 5. Build and run it from Xcode. You can also generate the final Ring.app bundle.

You can also build it from the command line:

  1. cmake ../ -DCMAKE_INSTALL_PREFIX=<libringclient_install_path>
  2. make
  3. open Ring.app/

If you want to create the final app (self-containing .dmg):

  1. make install
  2. cpack -G DragNDrop Ring

Notes:

By default the client version is specified in CMakeLists.txt but it can be overriden by specifying -DRING_VERSION=<num> in the cmake command line.

You can specify a custom ringtone folder containing audio files (only) with -DRINGTONE_DIR option

Debugging

For now, the build type of the client is "Debug" by default, however it is useful to also have the debug symbols of libRingClient. To do this, specify this when compiling libRingClient with '-DCMAKE_BUILD_TYPE=Debug' in the cmake options.