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

AVIFILEINFOW

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

サイズ=各フィールドのバイト数(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

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

バッファー サイズが小さすぎる場合や 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 ファイルから削除されたストリームの数です。
szFileTypeWCHAR128+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>

// AVIFILEINFOW  (x64 172 / x86 172 バイト)
typedef struct AVIFILEINFOW {
    DWORD dwMaxBytesPerSec;
    DWORD dwFlags;
    DWORD dwCaps;
    DWORD dwStreams;
    DWORD dwSuggestedBufferSize;
    DWORD dwWidth;
    DWORD dwHeight;
    DWORD dwScale;
    DWORD dwRate;
    DWORD dwLength;
    DWORD dwEditCount;
    WCHAR szFileType[64];
} AVIFILEINFOW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AVIFILEINFOW
{
    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.ByValTStr, SizeConst = 64)] public string szFileType;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AVIFILEINFOW
    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.ByValTStr, SizeConst:=64)> Public szFileType As String
End Structure
import ctypes
from ctypes import wintypes

class AVIFILEINFOW(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_wchar * 64),
    ]
#[repr(C)]
pub struct AVIFILEINFOW {
    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: [u16; 64],
}
import "golang.org/x/sys/windows"

type AVIFILEINFOW 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]uint16
}
type
  AVIFILEINFOW = 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 WideChar;
  end;
const AVIFILEINFOW = 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]u16,
};
type
  AVIFILEINFOW {.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, uint16]
struct AVIFILEINFOW
{
    uint dwMaxBytesPerSec;
    uint dwFlags;
    uint dwCaps;
    uint dwStreams;
    uint dwSuggestedBufferSize;
    uint dwWidth;
    uint dwHeight;
    uint dwScale;
    uint dwRate;
    uint dwLength;
    uint dwEditCount;
    wchar[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 レイアウト)
; AVIFILEINFOW サイズ: 172 バイト(x64)
dim st, 43    ; 4byte整数×43(構造体サイズ 172 / 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 : WCHAR (+44, 128byte)  varptr(st)+44 を基点に操作(128byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global AVIFILEINFOW
    #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 wchar szFileType 64
#endstruct

stdim st, AVIFILEINFOW        ; NSTRUCT 変数を確保
st->dwMaxBytesPerSec = 100
mes "dwMaxBytesPerSec=" + st->dwMaxBytesPerSec