【HSP3】Media Foundationを使用しての動画再生(修正)

すっごい簡単。Win7以降で動作。
1.3倍速再生するけどピッチが変わらない高速再生になるみたい。
動画のサイズとウインドウのサイズが合っていなくてもアスペクト比は自動調整され、なおかつ拡大処理もきれい。
バグがいくつかあったので作り直しました。

すっごい簡単。Win7以降で動作。
1.3倍速再生するけどピッチが変わらない高速再生になるみたい。
動画のサイズとウインドウのサイズが合っていなくてもアスペクト比は自動調整され、なおかつ拡大処理もきれい。
バグがいくつかあったので作り直しました。

#define IID_IMFPMediaPlayer "{A714590A-58AF-430a-85BF-44F5EC838D85}"
#usecom IMFPMediaPlayer IID_IMFPMediaPlayer "{}"
#comfunc IMFPMediaPlayer_Play 3
#comfunc IMFPMediaPlayer_Pause 4
#comfunc IMFPMediaPlayer_Stop 5
#comfunc IMFPMediaPlayer_FrameStep 6
#comfunc IMFPMediaPlayer_SetRate 10 float
#comfunc IMFPMediaPlayer_Shutdown 38
newcom iMFPlayer,IMFPMediaPlayer
#uselib "Mfplay"
#func MFPCreateMediaPlayer "MFPCreateMediaPlayer" wstr,int,int,int,int,var
#uselib "Mfplat"
#func MFStartup "MFStartup" int,int
#func MFShutdown "MFShutdown"
#define MFSTARTUP_NOSOCKET 0x1
#define MFSTARTUP_LITE (MFSTARTUP_NOSOCKET)
#define MFSTARTUP_FULL 0
screen 0,800,800
title "Media Foundation (1.3)"
LOADED=0
onexit *lEnd
objsize 100,24
pos ginfo_winx-500,0
button gosub "Load",*lFileLoad
pos ginfo_winx-400,0
button gosub "Play",*lPlay
pos ginfo_winx-300,0
button gosub "Pause",*lPause
pos ginfo_winx-200,0
button gosub "Stop",*lStop
pos ginfo_winx-100,0
button gosub "Step",*lStep
gosub *lFileLoad
stop
*lFileLoad
dialog "mp4;*.avi;*.mpg;*.mpeg",16
if stat=0{
if LOADED{
return
}else{
stop
}
}
file=refstr
gosub *lLoad
IMFPMediaPlayer_SetRate iMFPlayer,1.3 ;1.3
return
*lLoad
if LOADED{
gosub *lRelease
}
MFStartup
MFPCreateMediaPlayer file, 1,0,0,hwnd,iMFPlayer
; ↑0
LOADED=1
return
*lRelease
gosub *lStop
IMFPMediaPlayer_Shutdown iMFPlayer
MFShutdown
return
*lPlay
if LOADED : IMFPMediaPlayer_Play iMFPlayer
return
*lPause
if LOADED : IMFPMediaPlayer_Pause iMFPlayer
return
*lStop
if LOADED : IMFPMediaPlayer_Stop iMFPlayer
return
*lStep
if LOADED : IMFPMediaPlayer_FrameStep iMFPlayer
return
*lEnd
if LOADED{
gosub *lRelease
}
mes "MFShutdown:"+stat
end
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX