obs-ffmpeg: Preserve error message from new NVENC
If we fallback to ffmpeg NVENC, the error from new NVENC might still be present in the encoder structure. Given that this provides a lot more actionable information to the user, let's use it if possible.master
parent
aa97534057
commit
6b441a180c
|
@ -90,27 +90,35 @@ static bool nvenc_init_codec(struct nvenc_encoder *enc)
|
||||||
|
|
||||||
ret = avcodec_open2(enc->context, enc->nvenc, NULL);
|
ret = avcodec_open2(enc->context, enc->nvenc, NULL);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
struct dstr error_message = {0};
|
// if we were a fallback from jim-nvenc, there may already be a
|
||||||
|
// more useful error returned from that, so don't overwrite.
|
||||||
|
// this can be removed if / when ffmpeg fallback is removed.
|
||||||
|
if (!obs_encoder_get_last_error(enc->encoder)) {
|
||||||
|
struct dstr error_message = {0};
|
||||||
|
|
||||||
// special case for common NVENC error
|
// special case for common NVENC error
|
||||||
if (ret == AVERROR_EXTERNAL) {
|
if (ret == AVERROR_EXTERNAL) {
|
||||||
dstr_printf(&error_message,
|
dstr_printf(
|
||||||
"Failed to open NVENC codec: %s\r\n\r\n"
|
&error_message,
|
||||||
"Check your video drivers are up to "
|
"Failed to open NVENC codec: %s\r\n\r\n"
|
||||||
"date. Disable other software that may "
|
"Check your video drivers are up to "
|
||||||
"be using NVENC such as NVIDIA "
|
"date. Disable other software that may "
|
||||||
"ShadowPlay or Windows 10 Game "
|
"be using NVENC such as NVIDIA "
|
||||||
"DVR.",
|
"ShadowPlay or Windows 10 Game "
|
||||||
av_err2str(ret));
|
"DVR.",
|
||||||
} else {
|
av_err2str(ret));
|
||||||
dstr_printf(
|
} else {
|
||||||
&error_message,
|
dstr_printf(
|
||||||
"Failed to open NVENC codec: %s\r\n\r\n"
|
&error_message,
|
||||||
"Please check your video drivers are up to date.",
|
"Failed to open NVENC codec: %s\r\n\r\n"
|
||||||
av_err2str(ret));
|
"Please check your video drivers are up to date.",
|
||||||
|
av_err2str(ret));
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_encoder_set_last_error(enc->encoder,
|
||||||
|
error_message.array);
|
||||||
|
dstr_free(&error_message);
|
||||||
}
|
}
|
||||||
obs_encoder_set_last_error(enc->encoder, error_message.array);
|
|
||||||
dstr_free(&error_message);
|
|
||||||
warn("Failed to open NVENC codec: %s", av_err2str(ret));
|
warn("Failed to open NVENC codec: %s", av_err2str(ret));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue