提交 67587fbc 编写于 作者: J jp9000

win-dshow: Allow use of YV12 video format

Previously, due to a bug in libdshowcapture, the NV12 format was
actually being used for YV12 erroneously, and no actual support for YV12
existed.  This fixes the bug with NV12 and adds support for YV12.
上级 77f0f680
......@@ -13,8 +13,11 @@ set(win-dshow_SOURCES
set(libdshowcapture_SOURCES
libdshowcapture/source/capture-filter.cpp
libdshowcapture/source/output-filter.cpp
libdshowcapture/source/dshowcapture.cpp
libdshowcapture/source/dshowencode.cpp
libdshowcapture/source/device.cpp
libdshowcapture/source/encoder.cpp
libdshowcapture/source/dshow-base.cpp
libdshowcapture/source/dshow-demux.cpp
libdshowcapture/source/dshow-enum.cpp
......@@ -27,7 +30,9 @@ set(libdshowcapture_HEADERS
libdshowcapture/dshowcapture.hpp
libdshowcapture/source/IVideoCaptureFilter.h
libdshowcapture/source/capture-filter.hpp
libdshowcapture/source/output-filter.hpp
libdshowcapture/source/device.hpp
libdshowcapture/source/encoder.hpp
libdshowcapture/source/dshow-base.hpp
libdshowcapture/source/dshow-demux.hpp
libdshowcapture/source/dshow-device-defs.hpp
......
Subproject commit 6b7e8e02c53d0755f55a0901637da709c213bdfe
Subproject commit 020e36d882cb1e1049bde9417591c21ad573ae2c
......@@ -323,6 +323,7 @@ static inline video_format ConvertVideoFormat(VideoFormat format)
case VideoFormat::ARGB: return VIDEO_FORMAT_BGRA;
case VideoFormat::XRGB: return VIDEO_FORMAT_BGRX;
case VideoFormat::I420: return VIDEO_FORMAT_I420;
case VideoFormat::YV12: return VIDEO_FORMAT_I420;
case VideoFormat::NV12: return VIDEO_FORMAT_NV12;
case VideoFormat::YVYU: return VIDEO_FORMAT_YVYU;
case VideoFormat::YUY2: return VIDEO_FORMAT_YUY2;
......@@ -412,6 +413,20 @@ void DShowInput::OnVideoData(const VideoConfig &config,
frame.linesize[1] = cx / 2;
frame.linesize[2] = cx / 2;
} else if (videoConfig.format == VideoFormat::YV12) {
frame.data[0] = data;
frame.data[2] = frame.data[0] + (cx * cy);
frame.data[1] = frame.data[2] + (cx * cy / 4);
frame.linesize[0] = cx;
frame.linesize[1] = cx / 2;
frame.linesize[2] = cx / 2;
} else if (videoConfig.format == VideoFormat::NV12) {
frame.data[0] = data;
frame.data[1] = frame.data[0] + (cx * cy);
frame.linesize[0] = cx;
frame.linesize[1] = cx;
} else {
/* TODO: other formats */
return;
......@@ -960,6 +975,7 @@ static const VideoFormatName videoFormatNames[] = {
/* planar YUV formats */
{VideoFormat::I420, "I420"},
{VideoFormat::NV12, "NV12"},
{VideoFormat::YV12, "YV12"},
/* packed YUV formats */
{VideoFormat::YVYU, "YVYU"},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册