diff --git a/plugins/win-dshow/win-dshow.cpp b/plugins/win-dshow/win-dshow.cpp index 625093bd0..76418fedb 100644 --- a/plugins/win-dshow/win-dshow.cpp +++ b/plugins/win-dshow/win-dshow.cpp @@ -468,6 +468,12 @@ static inline enum speaker_layout convert_speaker_layout(uint8_t channels) void DShowInput::OnEncodedVideoData(enum AVCodecID id, unsigned char *data, size_t size, long long ts) { + /* If format changes, free and allow it to recreate the decoder */ + if (ffmpeg_decode_valid(video_decoder) && + video_decoder->codec->id != id) { + ffmpeg_decode_free(video_decoder); + } + if (!ffmpeg_decode_valid(video_decoder)) { /* Only use MJPEG hardware decoding on resolutions higher * than 1920x1080. The reason why is because we want to strike