ホーム › Media.Multimedia › AVICOMPRESSOPTIONS
AVICOMPRESSOPTIONS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fccType | DWORD | 4 | +0 | +0 | ストリームの種類を示す 4 文字コードです。AVI ストリームで一般的に使用されるデータについて、次の定数が定義されています。
| ||||||||||
| fccHandler | DWORD | 4 | +4 | +4 | このビデオ ストリームを保存するときに圧縮を行うコンプレッサー ハンドラーの 4 文字コードです (例: mmioFOURCC ('M','S','V','C'))。このメンバーはオーディオ ストリームでは使用されません。 | ||||||||||
| dwKeyFrameEvery | DWORD | 4 | +8 | +8 | ビデオ キー フレーム間の最大間隔です。このメンバーは、AVICOMPRESSF_KEYFRAMES フラグが設定されている場合にのみ使用されます。設定されていない場合は、すべてのビデオ フレームがキー フレームになります。 | ||||||||||
| dwQuality | DWORD | 4 | +12 | +12 | ビデオ コンプレッサーに渡される品質値です。このメンバーはオーディオ コンプレッサーでは使用されません。 | ||||||||||
| dwBytesPerSecond | DWORD | 4 | +16 | +16 | ビデオ コンプレッサーのデータ レートです。このメンバーは、AVICOMPRESSF_DATARATE フラグが設定されている場合にのみ使用されます。 | ||||||||||
| dwFlags | DWORD | 4 | +20 | +20 | 圧縮に使用するフラグです。次の値が定義されています。
| ||||||||||
| lpFormat | void* | 8/4 | +24 | +24 | データ形式を定義する構造体へのポインターです。オーディオ ストリームの場合、これは LPWAVEFORMAT 構造体です。 | ||||||||||
| cbFormat | DWORD | 4 | +32 | +28 | lpFormat が参照するデータのサイズ (バイト単位) です。 | ||||||||||
| lpParms | void* | 8/4 | +40 | +32 | ビデオ コンプレッサー固有のデータです。内部的に使用されます。 | ||||||||||
| cbParms | DWORD | 4 | +48 | +36 | lpParms が参照するデータのサイズ (バイト単位) | ||||||||||
| dwInterleaveEvery | DWORD | 4 | +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)
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 Structureimport 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: uint32struct 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