ホーム › Media.MediaFoundation › MFCameraExtrinsic_CalibratedTransform
MFCameraExtrinsic_CalibratedTransform
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| CalibrationId | GUID | 16 | +0 | +0 | この較正変換を識別するGUID。 |
| Position | MF_FLOAT3 | 12 | +16 | +16 | カメラの位置を示す3次元ベクトル(MF_FLOAT3)。 |
| Orientation | MF_QUATERNION | 16 | +28 | +28 | カメラの姿勢を示すクォータニオン(MF_QUATERNION)。 |
各言語での定義
#include <windows.h>
// MF_FLOAT3 (x64 12 / x86 12 バイト)
typedef struct MF_FLOAT3 {
FLOAT x;
FLOAT y;
FLOAT z;
} MF_FLOAT3;
// MF_QUATERNION (x64 16 / x86 16 バイト)
typedef struct MF_QUATERNION {
FLOAT x;
FLOAT y;
FLOAT z;
FLOAT w;
} MF_QUATERNION;
// MFCameraExtrinsic_CalibratedTransform (x64 44 / x86 44 バイト)
typedef struct MFCameraExtrinsic_CalibratedTransform {
GUID CalibrationId;
MF_FLOAT3 Position;
MF_QUATERNION Orientation;
} MFCameraExtrinsic_CalibratedTransform;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MF_FLOAT3
{
public float x;
public float y;
public float z;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MF_QUATERNION
{
public float x;
public float y;
public float z;
public float w;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MFCameraExtrinsic_CalibratedTransform
{
public Guid CalibrationId;
public MF_FLOAT3 Position;
public MF_QUATERNION Orientation;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MF_FLOAT3
Public x As Single
Public y As Single
Public z As Single
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MF_QUATERNION
Public x As Single
Public y As Single
Public z As Single
Public w As Single
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MFCameraExtrinsic_CalibratedTransform
Public CalibrationId As Guid
Public Position As MF_FLOAT3
Public Orientation As MF_QUATERNION
End Structureimport ctypes
from ctypes import wintypes
class MF_FLOAT3(ctypes.Structure):
_fields_ = [
("x", ctypes.c_float),
("y", ctypes.c_float),
("z", ctypes.c_float),
]
class MF_QUATERNION(ctypes.Structure):
_fields_ = [
("x", ctypes.c_float),
("y", ctypes.c_float),
("z", ctypes.c_float),
("w", ctypes.c_float),
]
class MFCameraExtrinsic_CalibratedTransform(ctypes.Structure):
_fields_ = [
("CalibrationId", GUID),
("Position", MF_FLOAT3),
("Orientation", MF_QUATERNION),
]#[repr(C)]
pub struct MF_FLOAT3 {
pub x: f32,
pub y: f32,
pub z: f32,
}
#[repr(C)]
pub struct MF_QUATERNION {
pub x: f32,
pub y: f32,
pub z: f32,
pub w: f32,
}
#[repr(C)]
pub struct MFCameraExtrinsic_CalibratedTransform {
pub CalibrationId: GUID,
pub Position: MF_FLOAT3,
pub Orientation: MF_QUATERNION,
}import "golang.org/x/sys/windows"
type MF_FLOAT3 struct {
x float32
y float32
z float32
}
type MF_QUATERNION struct {
x float32
y float32
z float32
w float32
}
type MFCameraExtrinsic_CalibratedTransform struct {
CalibrationId windows.GUID
Position MF_FLOAT3
Orientation MF_QUATERNION
}type
MF_FLOAT3 = record
x: Single;
y: Single;
z: Single;
end;
MF_QUATERNION = record
x: Single;
y: Single;
z: Single;
w: Single;
end;
MFCameraExtrinsic_CalibratedTransform = record
CalibrationId: TGUID;
Position: MF_FLOAT3;
Orientation: MF_QUATERNION;
end;const MF_FLOAT3 = extern struct {
x: f32,
y: f32,
z: f32,
};
const MF_QUATERNION = extern struct {
x: f32,
y: f32,
z: f32,
w: f32,
};
const MFCameraExtrinsic_CalibratedTransform = extern struct {
CalibrationId: GUID,
Position: MF_FLOAT3,
Orientation: MF_QUATERNION,
};type
MF_FLOAT3 {.bycopy.} = object
x: float32
y: float32
z: float32
MF_QUATERNION {.bycopy.} = object
x: float32
y: float32
z: float32
w: float32
MFCameraExtrinsic_CalibratedTransform {.bycopy.} = object
CalibrationId: GUID
Position: MF_FLOAT3
Orientation: MF_QUATERNIONstruct MF_FLOAT3
{
float x;
float y;
float z;
}
struct MF_QUATERNION
{
float x;
float y;
float z;
float w;
}
struct MFCameraExtrinsic_CalibratedTransform
{
GUID CalibrationId;
MF_FLOAT3 Position;
MF_QUATERNION Orientation;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MFCameraExtrinsic_CalibratedTransform サイズ: 44 バイト(x64)
dim st, 11 ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; CalibrationId : GUID (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; Position : MF_FLOAT3 (+16, 12byte) varptr(st)+16 を基点に操作(12byte:入れ子/配列)
; Orientation : MF_QUATERNION (+28, 16byte) varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global MF_FLOAT3
#field float x
#field float y
#field float z
#endstruct
#defstruct global MF_QUATERNION
#field float x
#field float y
#field float z
#field float w
#endstruct
#defstruct global MFCameraExtrinsic_CalibratedTransform
#field GUID CalibrationId
#field MF_FLOAT3 Position
#field MF_QUATERNION Orientation
#endstruct
stdim st, MFCameraExtrinsic_CalibratedTransform ; NSTRUCT 変数を確保