Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › MF_SINK_WRITER_STATISTICS

MF_SINK_WRITER_STATISTICS

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

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

フィールド

フィールドサイズx64x86説明
cbDWORD4+0+0この構造体のバイトサイズ。
llLastTimestampReceivedLONGLONG8+8+8最後に受信したサンプルのタイムスタンプを100ナノ秒単位で示す。
llLastTimestampEncodedLONGLONG8+16+16最後にエンコードしたサンプルのタイムスタンプを100ナノ秒単位で示す。
llLastTimestampProcessedLONGLONG8+24+24最後に処理したサンプルのタイムスタンプを100ナノ秒単位で示す。
llLastStreamTickReceivedLONGLONG8+32+32最後に受信したストリームティックのタイムスタンプを100ナノ秒単位で示す。
llLastSinkSampleRequestLONGLONG8+40+40最後のシンクサンプル要求のタイムスタンプを100ナノ秒単位で示す。
qwNumSamplesReceivedULONGLONG8+48+48受信したサンプルの総数。
qwNumSamplesEncodedULONGLONG8+56+56エンコードしたサンプルの総数。
qwNumSamplesProcessedULONGLONG8+64+64処理したサンプルの総数。
qwNumStreamTicksReceivedULONGLONG8+72+72受信したストリームティックの総数。
dwByteCountQueuedDWORD4+80+80キューに保持されているバイト数。
qwByteCountProcessedULONGLONG8+88+88処理済みの総バイト数。
dwNumOutstandingSinkSampleRequestsDWORD4+96+96未処理のシンクサンプル要求数。
dwAverageSampleRateReceivedDWORD4+100+100受信サンプルの平均レート。
dwAverageSampleRateEncodedDWORD4+104+104エンコードサンプルの平均レート。
dwAverageSampleRateProcessedDWORD4+108+108処理サンプルの平均レート。

各言語での定義

#include <windows.h>

