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

AVIFILEINFOA

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

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

フィールド

フィールドサイズx64x86説明
dwMaxBytesPerSecDWORD4+0+0AVI ファイルのおおよその最大データレートです。
dwFlagsDWORD4+4+4

0 個以上のフラグのビット単位の OR です。次のフラグが定義されています:

名前 説明
AVIFILEINFO_HASINDEX
AVI ファイルの末尾にインデックスがあります。良好なパフォーマンスを得るために、すべての AVI ファイルはインデックスを含むべきです。
AVIFILEINFO_MUSTUSEINDEX
ファイルのインデックスには、ファイル内のチャンクの再生順序が含まれています。データを再生するときは、チャンクの物理的な順序ではなくインデックスを使用します。これは編集用のフレーム一覧を作成する場合に利用できます。
AVIFILEINFO_ISINTERLEAVED
AVI ファイルはインターリーブされています。
AVIFILEINFO_WASCAPTUREFILE
AVI ファイルは、リアルタイムビデオのキャプチャーに使用される、特別に割り当てられたファイルです。このフラグが設定されているファイルに上書きする前に、アプリケーションはユーザーに警告してください。ユーザーがこのファイルをデフラグしている可能性が高いためです。
AVIFILEINFO_COPYRIGHTED
AVI ファイルには著作権で保護されたデータとソフトウェアが含まれています。このフラグが使用されている場合、ソフトウェアはデータの複製を許可してはなりません。
dwCapsDWORD4+8+8

機能フラグです。次のフラグが定義されています:

名前 説明
AVIFILECAPS_CANREAD
アプリケーションは読み取り権限で AVI ファイルを開くことができます。
AVIFILECAPS_CANWRITE
アプリケーションは書き込み権限で AVI ファイルを開くことができます。
AVIFILECAPS_ALLKEYFRAMES
AVI ファイル内のすべてのフレームがキーフレームです。
AVIFILECAPS_NOCOMPRESSION
AVI ファイルは圧縮方式を使用していません。
dwStreamsDWORD4+12+12ファイル内のストリームの数です。たとえば、オーディオとビデオを含むファイルには、少なくとも 2 つのストリームがあります。
dwSuggestedBufferSizeDWORD4+16+16

ファイルの読み取りに推奨されるバッファーサイズ (バイト単位) です。通常、このサイズはファイル内の最大のチャンクを格納できる大きさにします。インターリーブされたファイルの場合は、単一のチャンクではなくレコード全体を読み取れる大きさにします。

バッファーサイズが小さすぎる場合や 0 に設定されている場合、再生ソフトウェアは再生中にメモリーを再割り当てする必要があり、パフォーマンスが低下します。

dwWidthDWORD4+20+20AVI ファイルの幅 (ピクセル単位) です。
dwHeightDWORD4+24+24AVI ファイルの高さ (ピクセル単位) です。
dwScaleDWORD4+28+28

ファイル全体に適用される時間スケールです。dwRatedwScale で割ると、1 秒あたりのサンプル数が得られます。

各ストリームは、ファイルの時間スケールに優先する独自の時間スケールを定義できます。

dwRateDWORD4+32+32整数形式で表したレートです。1 秒あたりのサンプル数としてのレートを求めるには、この値を dwScale の値で割ります。
dwLengthDWORD4+36+36AVI ファイルの長さです。単位は dwRatedwScale によって定義されます。
dwEditCountDWORD4+40+40AVI ファイルに追加された、または AVI ファイルから削除されたストリームの数です。
szFileTypeCHAR64+44+44ファイルの種類に関する説明情報を格納する、null 終端の文字列です。

公式ドキュメント

AVIFILEINFO 構造体は、AVI ファイル全体に関するグローバルな情報を格納します。

解説(Remarks)

メモ

vfw.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして AVIFILEINFO を定義します。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させて使用すると、不一致が生じ、コンパイルエラーや実行時エラーの原因となる場合があります。詳細については、Conventions for Function Prototypes を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 Structure
import 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