From fbef1bcf04ee04d8bf580a6641e8a0bbd6c8b989 Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Sun, 7 Sep 2025 15:02:26 -0500 Subject: [PATCH] Protect the video and audio codec name discovery flow, to prevent crash from unknown codecs. --- src/FFmpegWriter.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/FFmpegWriter.cpp b/src/FFmpegWriter.cpp index 79cbc21c..b1feafe3 100644 --- a/src/FFmpegWriter.cpp +++ b/src/FFmpegWriter.cpp @@ -126,17 +126,18 @@ void FFmpegWriter::auto_detect_format() { // Determine what format to use when encoding this output filename oc->oformat = av_guess_format(NULL, path.c_str(), NULL); if (oc->oformat == nullptr) { - throw InvalidFormat( - "Could not deduce output format from file extension.", path); + throw InvalidFormat("Could not deduce output format from file extension.", path); } - // Update video codec name - if (oc->oformat->video_codec != AV_CODEC_ID_NONE && info.has_video) - info.vcodec = avcodec_find_encoder(oc->oformat->video_codec)->name; - - // Update audio codec name - if (oc->oformat->audio_codec != AV_CODEC_ID_NONE && info.has_audio) - info.acodec = avcodec_find_encoder(oc->oformat->audio_codec)->name; + // Update video & audio codec name + if (oc->oformat->video_codec != AV_CODEC_ID_NONE && info.has_video) { + const AVCodec *vcodec = avcodec_find_encoder(oc->oformat->video_codec); + info.vcodec = vcodec ? vcodec->name : std::string(); + } + if (oc->oformat->audio_codec != AV_CODEC_ID_NONE && info.has_audio) { + const AVCodec *acodec = avcodec_find_encoder(oc->oformat->audio_codec); + info.acodec = acodec ? acodec->name : std::string(); + } } // initialize streams