Win32 API 日本語リファレンス
ホームGraphics.DirectDraw › DDVIDEOPORTCAPS

DDVIDEOPORTCAPS

構造体
サイズx64: 72 バイト / x86: 72 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0構造体のサイズをバイト単位で指定します。
dwFlagsDWORD4+4+4

この構造体のどのメンバーが有効なデータを含んでいるかを指定します。このメンバーには、次の値のビット単位の OR を指定できます。

フラグ 意味
DDVPD_ALIGN
すべてのアライメント関連のメンバーが有効です。これには次のものが含まれます。
dwAlignVideoPortBoundary
dwAlignVideoPortPrescaleWidth
dwAlignVideoPortCropBoundary、および
dwAlignVideoPortCropWidth
DDVPD_AUTOFLIP dwNumAutoFlipSurfaces が有効です。
DDVPD_CAPS dwCaps メンバーが有効です。
DDVPD_FX dwFX メンバーが有効です。
DDVPD_HEIGHT dwMaxHeight メンバーが有効です。
DDVPD_ID dwVideoPortID メンバーが有効です。
DDVPD_WIDTH dwMaxWidth メンバーと dwMaxVBIWidth メンバーが有効です。
dwMaxWidthDWORD4+8+8ハードウェアビデオポートがサポートする最大フィールド幅をピクセル単位で指定します。この値は通常、幅レジスタのビット数によって決まります。
dwMaxVBIWidthDWORD4+12+12ハードウェアビデオポートがサポートする VBI データ 1 行あたりの最大幅を、サンプル数で指定します。ハードウェアビデオポートがオーバーサンプリングされた VBI データをサポートする場合、この値は通常のフィールド幅より大きくなることがあります。
dwMaxHeightDWORD4+16+16ハードウェアビデオポートがサポートする最大フィールド高さをピクセル単位で指定します。この値は通常、高さレジスタのビット数によって決まります。
dwVideoPortIDDWORD4+20+20このエントリのハードウェアビデオポート ID を指定します。このメンバーは、DD_DIRECTDRAW_GLOBAL 構造体の lpDDVideoPortCaps メンバーが指す配列内における、この DDVIDEOPORTCAPS 構造体のインデックス番号にする必要があります。この値の範囲は 0 から (dwMaxVideoPorts - 1) です。(dwMaxVideoPortsDDCORECAPS 構造体のメンバーです。) デバイスがハードウェアビデオポートを 1 つだけサポートする場合、このメンバーは 0 にする必要があります。
dwCapsDWORD4+24+24

このハードウェアビデオポートがサポートする機能を指定するフラグのセットを示します。このメンバーには、次の値のビット単位の OR を指定できます。

フラグ 意味
DDVPCAPS_AUTOFLIP ティアリングを回避するために、フリップを自動的に実行できます。
DDVPCAPS_COLORCONTROL ハードウェアビデオポートは、入力データがフレームバッファーに書き込まれる前に、そのデータに対してカラー操作を実行できます。
DDVPCAPS_INTERLACED ハードウェアビデオポートはインターレースビデオをサポートします。
DDVPCAPS_NONINTERLACED ハードウェアビデオポートはノンインターレースビデオをサポートします。
DDVPCAPS_OVERSAMPLEDVBI ハードウェアビデオポートは、通常のビデオデータとは異なる幅または形式の VBI データを受け入れることができます。
DDVPCAPS_READBACKFIELD デバイスは、インターレース信号の現在のフィールドが偶数か奇数かを示す値を返すことができます。
DDVPCAPS_READBACKLINE デバイスは、フレームバッファーに書き込まれている現在のビデオラインの番号を返すことができます。
DDVPCAPS_SHAREABLE Microsoft DirectDraw では無視されます。
DDVPCAPS_SKIPEVENFIELDS ハードウェアビデオポートは、ビデオの偶数フィールドを自動的に破棄できます。
DDVPCAPS_SKIPODDFIELDS ハードウェアビデオポートは、ビデオの奇数フィールドを自動的に破棄できます。
DDVPCAPS_SYNCMASTER デバイスは、ハードウェアビデオポートドライバーの V-sync でグラフィックスの V-sync を駆動できます。
DDVPCAPS_SYSTEMMEMORY ハードウェアビデオポートは、システムメモリに直接データを書き込むことができます。
DDVPCAPS_VBISURFACE 垂直ブランキング期間内のデータを、別のサーフェスに書き込むことができます。
dwFXDWORD4+28+28

