AVIFILEINFOA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dwMaxBytesPerSec | DWORD | 4 | +0 | +0 | AVI ファイルのおおよその最大データレートです。 | ||||||||||
| dwFlags | DWORD | 4 | +4 | +4 | 0 個以上のフラグのビット単位の OR です。次のフラグが定義されています: | ||||||||||
| dwCaps | DWORD | 4 | +8 | +8 | 機能フラグです。次のフラグが定義されています:
| ||||||||||
| dwStreams | DWORD | 4 | +12 | +12 | ファイル内のストリームの数です。たとえば、オーディオとビデオを含むファイルには、少なくとも 2 つのストリームがあります。 | ||||||||||
| dwSuggestedBufferSize | DWORD | 4 | +16 | +16 | ファイルの読み取りに推奨されるバッファーサイズ (バイト単位) です。通常、このサイズはファイル内の最大のチャンクを格納できる大きさにします。インターリーブされたファイルの場合は、単一のチャンクではなくレコード全体を読み取れる大きさにします。 バッファーサイズが小さすぎる場合や 0 に設定されている場合、再生ソフトウェアは再生中にメモリーを再割り当てする必要があり、パフォーマンスが低下します。 | ||||||||||
| dwWidth | DWORD | 4 | +20 | +20 | AVI ファイルの幅 (ピクセル単位) です。 | ||||||||||
| dwHeight | DWORD | 4 | +24 | +24 | AVI ファイルの高さ (ピクセル単位) です。 | ||||||||||
| dwScale | DWORD | 4 | +28 | +28 | ファイル全体に適用される時間スケールです。dwRate を dwScale で割ると、1 秒あたりのサンプル数が得られます。 各ストリームは、ファイルの時間スケールに優先する独自の時間スケールを定義できます。 | ||||||||||
| dwRate | DWORD | 4 | +32 | +32 | 整数形式で表したレートです。1 秒あたりのサンプル数としてのレートを求めるには、この値を dwScale の値で割ります。 | ||||||||||
| dwLength | DWORD | 4 | +36 | +36 | AVI ファイルの長さです。単位は dwRate と dwScale によって定義されます。 | ||||||||||
| dwEditCount | DWORD | 4 | +40 | +40 | AVI ファイルに追加された、または AVI ファイルから削除されたストリームの数です。 | ||||||||||
| szFileType | CHAR | 64 | +44 | +44 | ファイルの種類に関する説明情報を格納する、null 終端の文字列です。 |
公式ドキュメント
AVIFILEINFO 構造体は、AVI ファイル全体に関するグローバルな情報を格納します。
解説(Remarks)
vfw.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして AVIFILEINFO を定義します。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させて使用すると、不一致が生じ、コンパイルエラーや実行時エラーの原因となる場合があります。詳細については、Conventions for Function Prototypes を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// AVIFILEINFOA (x64 108 / x86 108 バイト)
typedef struct AVIFILEINFOA {
DWORD dwMaxBytesPerSec;
DWORD dwFlags;
DWORD dwCaps;
DWORD dwStreams;
DWORD dwSuggestedBufferSize;
DWORD dwWidth;
DWORD dwHeight;
DWORD dwScale;
DWORD dwRate;
DWORD dwLength;
DWORD dwEditCount;
CHAR szFileType[64];
} AVIFILEINFOA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AVIFILEINFOA
{
public uint dwMaxBytesPerSec;
public uint dwFlags;
public uint dwCaps;
public uint dwStreams;
public uint dwSuggestedBufferSize;
public uint dwWidth;
public uint dwHeight;
public uint dwScale;
public uint dwRate;
public uint dwLength;
public uint dwEditCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public sbyte[] szFileType;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AVIFILEINFOA
Public dwMaxBytesPerSec As UInteger
Public dwFlags As UInteger
Public dwCaps As UInteger
Public dwStreams As UInteger
Public dwSuggestedBufferSize As UInteger
Public dwWidth As UInteger
Public dwHeight As UInteger
Public dwScale As UInteger
Public dwRate As UInteger
Public dwLength As UInteger
Public dwEditCount As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> Public szFileType() As SByte
End Structureimport ctypes
from ctypes import wintypes
class AVIFILEINFOA(ctypes.Structure):
_fields_ = [
("dwMaxBytesPerSec", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("dwCaps", wintypes.DWORD),
("dwStreams", wintypes.DWORD),
("dwSuggestedBufferSize", wintypes.DWORD),
("dwWidth", wintypes.DWORD),
("dwHeight", wintypes.DWORD),
("dwScale", wintypes.DWORD),
("dwRate", wintypes.DWORD),
("dwLength", wintypes.DWORD),
("dwEditCount", wintypes.DWORD),
("szFileType", ctypes.c_byte * 64),
]#[repr(C)]
pub struct AVIFILEINFOA {
pub dwMaxBytesPerSec: u32,
pub dwFlags: u32,
pub dwCaps: u32,
pub dwStreams: u32,
pub dwSuggestedBufferSize: u32,
pub dwWidth: u32,
pub dwHeight: u32,
pub dwScale: u32,
pub dwRate: u32,
pub dwLength: u32,
pub dwEditCount: u32,
pub szFileType: [i8; 64],
}import "golang.org/x/sys/windows"
type AVIFILEINFOA struct {
dwMaxBytesPerSec uint32
dwFlags uint32
dwCaps uint32
dwStreams uint32
dwSuggestedBufferSize uint32
dwWidth uint32
dwHeight uint32
dwScale uint32
dwRate uint32
dwLength uint32
dwEditCount uint32
szFileType [64]int8
}type
AVIFILEINFOA = record
dwMaxBytesPerSec: DWORD;
dwFlags: DWORD;
dwCaps: DWORD;
dwStreams: DWORD;
dwSuggestedBufferSize: DWORD;
dwWidth: DWORD;
dwHeight: DWORD;
dwScale: DWORD;
dwRate: DWORD;
dwLength: DWORD;
dwEditCount: DWORD;
szFileType: array[0..63] of Shortint;
end;const AVIFILEINFOA = extern struct {
dwMaxBytesPerSec: u32,
dwFlags: u32,
dwCaps: u32,
dwStreams: u32,
dwSuggestedBufferSize: u32,
dwWidth: u32,
dwHeight: u32,
dwScale: u32,
dwRate: u32,
dwLength: u32,
dwEditCount: u32,
szFileType: [64]i8,
};type
AVIFILEINFOA {.bycopy.} = object
dwMaxBytesPerSec: uint32
dwFlags: uint32
dwCaps: uint32
dwStreams: uint32
dwSuggestedBufferSize: uint32
dwWidth: uint32
dwHeight: uint32
dwScale: uint32
dwRate: uint32
dwLength: uint32
dwEditCount: uint32
szFileType: array[64, int8]struct AVIFILEINFOA
{
uint dwMaxBytesPerSec;
uint dwFlags;
uint dwCaps;
uint dwStreams;
uint dwSuggestedBufferSize;
uint dwWidth;
uint dwHeight;
uint dwScale;
uint dwRate;
uint dwLength;
uint dwEditCount;
byte[64] szFileType;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; AVIFILEINFOA サイズ: 108 バイト(x64)
dim st, 27 ; 4byte整数×27(構造体サイズ 108 / 4 切り上げ)
; dwMaxBytesPerSec : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwCaps : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwStreams : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwSuggestedBufferSize : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwWidth : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwHeight : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwScale : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwRate : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dwLength : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwEditCount : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; szFileType : CHAR (+44, 64byte) varptr(st)+44 を基点に操作(64byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global AVIFILEINFOA
#field int dwMaxBytesPerSec
#field int dwFlags
#field int dwCaps
#field int dwStreams
#field int dwSuggestedBufferSize
#field int dwWidth
#field int dwHeight
#field int dwScale
#field int dwRate
#field int dwLength
#field int dwEditCount
#field byte szFileType 64
#endstruct
stdim st, AVIFILEINFOA ; NSTRUCT 変数を確保
st->dwMaxBytesPerSec = 100
mes "dwMaxBytesPerSec=" + st->dwMaxBytesPerSec