📄 strminfo.cpp
字号:
//==========================================================================;
//
// WDM Video Decoder stream informaition declarations
//
// $Date: 17 Aug 1998 15:00:38 $
// $Revision: 1.0 $
// $Author: Tashjian $
//
// $Copyright: (c) 1997 - 1998 ATI Technologies Inc. All Rights Reserved. $
//
//==========================================================================;
extern "C" {
#include "strmini.h"
#include "ksmedia.h"
}
#include "defaults.h"
#include "mediums.h"
#include "StrmInfo.h"
#include "StrmProp.h"
#include "capdebug.h"
// devine MEDIASUBTYPE_UYVY here... can be removed if someday defined in ksmedia.h
#define STATIC_KSDATAFORMAT_SUBTYPE_UYVY\
0x59565955, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 // MEDIASUBTYPE_UYVY
DEFINE_GUIDSTRUCT("59565955-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_UYVY);
#define KSDATAFORMAT_SUBTYPE_UYVY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_UYVY)
//
// For event handling on the VP stream
//
NTSTATUS STREAMAPI VPStreamEventProc (PHW_EVENT_DESCRIPTOR);
//
// For event handling on the VP VBI stream
//
NTSTATUS STREAMAPI VPVBIStreamEventProc (PHW_EVENT_DESCRIPTOR);
// ------------------------------------------------------------------------
// The master list of all streams supported by this driver
// ------------------------------------------------------------------------
KSEVENT_ITEM VPEventItm[] =
{
{
KSEVENT_VPNOTIFY_FORMATCHANGE,
0,
0,
NULL,
NULL,
NULL
}
};
GUID MY_KSEVENTSETID_VPNOTIFY = {STATIC_KSEVENTSETID_VPNotify};
KSEVENT_SET VPEventSet[] =
{
{
&MY_KSEVENTSETID_VPNOTIFY,
SIZEOF_ARRAY(VPEventItm),
VPEventItm,
}
};
KSEVENT_ITEM VPVBIEventItm[] =
{
{
KSEVENT_VPVBINOTIFY_FORMATCHANGE,
0,
0,
NULL,
NULL,
NULL
}
};
GUID MY_KSEVENTSETID_VPVBINOTIFY = {STATIC_KSEVENTSETID_VPVBINotify};
KSEVENT_SET VPVBIEventSet[] =
{
{
&MY_KSEVENTSETID_VPVBINOTIFY,
SIZEOF_ARRAY(VPVBIEventItm),
VPVBIEventItm,
}
};
//---------------------------------------------------------------------------
// All of the video and vbi data formats we might use
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Capture Stream Formats
//---------------------------------------------------------------------------
KS_DATARANGE_VIDEO StreamFormatUYVY_Capture_NTSC =
{
// KSDATARANGE
{
sizeof(KS_DATARANGE_VIDEO), // FormatSize
0, // Flags
0,//DefWidth * DefHeight * 2, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO, // aka. MEDIATYPE_Video
STATIC_KSDATAFORMAT_SUBTYPE_UYVY, // aka. MEDIASUBTYPE_UYVY
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO // aka. FORMAT_VideoInfo
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
0,//KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO, // GUID
KS_AnalogVideo_NTSC_Mask & ~KS_AnalogVideo_NTSC_433 | KS_AnalogVideo_PAL_60 | KS_AnalogVideo_PAL_M, // AnalogVideoStandard
{
NTSCMaxInWidth, NTSCMaxInHeight // SIZE InputSize
},
{
NTSCMinInWidth, NTSCMinInHeight // SIZE MinCroppingSize; smallest rcSrc cropping rect allowed
},
{
NTSCMaxInWidth, NTSCMaxInHeight // SIZE MaxCroppingSize; largest rcSrc cropping rect allowed
},
2, // int CropGranularityX; // granularity of cropping size
2, // int CropGranularityY;
2, // int CropAlignX; // alignment of cropping rect
2, // int CropAlignY;
{
NTSCMinOutWidth, NTSCMinOutHeight // SIZE MinOutputSize; // smallest bitmap stream can produce
},
{
NTSCMaxOutWidth, NTSCMaxOutHeight // SIZE MaxOutputSize; // largest bitmap stream can produce
},
80, // int OutputGranularityX; // granularity of output bitmap size
60, // int OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
2, // ShrinkTapsX
2, // ShrinkTapsY
(LONGLONG)NTSCFieldDuration, // LONGLONG MinFrameInterval; // 100 nS units
(LONGLONG)NTSCFieldDuration*MAXULONG, // LONGLONG MaxFrameInterval;
NTSCFrameRate * 80 * 40 * 2 * 8, // LONG MinBitsPerSecond;
NTSCFrameRate * 720 * 480 * 2 * 8 // LONG MaxBitsPerSecond;
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource; // The bit we really want to use
0,0,0,0, // RECT rcTarget; // Where the video should go
DefWidth * DefHeight * 2 * NTSCFrameRate, // DWORD dwBitRate; // Approximate bit data rate
0L, // DWORD dwBitErrorRate; // Bit error rate for this stream
// 30 fps
NTSCFieldDuration * 2, // REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)
sizeof(KS_BITMAPINFOHEADER), // DWORD biSize;
DefWidth, // LONG biWidth;
DefHeight, // LONG biHeight;
1, // WORD biPlanes;
16, // WORD biBitCount;
FOURCC_UYVY, // DWORD biCompression;
DefWidth * DefHeight * 2, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
KS_DATARANGE_VIDEO StreamFormatUYVY_Capture_PAL =
{
// KSDATARANGE
{
sizeof(KS_DATARANGE_VIDEO), // FormatSize
0, // Flags
0,//QCIFWidth * QCIFHeight * 2, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO, // aka. MEDIATYPE_Video
STATIC_KSDATAFORMAT_SUBTYPE_UYVY, // aka. MEDIASUBTYPE_UYVY
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO // aka. FORMAT_VideoInfo
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO, // GUID
KS_AnalogVideo_PAL_Mask & ~KS_AnalogVideo_PAL_60 & ~KS_AnalogVideo_PAL_M | KS_AnalogVideo_SECAM_Mask | KS_AnalogVideo_NTSC_433, // AnalogVideoStandard
{
720, 576 // SIZE InputSize
},
{
QCIFWidth, QCIFHeight // SIZE MinCroppingSize; smallest rcSrc cropping rect allowed
},
{
QCIFWidth * 4, QCIFHeight * 4 // SIZE MaxCroppingSize; largest rcSrc cropping rect allowed
},
1, // int CropGranularityX; // granularity of cropping size
1, // int CropGranularityY;
1, // int CropAlignX; // alignment of cropping rect
1, // int CropAlignY;
{
QCIFWidth, QCIFHeight // SIZE MinOutputSize; // smallest bitmap stream can produce
},
{
QCIFWidth * 2, QCIFHeight * 2 // SIZE MaxOutputSize; // largest bitmap stream can produce
},
QCIFWidth, // int OutputGranularityX; // granularity of output bitmap size
QCIFHeight, // int OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
2, // ShrinkTapsX
2, // ShrinkTapsY
(LONGLONG)PALFieldDuration, // LONGLONG MinFrameInterval; // 100 nS units
(LONGLONG)PALFieldDuration*MAXULONG, // LONGLONG MaxFrameInterval;
1 * QCIFWidth * QCIFHeight * 2 * 8, // LONG MinBitsPerSecond;
25 * QCIFWidth * QCIFHeight * 16 * 2 * 8 // LONG MaxBitsPerSecond;
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource; // The bit we really want to use
0,0,0,0, // RECT rcTarget; // Where the video should go
QCIFWidth * 4 * QCIFHeight * 2 * 25L, // DWORD dwBitRate; // Approximate bit data rate
0L, // DWORD dwBitErrorRate; // Bit error rate for this stream
// 30 fps
PALFieldDuration * 2, // REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)
sizeof KS_BITMAPINFOHEADER, // DWORD biSize;
QCIFWidth * 2, // LONG biWidth;
QCIFHeight * 2, // LONG biHeight;
1, // WORD biPlanes;
16, // WORD biBitCount;
FOURCC_UYVY, // DWORD biCompression;
QCIFWidth * QCIFHeight * 2 * 4, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
KS_DATARANGE_VIDEO StreamFormatUYVY_Capture_NTSC_QCIF =
{
// KSDATARANGE
{
sizeof(KS_DATARANGE_VIDEO), // FormatSize
0, // Flags
QCIFWidth * QCIFHeight * 2, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO, // aka. MEDIATYPE_Video
STATIC_KSDATAFORMAT_SUBTYPE_UYVY, // aka. MEDIASUBTYPE_UYVY
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO // aka. FORMAT_VideoInfo
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO, // GUID
KS_AnalogVideo_NTSC_Mask & ~KS_AnalogVideo_NTSC_433 | KS_AnalogVideo_PAL_60 | KS_AnalogVideo_PAL_M, // AnalogVideoStandard
{
NTSCMaxInWidth, NTSCMaxInHeight // SIZE InputSize
},
{
QCIFWidth, QCIFHeight // SIZE MinCroppingSize; smallest rcSrc cropping rect allowed
},
{
QCIFWidth, QCIFHeight // SIZE MaxCroppingSize; largest rcSrc cropping rect allowed
},
1, // int CropGranularityX; // granularity of cropping size
1, // int CropGranularityY;
1, // int CropAlignX; // alignment of cropping rect
1, // int CropAlignY;
{
QCIFWidth, QCIFHeight // SIZE MinOutputSize; // smallest bitmap stream can produce
},
{
QCIFWidth, QCIFHeight // SIZE MaxOutputSize; // largest bitmap stream can produce
},
1, // int OutputGranularityX; // granularity of output bitmap size
1, // int OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
2, // ShrinkTapsX
2, // ShrinkTapsY
(LONGLONG)NTSCFieldDuration, // LONGLONG MinFrameInterval; // 100 nS units
(LONGLONG)NTSCFieldDuration*MAXULONG, // LONGLONG MaxFrameInterval;
1 * QCIFWidth * QCIFHeight * 2 * 8, // LONG MinBitsPerSecond;
30 * QCIFWidth * QCIFHeight * 2 * 8 // LONG MaxBitsPerSecond;
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource; // The bit we really want to use
0,0,0,0, // RECT rcTarget; // Where the video should go
QCIFWidth * QCIFHeight * 2 * 30L, // DWORD dwBitRate; // Approximate bit data rate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -