Improved package support of encoder selection (x265)

This commit is contained in:
Bruno Herbelin
2023-03-25 00:05:16 +01:00
parent 9e2b9d7cf4
commit e192d254f9
2 changed files with 49 additions and 24 deletions

View File

@@ -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": [
{

View File

@@ -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<std::string, std::string> > 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.");