diff --git a/flatpak/io.github.brunoherbelin.Vimix.json b/flatpak/io.github.brunoherbelin.Vimix.json index 1a40476..7e47204 100644 --- a/flatpak/io.github.brunoherbelin.Vimix.json +++ b/flatpak/io.github.brunoherbelin.Vimix.json @@ -59,6 +59,22 @@ } ] }, + { + "name": "x265", + "buildsystem": "cmake-ninja", + "subdir": "source", + "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release", + "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" + ], + "sources": [ + { + "type": "git", + "tag": "3.4", + "url": "https://bitbucket.org/multicoreware/x265_git.git" + } + ] + }, { "name": "srt", "buildsystem": "cmake-ninja", @@ -96,24 +112,25 @@ "buildsystem": "meson", "builddir": true, "config-opts": [ - "-Ddoc=disabled", - "-Dpython=disabled", - "-Dges=disabled", - "-Drs=disabled", - "-Dgst-examples=disabled", - "-Drtsp_server=disabled", - "-Ddevtools=disabled", - "-Dqt5=disabled", - "-Dlibav=enabled", - "-Dbase=enabled", - "-Dgood=enabled", - "-Dgst-plugins-good:v4l2=enabled", - "-Dgpl=enabled", - "-Dbad=enabled", - "-Dgst-plugins-bad:srt=enabled", - "-Dgst-plugins-bad:shm=enabled", - "-Dugly=enabled", - "-Dgst-plugins-ugly:x264=enabled" + "-Ddoc=disabled", + "-Dpython=disabled", + "-Dges=disabled", + "-Drs=disabled", + "-Dgst-examples=disabled", + "-Drtsp_server=disabled", + "-Ddevtools=disabled", + "-Dqt5=disabled", + "-Dlibav=enabled", + "-Dbase=enabled", + "-Dgood=enabled", + "-Dgst-plugins-good:v4l2=enabled", + "-Dgpl=enabled", + "-Dbad=enabled", + "-Dgst-plugins-bad:x265=enabled", + "-Dgst-plugins-bad:srt=enabled", + "-Dgst-plugins-bad:shm=enabled", + "-Dugly=enabled", + "-Dgst-plugins-ugly:x264=enabled" ], "sources": [ { diff --git a/src/VideoBroadcast.cpp b/src/VideoBroadcast.cpp index 9d94ffd..dc54b52 100644 --- a/src/VideoBroadcast.cpp +++ b/src/VideoBroadcast.cpp @@ -29,6 +29,7 @@ #include "Log.h" #include "GstToolkit.h" +#include "Settings.h" #include "VideoBroadcast.h" @@ -47,6 +48,7 @@ std::vector< std::string > srt_sink_alternatives_ { std::vector< std::pair > srt_encoder_alternatives_ { {"nvh264enc", "nvh264enc zerolatency=true rc-mode=cbr-ld-hq bitrate=4000 ! "}, {"vaapih264enc", "vaapih264enc rate-control=cqp init-qp=26 ! "}, + {"vtenc_h264_hw", "vtenc_h264_hw realtime=1 allow-frame-reordering=0 ! "}, {"x264enc", "x264enc tune=zerolatency ! "} }; @@ -67,14 +69,20 @@ bool VideoBroadcast::available() if (!srt_sink_.empty()) { - for (auto config = srt_encoder_alternatives_.cbegin(); - config != srt_encoder_alternatives_.cend() && srt_encoder_.empty(); ++config) { - if ( GstToolkit::has_feature(config->first) ) { - srt_encoder_ = config->second; - if (config->first != srt_encoder_alternatives_.back().first) - Log::Info("Video Broadcast uses hardware-accelerated encoder (%s)", config->first.c_str()); + if (Settings::application.render.gpu_decoding) { + for (auto config = srt_encoder_alternatives_.cbegin(); + config != srt_encoder_alternatives_.cend() && srt_encoder_.empty(); ++config) { + if ( GstToolkit::has_feature(config->first) ) { + srt_encoder_ = config->second; + if (config->first != srt_encoder_alternatives_.back().first) + Log::Info("Video Broadcast uses hardware-accelerated encoder (%s)", config->first.c_str()); + } } } + // disabled hardware accelerated encoding + else { + srt_encoder_ = srt_encoder_alternatives_.back().second; + } } else Log::Info("Video SRT Broadcast not available.");