// MF_SINK_WRITER_STATISTICS  (x64 112 / x86 112 バイト)
typedef struct MF_SINK_WRITER_STATISTICS {
    DWORD cb;
    LONGLONG llLastTimestampReceived;
    LONGLONG llLastTimestampEncoded;
    LONGLONG llLastTimestampProcessed;
    LONGLONG llLastStreamTickReceived;
    LONGLONG llLastSinkSampleRequest;
    ULONGLONG qwNumSamplesReceived;
    ULONGLONG qwNumSamplesEncoded;
    ULONGLONG qwNumSamplesProcessed;
    ULONGLONG qwNumStreamTicksReceived;
    DWORD dwByteCountQueued;
    ULONGLONG qwByteCountProcessed;
    DWORD dwNumOutstandingSinkSampleRequests;
    DWORD dwAverageSampleRateReceived;
    DWORD dwAverageSampleRateEncoded;
    DWORD dwAverageSampleRateProcessed;
} MF_SINK_WRITER_STATISTICS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MF_SINK_WRITER_STATISTICS
{
    public uint cb;
    public long llLastTimestampReceived;
    public long llLastTimestampEncoded;
    public long llLastTimestampProcessed;
    public long llLastStreamTickReceived;
    public long llLastSinkSampleRequest;
    public ulong qwNumSamplesReceived;
    public ulong qwNumSamplesEncoded;
    public ulong qwNumSamplesProcessed;
    public ulong qwNumStreamTicksReceived;
    public uint dwByteCountQueued;
    public ulong qwByteCountProcessed;
    public uint dwNumOutstandingSinkSampleRequests;
    public uint dwAverageSampleRateReceived;
    public uint dwAverageSampleRateEncoded;
    public uint dwAverageSampleRateProcessed;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MF_SINK_WRITER_STATISTICS
    Public cb As UInteger
    Public llLastTimestampReceived As Long
    Public llLastTimestampEncoded As Long
    Public llLastTimestampProcessed As Long
    Public llLastStreamTickReceived As Long
    Public llLastSinkSampleRequest As Long
    Public qwNumSamplesReceived As ULong
    Public qwNumSamplesEncoded As ULong
    Public qwNumSamplesProcessed As ULong
    Public qwNumStreamTicksReceived As ULong
    Public dwByteCountQueued As UInteger
    Public qwByteCountProcessed As ULong
    Public dwNumOutstandingSinkSampleRequests As UInteger
    Public dwAverageSampleRateReceived As UInteger
    Public dwAverageSampleRateEncoded As UInteger
    Public dwAverageSampleRateProcessed As UInteger
End Structure
import ctypes
from ctypes import wintypes

class MF_SINK_WRITER_STATISTICS(ctypes.Structure):
    _fields_ = [
        ("cb", wintypes.DWORD),
        ("llLastTimestampReceived", ctypes.c_longlong),
        ("llLastTimestampEncoded", ctypes.c_longlong),
        ("llLastTimestampProcessed", ctypes.c_longlong),
        ("llLastStreamTickReceived", ctypes.c_longlong),
        ("llLastSinkSampleRequest", ctypes.c_longlong),
        ("qwNumSamplesReceived", ctypes.c_ulonglong),
        ("qwNumSamplesEncoded", ctypes.c_ulonglong),
        ("qwNumSamplesProcessed", ctypes.c_ulonglong),
        ("qwNumStreamTicksReceived", ctypes.c_ulonglong),
        ("dwByteCountQueued", wintypes.DWORD),
        ("qwByteCountProcessed", ctypes.c_ulonglong),
        ("dwNumOutstandingSinkSampleRequests", wintypes.DWORD),
        ("dwAverageSampleRateReceived", wintypes.DWORD),
        ("dwAverageSampleRateEncoded", wintypes.DWORD),
        ("dwAverageSampleRateProcessed", wintypes.DWORD),
    ]
#[repr(C)]
pub struct MF_SINK_WRITER_STATISTICS {
    pub cb: u32,
    pub llLastTimestampReceived: i64,
    pub llLastTimestampEncoded: i64,
    pub llLastTimestampProcessed: i64,
    pub llLastStreamTickReceived: i64,
    pub llLastSinkSampleRequest: i64,
    pub qwNumSamplesReceived: u64,
    pub qwNumSamplesEncoded: u64,
    pub qwNumSamplesProcessed: u64,
    pub qwNumStreamTicksReceived: u64,
    pub dwByteCountQueued: u32,
    pub qwByteCountProcessed: u64,
    pub dwNumOutstandingSinkSampleRequests: u32,
    pub dwAverageSampleRateReceived: u32,
    pub dwAverageSampleRateEncoded: u32,
    pub dwAverageSampleRateProcessed: u32,
}
import "golang.org/x/sys/windows"

type MF_SINK_WRITER_STATISTICS struct {
	cb uint32
	llLastTimestampReceived int64
	llLastTimestampEncoded int64
	llLastTimestampProcessed int64
	llLastStreamTickReceived int64
	llLastSinkSampleRequest int64
	qwNumSamplesReceived uint64
	qwNumSamplesEncoded uint64
	qwNumSamplesProcessed uint64
	qwNumStreamTicksReceived uint64
	dwByteCountQueued uint32
	qwByteCountProcessed uint64
	dwNumOutstandingSinkSampleRequests uint32
	dwAverageSampleRateReceived uint32
	dwAverageSampleRateEncoded uint32
	dwAverageSampleRateProcessed uint32
}
type
  MF_SINK_WRITER_STATISTICS = record
    cb: DWORD;
    llLastTimestampReceived: Int64;
    llLastTimestampEncoded: Int64;
    llLastTimestampProcessed: Int64;
    llLastStreamTickReceived: Int64;
    llLastSinkSampleRequest: Int64;
    qwNumSamplesReceived: UInt64;
    qwNumSamplesEncoded: UInt64;
    qwNumSamplesProcessed: UInt64;
    qwNumStreamTicksReceived: UInt64;
    dwByteCountQueued: DWORD;
    qwByteCountProcessed: UInt64;
    dwNumOutstandingSinkSampleRequests: DWORD;
    dwAverageSampleRateReceived: DWORD;
    dwAverageSampleRateEncoded: DWORD;
    dwAverageSampleRateProcessed: DWORD;
  end;
const MF_SINK_WRITER_STATISTICS = extern struct {
    cb: u32,
    llLastTimestampReceived: i64,
    llLastTimestampEncoded: i64,
    llLastTimestampProcessed: i64,
    llLastStreamTickReceived: i64,
    llLastSinkSampleRequest: i64,
    qwNumSamplesReceived: u64,
    qwNumSamplesEncoded: u64,
    qwNumSamplesProcessed: u64,
    qwNumStreamTicksReceived: u64,
    dwByteCountQueued: u32,
    qwByteCountProcessed: u64,
    dwNumOutstandingSinkSampleRequests: u32,
    dwAverageSampleRateReceived: u32,
    dwAverageSampleRateEncoded: u32,
    dwAverageSampleRateProcessed: u32,
};
type
  MF_SINK_WRITER_STATISTICS {.bycopy.} = object
    cb: uint32
    llLastTimestampReceived: int64
    llLastTimestampEncoded: int64
    llLastTimestampProcessed: int64
    llLastStreamTickReceived: int64
    llLastSinkSampleRequest: int64
    qwNumSamplesReceived: uint64
    qwNumSamplesEncoded: uint64
    qwNumSamplesProcessed: uint64
    qwNumStreamTicksReceived: uint64
    dwByteCountQueued: uint32
    qwByteCountProcessed: uint64
    dwNumOutstandingSinkSampleRequests: uint32
    dwAverageSampleRateReceived: uint32
    dwAverageSampleRateEncoded: uint32
    dwAverageSampleRateProcessed: uint32
struct MF_SINK_WRITER_STATISTICS
{
    uint cb;
    long llLastTimestampReceived;
    long llLastTimestampEncoded;
    long llLastTimestampProcessed;
    long llLastStreamTickReceived;
    long llLastSinkSampleRequest;
    ulong qwNumSamplesReceived;
    ulong qwNumSamplesEncoded;
    ulong qwNumSamplesProcessed;
    ulong qwNumStreamTicksReceived;
    uint dwByteCountQueued;
    ulong qwByteCountProcessed;
    uint dwNumOutstandingSinkSampleRequests;
    uint dwAverageSampleRateReceived;
    uint dwAverageSampleRateEncoded;
    uint dwAverageSampleRateProcessed;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MF_SINK_WRITER_STATISTICS サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; llLastTimestampReceived : LONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; llLastTimestampEncoded : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; llLastTimestampProcessed : LONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; llLastStreamTickReceived : LONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; llLastSinkSampleRequest : LONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; qwNumSamplesReceived : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; qwNumSamplesEncoded : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; qwNumSamplesProcessed : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; qwNumStreamTicksReceived : ULONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; dwByteCountQueued : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; qwByteCountProcessed : ULONGLONG (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; dwNumOutstandingSinkSampleRequests : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; dwAverageSampleRateReceived : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; dwAverageSampleRateEncoded : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; dwAverageSampleRateProcessed : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MF_SINK_WRITER_STATISTICS
    #field int cb
    #field int64 llLastTimestampReceived
    #field int64 llLastTimestampEncoded
    #field int64 llLastTimestampProcessed
    #field int64 llLastStreamTickReceived
    #field int64 llLastSinkSampleRequest
    #field int64 qwNumSamplesReceived
    #field int64 qwNumSamplesEncoded
    #field int64 qwNumSamplesProcessed
    #field int64 qwNumStreamTicksReceived
    #field int dwByteCountQueued
    #field int64 qwByteCountProcessed
    #field int dwNumOutstandingSinkSampleRequests
    #field int dwAverageSampleRateReceived
    #field int dwAverageSampleRateEncoded
    #field int dwAverageSampleRateProcessed
#endstruct

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