Browse Source

win-dshow: Fix format switching issue

If the format was one encoded format and changes to another encoded
format, it could cause it to continue to treat it as the old format.
wanhongqing 6 years ago
parent
commit
9b4d9c6788
1 changed files with 6 additions and 0 deletions
  1. 6 0
      plugins/win-dshow/win-dshow.cpp

+ 6 - 0
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