sample18.hsp

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