diff --git a/plugins/win-dshow/ffmpeg-decode.c b/plugins/win-dshow/ffmpeg-decode.c index 38945472f..bb9506b28 100644 --- a/plugins/win-dshow/ffmpeg-decode.c +++ b/plugins/win-dshow/ffmpeg-decode.c @@ -18,6 +18,9 @@ #include "ffmpeg-decode.h" #include "obs-ffmpeg-compat.h" #include +#ifdef ENABLE_HEVC +#include +#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) { diff --git a/plugins/win-dshow/libdshowcapture b/plugins/win-dshow/libdshowcapture index 456a0575c..ed02c3541 160000 --- a/plugins/win-dshow/libdshowcapture +++ b/plugins/win-dshow/libdshowcapture @@ -1 +1 @@ -Subproject commit 456a0575c38248d3d41412b0eca4701f48ce4c75 +Subproject commit ed02c3541eaf6c61127669882168f7e8b17e3af0 diff --git a/plugins/win-dshow/win-dshow.cpp b/plugins/win-dshow/win-dshow.cpp index 53c36c03d..32a189cf1 100644 --- a/plugins/win-dshow/win-dshow.cpp +++ b/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,