sample\hspdsp\sample18.hsp » Plain Format
// Sample18.hsp aviutlもどき(動画編集ソフトもどき)
// ※編集はできないので"もどき"になってます。
// hspcvと組み合わせればなんかできそうかも。
#include "hspdsp.as"
//必ず初期化
dsp_Init
dialog "*",16
if stat=0:end
fname=refstr
//開く
dsp_MDetOpen fname
//ストリームの総数を取得
Streams=dsp_MDetGetOutputStreams()
repeat Streams
//カレントストリームの設定
dsp_MDetSetCurrentStream cnt
//ストリームのタイプを取得
Type=dsp_MDetGetStreamType()
//ビデオストリーム
if Type=0{
// 後で使用するので、ビデオストリームのIDを保存
VideoStreamID=cnt
// フレームレートとかの情報を取得
fps=(1.0*dsp_MDetGetFrameRate()/100)
len=(1.0*dsp_MDetGetStreamLength()/100)
frame=dsp_MDetGetStreamFrames()
MDetX=dsp_MDetGetStreamInfo(0):MDetY=dsp_MDetGetStreamInfo(1)
}
//オーディオストリーム
if Type=1{
//今回は何もしない。
}
loop
//エラーチェック
if (MDetX=0)|(MDetY=0){
dialog "動画ファイルではありません。"
dsp_MDetClose // 開いたものは必ず閉じること
end
}
if (fps<0)|(len<0)|(frame<0){
dialog "フォーマットが不正です。"
dsp_MDetClose // 開いたものは必ず閉じること
end
}
//ビデオのサイズ+トラックバー
screen 0, MDetX , MDetY+30
//以下トラックバー設置
winobj "msctls_trackbar32", "", , $50000000 | $1, MDetX, 30
hTrackbar = objinfo(stat, 2)
//移動間隔
sendmsg hTrackbar, $414,100
//範囲の設定
sendmsg hTrackbar, $407,1,0
sendmsg hTrackbar, $408,1,frame
//イベント設定
oncmd gosub *vscroll, $114
onexit gosub *exit
//カレントストリームをビデオに設定
dsp_MDetSetCurrentStream VideoStreamID
//最初のフレームを取得
dsp_MDetGetStreamGrab hdc,0.0,0,30,MDetX,MDetY,SRCCOPY,MDetX,MDetY
//必ず redraw
redraw 1
title "0/"+frame
stop
*vscroll
//トラックバーのハンドル
if lparam = hTrackbar {
//バーの位置取得
sendmsg hTrackbar, $400
// 同じ位置の場合は再更新しない
// (同じ位置なのに2回飛んでくるため。)
if logpos=stat:return
logpos=stat
title "Seeking Now..."
//フレームから時間へ変換
time=dsp_MDetFrameToTime(logpos,fps,len)
//フレームを取得
dsp_MDetGetStreamGrab hdc,time,0,30,MDetX,MDetY,SRCCOPY,MDetX,MDetY
//必ず redraw
redraw 1
title ""+logpos+"/"+frame
}
return
*exit
dsp_MDetClose
end
return