Skip to content

Commit 9f14b22

Browse files
committed
Fix rate control for hevc with amdvce
1 parent f4cb13a commit 9f14b22

File tree

3 files changed

+35
-11
lines changed

3 files changed

+35
-11
lines changed

sunshine/config.cpp

+29-6
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,22 @@ enum quality_e : int {
9999
_default = 0,
100100
speed,
101101
balanced,
102-
//quality2,
103102
};
104103

105-
enum rc_e : int {
104+
enum class rc_hevc_e : int {
106105
constqp, /**< Constant QP mode */
107106
vbr_latency, /**< Latency Constrained Variable Bitrate */
108107
vbr_peak, /**< Peak Contrained Variable Bitrate */
109108
cbr, /**< Constant bitrate mode */
110109
};
111110

111+
enum class rc_h264_e : int {
112+
constqp, /**< Constant QP mode */
113+
cbr, /**< Constant bitrate mode */
114+
vbr_peak, /**< Peak Contrained Variable Bitrate */
115+
vbr_latency, /**< Latency Constrained Variable Bitrate */
116+
};
117+
112118
enum coder_e : int {
113119
_auto = 0,
114120
cabac,
@@ -120,15 +126,25 @@ std::optional<quality_e> quality_from_view(const std::string_view &quality) {
120126
if(quality == #x##sv) return x
121127
_CONVERT_(speed);
122128
_CONVERT_(balanced);
123-
//_CONVERT_(quality2);
124129
if(quality == "default"sv) return _default;
125130
#undef _CONVERT_
126131
return std::nullopt;
127132
}
128133

129-
std::optional<rc_e> rc_from_view(const std::string_view &rc) {
134+
std::optional<int> rc_h264_from_view(const std::string_view &rc) {
130135
#define _CONVERT_(x) \
131-
if(rc == #x##sv) return x
136+
if(rc == #x##sv) return (int)rc_h264_e::x
137+
_CONVERT_(constqp);
138+
_CONVERT_(vbr_latency);
139+
_CONVERT_(vbr_peak);
140+
_CONVERT_(cbr);
141+
#undef _CONVERT_
142+
return std::nullopt;
143+
}
144+
145+
std::optional<int> rc_hevc_from_view(const std::string_view &rc) {
146+
#define _CONVERT_(x) \
147+
if(rc == #x##sv) return (int)rc_hevc_e::x
132148
_CONVERT_(constqp);
133149
_CONVERT_(vbr_latency);
134150
_CONVERT_(vbr_peak);
@@ -165,6 +181,7 @@ video_t video {
165181
{
166182
amd::balanced,
167183
std::nullopt,
184+
std::nullopt,
168185
-1 }, // amd
169186

170187
{}, // encoder
@@ -659,8 +676,14 @@ void apply_config(std::unordered_map<std::string, std::string> &&vars) {
659676
int_f(vars, "nv_coder", video.nv.coder, nv::coder_from_view);
660677

661678
int_f(vars, "amd_quality", video.amd.quality, amd::quality_from_view);
662-
int_f(vars, "amd_rc", video.amd.rc, amd::rc_from_view);
679+
680+
std::string rc;
681+
string_f(vars, "amd_rc", rc);
663682
int_f(vars, "amd_coder", video.amd.coder, amd::coder_from_view);
683+
if(!rc.empty()) {
684+
video.amd.rc_h264 = amd::rc_h264_from_view(rc);
685+
video.amd.rc_hevc = amd::rc_hevc_from_view(rc);
686+
}
664687

665688
string_f(vars, "encoder", video.encoder);
666689
string_f(vars, "adapter_name", video.adapter_name);

sunshine/config.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ struct video_t {
2929

3030
struct {
3131
std::optional<int> quality;
32-
std::optional<int> rc;
32+
std::optional<int> rc_h264;
33+
std::optional<int> rc_hevc;
3334
int coder;
3435
} amd;
3536

sunshine/video.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -459,19 +459,19 @@ static encoder_t amdvce {
459459
{ "gops_per_idr"s, 30 },
460460
{ "usage"s, "ultralowlatency"s },
461461
{ "quality"s, &config::video.amd.quality },
462-
{ "rc"s, &config::video.amd.rc },
462+
{ "rc"s, &config::video.amd.rc_hevc },
463463
},
464-
std::make_optional<encoder_t::option_t>({ "qp"s, &config::video.qp }),
464+
std::make_optional<encoder_t::option_t>({ "qp_p"s, &config::video.qp }),
465465
"hevc_amf"s,
466466
},
467467
{
468468
{
469469
{ "usage"s, "ultralowlatency"s },
470470
{ "quality"s, &config::video.amd.quality },
471-
{ "rc"s, &config::video.amd.rc },
471+
{ "rc"s, &config::video.amd.rc_h264 },
472472
{ "log_to_dbg"s, "1"s },
473473
},
474-
std::make_optional<encoder_t::option_t>({ "qp"s, &config::video.qp }),
474+
std::make_optional<encoder_t::option_t>({ "qp_p"s, &config::video.qp }),
475475
"h264_amf"s,
476476
},
477477
DEFAULT,

0 commit comments

Comments
 (0)