ホーム › Media.Multimedia › AVICOMPRESSOPTIONS
AVICOMPRESSOPTIONS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| fccType | DWORD | 4 | +0 | +0 | ストリームの種類を示す4文字コード(FOURCC)。映像なら'vids'を指定する。 |
| fccHandler | DWORD | 4 | +4 | +4 | 圧縮に使用するコーデック(ハンドラ)を示す4文字コード。 |
| dwKeyFrameEvery | DWORD | 4 | +8 | +8 | キーフレームを挿入する間隔をフレーム数で指定する。AVICOMPRESSF_KEYFRAMES有効時に使う。 |
| dwQuality | DWORD | 4 | +12 | +12 | 圧縮品質を0~10000の範囲で指定する。値が大きいほど高品質となる。 |
| dwBytesPerSecond | DWORD | 4 | +16 | +16 | データレートを毎秒バイト数で指定する。AVICOMPRESSF_DATARATE有効時に使う。 |
| dwFlags | DWORD | 4 | +20 | +20 | 圧縮オプションのフラグ。AVICOMPRESSF_KEYFRAMES/DATARATE/VALID等のビット組合せ。 |
| lpFormat | void* | 8/4 | +24 | +24 | コーデック固有の出力フォーマット構造体へのポインタ。不要ならNULL可。 |
| cbFormat | DWORD | 4 | +32 | +28 | lpFormatが指すフォーマットデータのバイト数。 |
| lpParms | void* | 8/4 | +40 | +32 | コーデック固有の圧縮パラメータへのポインタ。不要ならNULL可。 |
| cbParms | DWORD | 4 | +48 | +36 | lpParmsが指すパラメータデータのバイト数。 |
| dwInterleaveEvery | DWORD | 4 | +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 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