// 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