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 文字コードです。AVI ストリームで一般的に使用されるデータについて、次の定数が定義されています。

定数 説明
streamtypeAUDIO
オーディオ ストリームを示します。
streamtypeMIDI
MIDI ストリームを示します。
streamtypeTEXT
テキスト ストリームを示します。
streamtypeVIDEO
ビデオ ストリームを示します。
fccHandlerDWORD4+4+4このビデオ ストリームを保存するときに圧縮を行うコンプレッサー ハンドラーの 4 文字コードです (例: mmioFOURCC ('M','S','V','C'))。このメンバーはオーディオ ストリームでは使用されません。
dwKeyFrameEveryDWORD4+8+8ビデオ キー フレーム間の最大間隔です。このメンバーは、AVICOMPRESSF_KEYFRAMES フラグが設定されている場合にのみ使用されます。設定されていない場合は、すべてのビデオ フレームがキー フレームになります。
dwQualityDWORD4+12+12ビデオ コンプレッサーに渡される品質値です。このメンバーはオーディオ コンプレッサーでは使用されません。
dwBytesPerSecondDWORD4+16+16ビデオ コンプレッサーのデータ レートです。このメンバーは、AVICOMPRESSF_DATARATE フラグが設定されている場合にのみ使用されます。
dwFlagsDWORD4+20+20

圧縮に使用するフラグです。次の値が定義されています。

名前 説明
AVICOMPRESSF_DATARATE
dwBytesPerSecond で指定されたデータ レートを使用して、このビデオ ストリームを圧縮します。
AVICOMPRESSF_INTERLEAVE
最初のストリームを基準として、dwInterleaveEvery フレームごとにこのストリームをインターリーブします。
AVICOMPRESSF_KEYFRAMES
少なくとも dwKeyFrameEvery フレームごとにキー フレームを配置して、このビデオ ストリームを保存します。既定では、すべてのフレームがキー フレームになります。
AVICOMPRESSF_VALID
この構造体のデータを使用して、AVISaveOptions の既定の圧縮値を設定します。空の構造体が渡され、このフラグが設定されていない場合は、いくつかの既定値が選択されます。
lpFormatvoid*8/4+24+24データ形式を定義する構造体へのポインターです。オーディオ ストリームの場合、これは LPWAVEFORMAT 構造体です。
cbFormatDWORD4+32+28lpFormat が参照するデータのサイズ (バイト単位) です。
lpParmsvoid*8/4+40+32ビデオ コンプレッサー固有のデータです。内部的に使用されます。
cbParmsDWORD4+48+36lpParms が参照するデータのサイズ (バイト単位)
dwInterleaveEveryDWORD4+52+40最初のストリームのデータにこのストリームのデータを分散して配置するためのインターリーブ係数です。AVICOMPRESSF_INTERLEAVE フラグが設定されている場合にのみ使用されます。

公式ドキュメント

AVICOMPRESSOPTIONS 構造体には、ストリームに関する情報と、それがどのように圧縮されて保存されるかに関する情報が含まれます。この構造体は、AVIMakeCompressedStream 関数 (または AVIMakeCompressedStream を使用する AVISave 関数) にデータを渡します。

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

各言語での定義

#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