このハードウェアビデオポートがサポートするエフェクトを指定するフラグのセットを示します。このメンバーは、次の値のビット単位の OR です。

フラグ 意味
DDVPFX_CROPTOPDATA ハードウェアビデオポートは、垂直インターバルデータを除去するための限定的なクロップをサポートします。
DDVPFX_CROPX ハードウェアビデオポートは、入力データをサーフェスに書き込む前に x 方向にクロップできます。
DDVPFX_CROPY ハードウェアビデオポートは、入力データをサーフェスに書き込む前に y 方向にクロップできます。
DDVPFX_IGNOREVBIXCROP ハードウェアビデオポートは、オーバーサンプリングされた VBI データをクロップする際に、ビデオデータ用の左右のクロップ座標を無視できます。
DDVPFX_INTERLEAVE ハードウェアビデオポートは、メモリ内でインターレースフィールドをインターリーブすることをサポートします。
DDVPFX_MIRRORLEFTRIGHT ハードウェアビデオポートは、ビデオデータをフレームバッファーに書き込む際に左右を反転するミラーリングをサポートします。
DDVPFX_MIRRORUPDOWN ハードウェアビデオポートは、ビデオデータをフレームバッファーに書き込む際に上下を反転するミラーリングをサポートします。
DDVPFX_PRESHRINKX データをサーフェスに書き込む前に、x 方向に任意の倍率で縮小できます。
DDVPFX_PRESHRINKXB データをサーフェスに書き込む前に、x 方向に 2 の負のべき乗 (1/2、1/4、1/8 など) で縮小できます。
DDVPFX_PRESHRINKXS データをサーフェスに書き込む前に、x 方向に 1/dwPreshrinkXStep 刻みで縮小できます。
DDVPFX_PRESHRINKY データをサーフェスに書き込む前に、y 方向に任意の倍率で縮小できます。
DDVPFX_PRESHRINKYB データをサーフェスに書き込む前に、y 方向に 2 の負のべき乗 (1/2、1/4、1/8 など) で縮小できます。
DDVPFX_PRESHRINKYS データをサーフェスに書き込む前に、y 方向に 1/dwPreshrinkYStep 刻みで縮小できます。
DDVPFX_PRESTRETCHX データをサーフェスに書き込む前に、x 方向に任意の倍率で拡大できます。
DDVPFX_PRESTRETCHXN データをサーフェスに書き込む前に、x 方向に整数倍で拡大できます。
DDVPFX_PRESTRETCHY データをサーフェスに書き込む前に、y 方向に任意の倍率で拡大できます。
DDVPFX_PRESTRETCHYN データをサーフェスに書き込む前に、y 方向に整数倍で拡大できます。
DDVPFX_VBICONVERT 垂直ブランキング期間内のデータを、残りのビデオデータとは独立して変換できます。
DDVPFX_VBINOSCALE 垂直ブランキング期間内のデータについて、スケーリングを無効にできます。
dwNumAutoFlipSurfacesDWORD4+32+32ハードウェアビデオポートが自動フリップをサポートする場合に、自動フリップチェーンでサポートされるサーフェスの最大数を指定します。ハードウェアビデオポートが自動フリップをサポートしない場合、ドライバーはこのメンバーを 0 に設定する必要があります。
dwAlignVideoPortBoundaryDWORD4+36+36ハードウェアビデオポートをサーフェスの原点に対して x 方向のどこに配置できるかについての、バイト単位のアライメント制限を指定します。
dwAlignVideoPortPrescaleWidthDWORD4+40+40プリスケールを実行する際に、ハードウェアビデオポートのデータの幅として許容される、バイト単位のアライメント制限を指定します。
dwAlignVideoPortCropBoundaryDWORD4+44+44左のクロップ座標に対する、バイト単位のアライメント制限を指定します。
dwAlignVideoPortCropWidthDWORD4+48+48クロップ矩形の幅に対する、バイト単位のアライメント制限を指定します。
dwPreshrinkXStepDWORD4+52+52ハードウェアビデオポートがビデオデータの幅を 1/dwPreshrinkXStep 刻みで縮小できることを示します。このメンバーは、DDVPFX_PRESHRINKXS の機能が指定されている場合にのみ有効です。
dwPreshrinkYStepDWORD4+56+56ハードウェアビデオポートがビデオデータの高さを 1/dwPreshrinkYStep 刻みで縮小できることを示します。このメンバーは、DDVPFX_PRESHRINKYS の機能が指定されている場合にのみ有効です。
dwNumVBIAutoFlipSurfacesDWORD4+60+60ハードウェアビデオポートが自動フリップをサポートする場合に、自動フリップチェーンでサポートされるサーフェスの最大数を指定します。ハードウェアビデオポートが自動フリップをサポートしない場合、ドライバーはこのメンバーを 0 に設定する必要があります。このメンバーは dwNumAutoFlipSurfaces と同じように機能しますが、VBI データを通常のビデオの書き込み先とは別のサーフェスに送信できるデバイスにのみ適用される点が異なります。
dwNumPreferredAutoflipDWORD4+64+64ハードウェアがサポートする、自動フリップ可能なサーフェスの最適な数を指定します。
wNumFilterTapsXWORD2+68+68プリスケーラーが x 方向で使用するタップ数を示します。値 0 はプリスケールなし、値 1 は複製を意味します (以下同様)。
wNumFilterTapsYWORD2+70+70プリスケーラーが y 方向で使用するタップ数を示します。値 0 はプリスケールなし、値 1 は複製を意味します (以下同様)。

