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

AVICOMPRESSOPTIONS

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

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

フィールド

フィールドサイズx64x86説明
fccTypeDWORD4+0+0ストリームの種類を示す4文字コード(FOURCC)。映像なら'vids'を指定する。
fccHandlerDWORD4+4+4圧縮に使用するコーデック(ハンドラ)を示す4文字コード。
dwKeyFrameEveryDWORD4+8+8キーフレームを挿入する間隔をフレーム数で指定する。AVICOMPRESSF_KEYFRAMES有効時に使う。
dwQualityDWORD4+12+12圧縮品質を0~10000の範囲で指定する。値が大きいほど高品質となる。
dwBytesPerSecondDWORD4+16+16データレートを毎秒バイト数で指定する。AVICOMPRESSF_DATARATE有効時に使う。
dwFlagsDWORD4+20+20圧縮オプションのフラグ。AVICOMPRESSF_KEYFRAMES/DATARATE/VALID等のビット組合せ。
lpFormatvoid*8/4+24+24コーデック固有の出力フォーマット構造体へのポインタ。不要ならNULL可。
cbFormatDWORD4+32+28lpFormatが指すフォーマットデータのバイト数。
lpParmsvoid*8/4+40+32コーデック固有の圧縮パラメータへのポインタ。不要ならNULL可。
cbParmsDWORD4+48+36lpParmsが指すパラメータデータのバイト数。
dwInterleaveEveryDWORD4+52+40音声をインターリーブする間隔をフレーム数で指定する。

各言語での定義

#include <windows.h>

// AVICOMPRESSOPTIONS  (x64 56 / x86 44 バイト)
typedef struct AVICOMPRESSOPTIONS {
    DWORD fccType;
    DWORD fccHandler;
    DWORD dwKeyFrameEvery;
    DWORD dwQuality;
    DWORD dwBytesPerSecond;
    DWORD dwFlags;
    void* lpFormat;
    DWORD cbFormat;
    void* lpParms;
    DWORD cbParms;
    DWORD dwInterleaveEvery;
} AVICOMPRESSOPTIONS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AVICOMPRESSOPTIONS
{
    public uint fccType;
    public uint fccHandler;
    public uint dwKeyFrameEvery;
    public uint dwQuality;
    public uint dwBytesPerSecond;
    public uint dwFlags;
    public IntPtr lpFormat;
    public uint cbFormat;
    public IntPtr lpParms;
    public uint cbParms;
    public uint dwInterleaveEvery;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AVICOMPRESSOPTIONS
    Public fccType As UInteger
    Public fccHandler As UInteger
    Public dwKeyFrameEvery As UInteger
    Public dwQuality As UInteger
    Public dwBytesPerSecond As UInteger
    Public dwFlags As UInteger
    Public lpFormat As IntPtr
    Public cbFormat As UInteger
    Public lpParms As IntPtr
    Public cbParms As UInteger
    Public dwInterleaveEvery As UInteger
End Structure
import ctypes
from ctypes import wintypes

class AVICOMPRESSOPTIONS(ctypes.Structure):
    _fields_ = [
        ("fccType", wintypes.DWORD),
        ("fccHandler", wintypes.DWORD),
        ("dwKeyFrameEvery", wintypes.DWORD),
        ("dwQuality", wintypes.DWORD),
        ("dwBytesPerSecond", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("lpFormat", ctypes.c_void_p),
        ("cbFormat", wintypes.DWORD),
        ("lpParms", ctypes.c_void_p),
        ("cbParms", wintypes.DWORD),
        ("dwInterleaveEvery", wintypes.DWORD),
    ]
#[repr(C)]
pub struct AVICOMPRESSOPTIONS {
    pub fccType: u32,
    pub fccHandler: u32,
    pub dwKeyFrameEvery: u32,
    pub dwQuality: u32,
    pub dwBytesPerSecond: u32,
    pub dwFlags: u32,
    pub lpFormat: *mut core::ffi::c_void,
    pub cbFormat: u32,
    pub lpParms: *mut core::ffi::c_void,
    pub cbParms: u32,
    pub dwInterleaveEvery: u32,
}
import "golang.org/x/sys/windows"

type AVICOMPRESSOPTIONS struct {
	fccType uint32
	fccHandler uint32
	dwKeyFrameEvery uint32
	dwQuality uint32
	dwBytesPerSecond uint32
	dwFlags uint32
	lpFormat uintptr
	cbFormat uint32
	lpParms uintptr
	cbParms uint32
	dwInterleaveEvery uint32
}
type
  AVICOMPRESSOPTIONS = record
    fccType: DWORD;
    fccHandler: DWORD;
    dwKeyFrameEvery: DWORD;
    dwQuality: DWORD;
    dwBytesPerSecond: DWORD;
    dwFlags: DWORD;
    lpFormat: Pointer;
    cbFormat: DWORD;
    lpParms: Pointer;
    cbParms: DWORD;
    dwInterleaveEvery: DWORD;
  end;
const AVICOMPRESSOPTIONS = extern struct {
    fccType: u32,
    fccHandler: u32,
    dwKeyFrameEvery: u32,
    dwQuality: u32,
    dwBytesPerSecond: u32,
    dwFlags: u32,
    lpFormat: ?*anyopaque,
    cbFormat: u32,
    lpParms: ?*anyopaque,
    cbParms: u32,
    dwInterleaveEvery: u32,
};
type
  AVICOMPRESSOPTIONS {.bycopy.} = object
    fccType: uint32
    fccHandler: uint32
    dwKeyFrameEvery: uint32
    dwQuality: uint32
    dwBytesPerSecond: uint32
    dwFlags: uint32
    lpFormat: pointer
    cbFormat: uint32
    lpParms: pointer
    cbParms: uint32
    dwInterleaveEvery: uint32
struct AVICOMPRESSOPTIONS
{
    uint fccType;
    uint fccHandler;
    uint dwKeyFrameEvery;
    uint dwQuality;
    uint dwBytesPerSecond;
    uint dwFlags;
    void* lpFormat;
    uint cbFormat;
    void* lpParms;
    uint cbParms;
    uint dwInterleaveEvery;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; AVICOMPRESSOPTIONS サイズ: 44 バイト(x86)
dim st, 11    ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; fccType : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; fccHandler : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwKeyFrameEvery : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwQuality : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwBytesPerSecond : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwFlags : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lpFormat : void* (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; cbFormat : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; lpParms : void* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; cbParms : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwInterleaveEvery : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; AVICOMPRESSOPTIONS サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; fccType : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; fccHandler : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwKeyFrameEvery : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwQuality : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwBytesPerSecond : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwFlags : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lpFormat : void* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; cbFormat : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpParms : void* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; cbParms : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwInterleaveEvery : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global AVICOMPRESSOPTIONS
    #field int fccType
    #field int fccHandler
    #field int dwKeyFrameEvery
    #field int dwQuality
    #field int dwBytesPerSecond
    #field int dwFlags
    #field intptr lpFormat
    #field int cbFormat
    #field intptr lpParms
    #field int cbParms
    #field int dwInterleaveEvery
#endstruct

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