AVIOLDINDEX
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fcc | DWORD | 4 | +0 | +0 | FOURCC コードを指定します。値は 'idx1' でなければなりません。 | ||||||||
| cb | DWORD | 4 | +4 | +4 | 構造体のサイズを指定します。先頭の 8 バイトは含みません。 | ||||||||
| aIndex | _avioldindex_entry | 16 | +8 | +8 | 次のメンバーを含む構造体の配列です。 dwChunkIdAVI ファイル内のストリームを識別する FOURCC を指定します。FOURCC は 'xxyy' という形式でなければなりません。ここで xx はストリーム番号、yy はストリームの内容を識別する 2 文字のコードです。 db (非圧縮のビデオフレーム)dc (圧縮されたビデオフレーム)pc (パレットの変更)wb (オーディオデータ)dwFlags次のフラグのうち 0 個以上をビット単位で組み合わせた値を指定します。
dwOffsetファイル内のデータチャンクの位置を指定します。値は 'movi' リストの先頭からのオフセット (バイト単位) で指定してください。ただし、一部の AVI ファイルではファイルの先頭からのオフセットとして与えられています。 dwSizeデータチャンクのサイズをバイト単位で指定します。 |
構造体: _avioldindex_entry x64 16B / x86 16B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| dwChunkId | DWORD | 4 | +0 | +0 |
| dwFlags | DWORD | 4 | +4 | +4 |
| dwOffset | DWORD | 4 | +8 | +8 |
| dwSize | DWORD | 4 | +12 | +12 |
公式ドキュメント
[このページに関連する機能である DirectShow はレガシー機能です。この機能は MediaPlayer、IMFMediaEngine、および Audio/Video Capture in Media Foundation に置き換えられました。これらの機能は Windows 10 および Windows 11 向けに最適化されています。Microsoft は、新しいコードでは可能な限り DirectShow ではなく MediaPlayer、IMFMediaEngine、Audio/Video Capture in Media Foundation を使用することを強く推奨します。また、レガシー API を使用している既存のコードについても、可能であれば新しい API を使用するように書き換えることを推奨します。]
AVIOLDINDEX 構造体は、AVI 1.0 インデックス ('idx1' 形式) を記述します。新しい AVI ファイルでは AVI 2.0 インデックス ('indx' 形式) を使用してください。
解説(Remarks)
この構造体は、先頭の RIFF チャンク (fcc メンバーと cb メンバー) と、それに続く 'movi' リスト内の各データチャンクに対応するインデックスエントリで構成されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// AVIOLDINDEX (x64 24 / x86 24 バイト)
#pragma pack(push, 2)
typedef struct AVIOLDINDEX {
DWORD fcc;
DWORD cb;
_avioldindex_entry aIndex[1];
} AVIOLDINDEX;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 2, CharSet = CharSet.Unicode)]
public struct AVIOLDINDEX
{
public uint fcc;
public uint cb;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public _avioldindex_entry[] aIndex;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=2, CharSet:=CharSet.Unicode)>
Public Structure AVIOLDINDEX
Public fcc As UInteger
Public cb As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public aIndex() As _avioldindex_entry
End Structureimport ctypes
from ctypes import wintypes
class AVIOLDINDEX(ctypes.Structure):
_pack_ = 2
_fields_ = [
("fcc", wintypes.DWORD),
("cb", wintypes.DWORD),
("aIndex", _avioldindex_entry * 1),
]#[repr(C, packed(2))]
pub struct AVIOLDINDEX {
pub fcc: u32,
pub cb: u32,
pub aIndex: [_avioldindex_entry; 1],
}import "golang.org/x/sys/windows"
type AVIOLDINDEX struct {
fcc uint32
cb uint32
aIndex [1]_avioldindex_entry
}type
AVIOLDINDEX = packed record
fcc: DWORD;
cb: DWORD;
aIndex: array[0..0] of _avioldindex_entry;
end;const AVIOLDINDEX = extern struct {
fcc: u32,
cb: u32,
aIndex: [1]_avioldindex_entry,
};type
AVIOLDINDEX {.packed.} = object
fcc: uint32
cb: uint32
aIndex: array[1, _avioldindex_entry]align(2)
struct AVIOLDINDEX
{
uint fcc;
uint cb;
_avioldindex_entry[1] aIndex;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; AVIOLDINDEX サイズ: 24 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; fcc : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; cb : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; aIndex : _avioldindex_entry (+8, 16byte) varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global AVIOLDINDEX, pack=2
#field int fcc
#field int cb
#field _avioldindex_entry aIndex 1
#endstruct
stdim st, AVIOLDINDEX ; NSTRUCT 変数を確保
st->fcc = 100
mes "fcc=" + st->fcc