公式ドキュメント

DDVIDEOPORTCAPS 構造体は、ハードウェアビデオポートの機能とアライメント制限を記述します。

解説(Remarks)

ドライバーは、GUID_VideoPortCaps GUID を指定して DdGetDriverInfo 関数が呼び出されたときに、DDVIDEOPORTCAPS 構造体で記述される機能を報告します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// DDVIDEOPORTCAPS  (x64 72 / x86 72 バイト)
typedef struct DDVIDEOPORTCAPS {
    DWORD dwSize;
    DWORD dwFlags;
    DWORD dwMaxWidth;
    DWORD dwMaxVBIWidth;
    DWORD dwMaxHeight;
    DWORD dwVideoPortID;
    DWORD dwCaps;
    DWORD dwFX;
    DWORD dwNumAutoFlipSurfaces;
    DWORD dwAlignVideoPortBoundary;
    DWORD dwAlignVideoPortPrescaleWidth;
    DWORD dwAlignVideoPortCropBoundary;
    DWORD dwAlignVideoPortCropWidth;
    DWORD dwPreshrinkXStep;
    DWORD dwPreshrinkYStep;
    DWORD dwNumVBIAutoFlipSurfaces;
    DWORD dwNumPreferredAutoflip;
    WORD wNumFilterTapsX;
    WORD wNumFilterTapsY;
} DDVIDEOPORTCAPS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDVIDEOPORTCAPS
{
    public uint dwSize;
    public uint dwFlags;
    public uint dwMaxWidth;
    public uint dwMaxVBIWidth;
    public uint dwMaxHeight;
    public uint dwVideoPortID;
    public uint dwCaps;
    public uint dwFX;
    public uint dwNumAutoFlipSurfaces;
    public uint dwAlignVideoPortBoundary;
    public uint dwAlignVideoPortPrescaleWidth;
    public uint dwAlignVideoPortCropBoundary;
    public uint dwAlignVideoPortCropWidth;
    public uint dwPreshrinkXStep;
    public uint dwPreshrinkYStep;
    public uint dwNumVBIAutoFlipSurfaces;
    public uint dwNumPreferredAutoflip;
    public ushort wNumFilterTapsX;
    public ushort wNumFilterTapsY;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDVIDEOPORTCAPS
    Public dwSize As UInteger
    Public dwFlags As UInteger
    Public dwMaxWidth As UInteger
    Public dwMaxVBIWidth As UInteger
    Public dwMaxHeight As UInteger
    Public dwVideoPortID As UInteger
    Public dwCaps As UInteger
    Public dwFX As UInteger
    Public dwNumAutoFlipSurfaces As UInteger
    Public dwAlignVideoPortBoundary As UInteger
    Public dwAlignVideoPortPrescaleWidth As UInteger
    Public dwAlignVideoPortCropBoundary As UInteger
    Public dwAlignVideoPortCropWidth As UInteger
    Public dwPreshrinkXStep As UInteger
    Public dwPreshrinkYStep As UInteger
    Public dwNumVBIAutoFlipSurfaces As UInteger
    Public dwNumPreferredAutoflip As UInteger
    Public wNumFilterTapsX As UShort
    Public wNumFilterTapsY As UShort
End Structure
import ctypes
from ctypes import wintypes

class DDVIDEOPORTCAPS(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("dwMaxWidth", wintypes.DWORD),
        ("dwMaxVBIWidth", wintypes.DWORD),
        ("dwMaxHeight", wintypes.DWORD),
        ("dwVideoPortID", wintypes.DWORD),
        ("dwCaps", wintypes.DWORD),
        ("dwFX", wintypes.DWORD),
        ("dwNumAutoFlipSurfaces", wintypes.DWORD),
        ("dwAlignVideoPortBoundary", wintypes.DWORD),
        ("dwAlignVideoPortPrescaleWidth", wintypes.DWORD),
        ("dwAlignVideoPortCropBoundary", wintypes.DWORD),
        ("dwAlignVideoPortCropWidth", wintypes.DWORD),
        ("dwPreshrinkXStep", wintypes.DWORD),
        ("dwPreshrinkYStep", wintypes.DWORD),
        ("dwNumVBIAutoFlipSurfaces", wintypes.DWORD),
        ("dwNumPreferredAutoflip", wintypes.DWORD),
        ("wNumFilterTapsX", ctypes.c_ushort),
        ("wNumFilterTapsY", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct DDVIDEOPORTCAPS {
    pub dwSize: u32,
    pub dwFlags: u32,
    pub dwMaxWidth: u32,
    pub dwMaxVBIWidth: u32,
    pub dwMaxHeight: u32,
    pub dwVideoPortID: u32,
    pub dwCaps: u32,
    pub dwFX: u32,
    pub dwNumAutoFlipSurfaces: u32,
    pub dwAlignVideoPortBoundary: u32,
    pub dwAlignVideoPortPrescaleWidth: u32,
    pub dwAlignVideoPortCropBoundary: u32,
    pub dwAlignVideoPortCropWidth: u32,
    pub dwPreshrinkXStep: u32,
    pub dwPreshrinkYStep: u32,
    pub dwNumVBIAutoFlipSurfaces: u32,
    pub dwNumPreferredAutoflip: u32,
    pub wNumFilterTapsX: u16,
    pub wNumFilterTapsY: u16,
}
import "golang.org/x/sys/windows"

type DDVIDEOPORTCAPS struct {
	dwSize uint32
	dwFlags uint32
	dwMaxWidth uint32
	dwMaxVBIWidth uint32
	dwMaxHeight uint32
	dwVideoPortID uint32
	dwCaps uint32
	dwFX uint32
	dwNumAutoFlipSurfaces uint32
	dwAlignVideoPortBoundary uint32
	dwAlignVideoPortPrescaleWidth uint32
	dwAlignVideoPortCropBoundary uint32
	dwAlignVideoPortCropWidth uint32
	dwPreshrinkXStep uint32
	dwPreshrinkYStep uint32
	dwNumVBIAutoFlipSurfaces uint32
	dwNumPreferredAutoflip uint32
	wNumFilterTapsX uint16
	wNumFilterTapsY uint16
}
type
  DDVIDEOPORTCAPS = record
    dwSize: DWORD;
    dwFlags: DWORD;
    dwMaxWidth: DWORD;
    dwMaxVBIWidth: DWORD;
    dwMaxHeight: DWORD;
    dwVideoPortID: DWORD;
    dwCaps: DWORD;
    dwFX: DWORD;
    dwNumAutoFlipSurfaces: DWORD;
    dwAlignVideoPortBoundary: DWORD;
    dwAlignVideoPortPrescaleWidth: DWORD;
    dwAlignVideoPortCropBoundary: DWORD;
    dwAlignVideoPortCropWidth: DWORD;
    dwPreshrinkXStep: DWORD;
    dwPreshrinkYStep: DWORD;
    dwNumVBIAutoFlipSurfaces: DWORD;
    dwNumPreferredAutoflip: DWORD;
    wNumFilterTapsX: Word;
    wNumFilterTapsY: Word;
  end;
const DDVIDEOPORTCAPS = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwMaxWidth: u32,
    dwMaxVBIWidth: u32,
    dwMaxHeight: u32,
    dwVideoPortID: u32,
    dwCaps: u32,
    dwFX: u32,
    dwNumAutoFlipSurfaces: u32,
    dwAlignVideoPortBoundary: u32,
    dwAlignVideoPortPrescaleWidth: u32,
    dwAlignVideoPortCropBoundary: u32,
    dwAlignVideoPortCropWidth: u32,
    dwPreshrinkXStep: u32,
    dwPreshrinkYStep: u32,
    dwNumVBIAutoFlipSurfaces: u32,
    dwNumPreferredAutoflip: u32,
    wNumFilterTapsX: u16,
    wNumFilterTapsY: u16,
};
type
  DDVIDEOPORTCAPS {.bycopy.} = object
    dwSize: uint32
    dwFlags: uint32
    dwMaxWidth: uint32
    dwMaxVBIWidth: uint32
    dwMaxHeight: uint32
    dwVideoPortID: uint32
    dwCaps: uint32
    dwFX: uint32
    dwNumAutoFlipSurfaces: uint32
    dwAlignVideoPortBoundary: uint32
    dwAlignVideoPortPrescaleWidth: uint32
    dwAlignVideoPortCropBoundary: uint32
    dwAlignVideoPortCropWidth: uint32
    dwPreshrinkXStep: uint32
    dwPreshrinkYStep: uint32
    dwNumVBIAutoFlipSurfaces: uint32
    dwNumPreferredAutoflip: uint32
    wNumFilterTapsX: uint16
    wNumFilterTapsY: uint16
struct DDVIDEOPORTCAPS
{
    uint dwSize;
    uint dwFlags;
    uint dwMaxWidth;
    uint dwMaxVBIWidth;
    uint dwMaxHeight;
    uint dwVideoPortID;
    uint dwCaps;
    uint dwFX;
    uint dwNumAutoFlipSurfaces;
    uint dwAlignVideoPortBoundary;
    uint dwAlignVideoPortPrescaleWidth;
    uint dwAlignVideoPortCropBoundary;
    uint dwAlignVideoPortCropWidth;
    uint dwPreshrinkXStep;
    uint dwPreshrinkYStep;
    uint dwNumVBIAutoFlipSurfaces;
    uint dwNumPreferredAutoflip;
    ushort wNumFilterTapsX;
    ushort wNumFilterTapsY;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDVIDEOPORTCAPS サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwMaxWidth : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwMaxVBIWidth : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwMaxHeight : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwVideoPortID : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwCaps : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwFX : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwNumAutoFlipSurfaces : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwAlignVideoPortBoundary : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwAlignVideoPortPrescaleWidth : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwAlignVideoPortCropBoundary : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwAlignVideoPortCropWidth : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwPreshrinkXStep : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwPreshrinkYStep : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; dwNumVBIAutoFlipSurfaces : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; dwNumPreferredAutoflip : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; wNumFilterTapsX : WORD (+68, 2byte)  wpoke st,68,値  /  値 = wpeek(st,68)
; wNumFilterTapsY : WORD (+70, 2byte)  wpoke st,70,値  /  値 = wpeek(st,70)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DDVIDEOPORTCAPS
    #field int dwSize
    #field int dwFlags
    #field int dwMaxWidth
    #field int dwMaxVBIWidth
    #field int dwMaxHeight
    #field int dwVideoPortID
    #field int dwCaps
    #field int dwFX
    #field int dwNumAutoFlipSurfaces
    #field int dwAlignVideoPortBoundary
    #field int dwAlignVideoPortPrescaleWidth
    #field int dwAlignVideoPortCropBoundary
    #field int dwAlignVideoPortCropWidth
    #field int dwPreshrinkXStep
    #field int dwPreshrinkYStep
    #field int dwNumVBIAutoFlipSurfaces
    #field int dwNumPreferredAutoflip
    #field short wNumFilterTapsX
    #field short wNumFilterTapsY
#endstruct

stdim st, DDVIDEOPORTCAPS        ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize