Win32 API 日本語リファレンス
ホームMedia.DirectShow.Tv › KSPROPERTY_BDA_RF_TUNER_CAPS_S

KSPROPERTY_BDA_RF_TUNER_CAPS_S

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

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

フィールド

フィールドサイズx64x86説明
PropertyKSP_NODE16+0+0ノードプロパティ識別子(KSP_NODE)。RFチューナ能力プロパティを示す。
ModeDWORD4+16+16チューナの動作モード。サポートする動作種別を示す。
AnalogStandardsSupportedDWORD4+20+20サポートするアナログ規格のビットマスク。NTSC/PAL等を示す。
DigitalStandardsSupportedDWORD4+24+24サポートするデジタル規格のビットマスク。DVB/ATSC等を示す。
MinFrequencyDWORD4+28+28対応最小周波数(kHz単位)。受信下限を示す。
MaxFrequencyDWORD4+32+32対応最大周波数(kHz単位)。受信上限を示す。
SettlingTimeDWORD4+36+36周波数切替後の整定時間(ミリ秒)。安定までの待機時間を示す。
AnalogSensingRangeDWORD4+40+40アナログ信号検出範囲。感度判定の範囲を示す。
DigitalSensingRangeDWORD4+44+44デジタル信号検出範囲。感度判定の範囲を示す。
MilliSecondsPerMHzDWORD4+48+481MHzあたりのスキャン所要時間(ミリ秒)。走査速度の指標。

各言語での定義

#include <windows.h>

// KSIDENTIFIER  (x64 8 / x86 8 バイト)
typedef struct KSIDENTIFIER {
    _Anonymous_e__Union Anonymous;
} KSIDENTIFIER;

// KSP_NODE  (x64 16 / x86 16 バイト)
typedef struct KSP_NODE {
    KSIDENTIFIER Property;
    DWORD NodeId;
    DWORD Reserved;
} KSP_NODE;

// KSPROPERTY_BDA_RF_TUNER_CAPS_S  (x64 56 / x86 56 バイト)
typedef struct KSPROPERTY_BDA_RF_TUNER_CAPS_S {
    KSP_NODE Property;
    DWORD Mode;
    DWORD AnalogStandardsSupported;
    DWORD DigitalStandardsSupported;
    DWORD MinFrequency;
    DWORD MaxFrequency;
    DWORD SettlingTime;
    DWORD AnalogSensingRange;
    DWORD DigitalSensingRange;
    DWORD MilliSecondsPerMHz;
} KSPROPERTY_BDA_RF_TUNER_CAPS_S;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSIDENTIFIER
{
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSP_NODE
{
    public KSIDENTIFIER Property;
    public uint NodeId;
    public uint Reserved;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSPROPERTY_BDA_RF_TUNER_CAPS_S
{
    public KSP_NODE Property;
    public uint Mode;
    public uint AnalogStandardsSupported;
    public uint DigitalStandardsSupported;
    public uint MinFrequency;
    public uint MaxFrequency;
    public uint SettlingTime;
    public uint AnalogSensingRange;
    public uint DigitalSensingRange;
    public uint MilliSecondsPerMHz;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSIDENTIFIER
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSP_NODE
    Public Property As KSIDENTIFIER
    Public NodeId As UInteger
    Public Reserved As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSPROPERTY_BDA_RF_TUNER_CAPS_S
    Public Property As KSP_NODE
    Public Mode As UInteger
    Public AnalogStandardsSupported As UInteger
    Public DigitalStandardsSupported As UInteger
    Public MinFrequency As UInteger
    Public MaxFrequency As UInteger
    Public SettlingTime As UInteger
    Public AnalogSensingRange As UInteger
    Public DigitalSensingRange As UInteger
    Public MilliSecondsPerMHz As UInteger
End Structure
import ctypes
from ctypes import wintypes

class KSIDENTIFIER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Union),
    ]

class KSP_NODE(ctypes.Structure):
    _fields_ = [
        ("Property", KSIDENTIFIER),
        ("NodeId", wintypes.DWORD),
        ("Reserved", wintypes.DWORD),
    ]

class KSPROPERTY_BDA_RF_TUNER_CAPS_S(ctypes.Structure):
    _fields_ = [
        ("Property", KSP_NODE),
        ("Mode", wintypes.DWORD),
        ("AnalogStandardsSupported", wintypes.DWORD),
        ("DigitalStandardsSupported", wintypes.DWORD),
        ("MinFrequency", wintypes.DWORD),
        ("MaxFrequency", wintypes.DWORD),
        ("SettlingTime", wintypes.DWORD),
        ("AnalogSensingRange", wintypes.DWORD),
        ("DigitalSensingRange", wintypes.DWORD),
        ("MilliSecondsPerMHz", wintypes.DWORD),
    ]
#[repr(C)]
pub struct KSIDENTIFIER {
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct KSP_NODE {
    pub Property: KSIDENTIFIER,
    pub NodeId: u32,
    pub Reserved: u32,
}

#[repr(C)]
pub struct KSPROPERTY_BDA_RF_TUNER_CAPS_S {
    pub Property: KSP_NODE,
    pub Mode: u32,
    pub AnalogStandardsSupported: u32,
    pub DigitalStandardsSupported: u32,
    pub MinFrequency: u32,
    pub MaxFrequency: u32,
    pub SettlingTime: u32,
    pub AnalogSensingRange: u32,
    pub DigitalSensingRange: u32,
    pub MilliSecondsPerMHz: u32,
}
import "golang.org/x/sys/windows"

type KSIDENTIFIER struct {
	Anonymous _Anonymous_e__Union
}

type KSP_NODE struct {
	Property KSIDENTIFIER
	NodeId uint32
	Reserved uint32
}

type KSPROPERTY_BDA_RF_TUNER_CAPS_S struct {
	Property KSP_NODE
	Mode uint32
	AnalogStandardsSupported uint32
	DigitalStandardsSupported uint32
	MinFrequency uint32
	MaxFrequency uint32
	SettlingTime uint32
	AnalogSensingRange uint32
	DigitalSensingRange uint32
	MilliSecondsPerMHz uint32
}
type
  KSIDENTIFIER = record
    Anonymous: _Anonymous_e__Union;
  end;

  KSP_NODE = record
    Property: KSIDENTIFIER;
    NodeId: DWORD;
    Reserved: DWORD;
  end;

  KSPROPERTY_BDA_RF_TUNER_CAPS_S = record
    Property: KSP_NODE;
    Mode: DWORD;
    AnalogStandardsSupported: DWORD;
    DigitalStandardsSupported: DWORD;
    MinFrequency: DWORD;
    MaxFrequency: DWORD;
    SettlingTime: DWORD;
    AnalogSensingRange: DWORD;
    DigitalSensingRange: DWORD;
    MilliSecondsPerMHz: DWORD;
  end;
const KSIDENTIFIER = extern struct {
    Anonymous: _Anonymous_e__Union,
};

const KSP_NODE = extern struct {
    Property: KSIDENTIFIER,
    NodeId: u32,
    Reserved: u32,
};

const KSPROPERTY_BDA_RF_TUNER_CAPS_S = extern struct {
    Property: KSP_NODE,
    Mode: u32,
    AnalogStandardsSupported: u32,
    DigitalStandardsSupported: u32,
    MinFrequency: u32,
    MaxFrequency: u32,
    SettlingTime: u32,
    AnalogSensingRange: u32,
    DigitalSensingRange: u32,
    MilliSecondsPerMHz: u32,
};
type
  KSIDENTIFIER {.bycopy.} = object
    Anonymous: _Anonymous_e__Union

  KSP_NODE {.bycopy.} = object
    Property: KSIDENTIFIER
    NodeId: uint32
    Reserved: uint32

  KSPROPERTY_BDA_RF_TUNER_CAPS_S {.bycopy.} = object
    Property: KSP_NODE
    Mode: uint32
    AnalogStandardsSupported: uint32
    DigitalStandardsSupported: uint32
    MinFrequency: uint32
    MaxFrequency: uint32
    SettlingTime: uint32
    AnalogSensingRange: uint32
    DigitalSensingRange: uint32
    MilliSecondsPerMHz: uint32
struct KSIDENTIFIER
{
    _Anonymous_e__Union Anonymous;
}

struct KSP_NODE
{
    KSIDENTIFIER Property;
    uint NodeId;
    uint Reserved;
}

struct KSPROPERTY_BDA_RF_TUNER_CAPS_S
{
    KSP_NODE Property;
    uint Mode;
    uint AnalogStandardsSupported;
    uint DigitalStandardsSupported;
    uint MinFrequency;
    uint MaxFrequency;
    uint SettlingTime;
    uint AnalogSensingRange;
    uint DigitalSensingRange;
    uint MilliSecondsPerMHz;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSPROPERTY_BDA_RF_TUNER_CAPS_S サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; Property : KSP_NODE (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; Mode : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; AnalogStandardsSupported : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; DigitalStandardsSupported : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; MinFrequency : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; MaxFrequency : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; SettlingTime : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; AnalogSensingRange : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; DigitalSensingRange : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; MilliSecondsPerMHz : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global KSIDENTIFIER
    #field byte Anonymous 8
#endstruct

#defstruct global KSP_NODE
    #field KSIDENTIFIER Property
    #field int NodeId
    #field int Reserved
#endstruct

#defstruct global KSPROPERTY_BDA_RF_TUNER_CAPS_S
    #field KSP_NODE Property
    #field int Mode
    #field int AnalogStandardsSupported
    #field int DigitalStandardsSupported
    #field int MinFrequency
    #field int MaxFrequency
    #field int SettlingTime
    #field int AnalogSensingRange
    #field int DigitalSensingRange
    #field int MilliSecondsPerMHz
#endstruct

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