Forráskód Böngészése

win-dshow: Support HEVC decode

jpark37 3 éve
szülő
commit
7e8b1d90e9

+ 14 - 3
plugins/win-dshow/ffmpeg-decode.c

@@ -18,6 +18,9 @@
 #include "ffmpeg-decode.h"
 #include "obs-ffmpeg-compat.h"
 #include <obs-avc.h>
+#ifdef ENABLE_HEVC
+#include <obs-hevc.h>
+#endif
 
 #if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(58, 4, 100)
 #define USE_NEW_HARDWARE_CODEC_METHOD
@@ -333,9 +336,17 @@ bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
 	packet->size = (int)size;
 	packet->pts = *ts;
 
-	if (decode->codec->id == AV_CODEC_ID_H264 &&
-	    obs_avc_keyframe(data, size))
-		packet->flags |= AV_PKT_FLAG_KEY;
+	switch (decode->codec->id) {
+	case AV_CODEC_ID_H264:
+		if (obs_avc_keyframe(data, size))
+			packet->flags |= AV_PKT_FLAG_KEY;
+#ifdef ENABLE_HEVC
+		break;
+	case AV_CODEC_ID_HEVC:
+		if (obs_hevc_keyframe(data, size))
+			packet->flags |= AV_PKT_FLAG_KEY;
+#endif
+	}
 
 	ret = avcodec_send_packet(decode->decoder, packet);
 	if (ret == 0) {

+ 1 - 1
plugins/win-dshow/libdshowcapture

@@ -1 +1 @@
-Subproject commit 456a0575c38248d3d41412b0eca4701f48ce4c75
+Subproject commit ed02c3541eaf6c61127669882168f7e8b17e3af0

+ 10 - 0
plugins/win-dshow/win-dshow.cpp

@@ -542,6 +542,13 @@ void DShowInput::OnVideoData(const VideoConfig &config, unsigned char *data,
 		return;
 	}
 
+#ifdef ENABLE_HEVC
+	if (videoConfig.format == VideoFormat::HEVC) {
+		OnEncodedVideoData(AV_CODEC_ID_HEVC, data, size, startTime);
+		return;
+	}
+#endif
+
 	if (videoConfig.format == VideoFormat::MJPEG) {
 		OnEncodedVideoData(AV_CODEC_ID_MJPEG, data, size, startTime);
 		return;
@@ -1404,6 +1411,9 @@ static const VideoFormatName videoFormatNames[] = {
 	/* encoded formats */
 	{VideoFormat::MJPEG, "MJPEG"},
 	{VideoFormat::H264, "H264"},
+#ifdef ENABLE_HEVC
+	{VideoFormat::HEVC, "HEVC"},
+#endif
 };
 
 static bool ResTypeChanged(obs_properties_t *props, obs_property_t *p,