=begin{:4_156:} ■ RGDS_Base ver 0.0.0.9 動画再生スクリプト(ベース)for DLL(ver0.0.0.8) =end module RGDS DLL_NAME = "HNRGDS" module State NO_CONNECT = 0 OPENING = 5 READY = 10 RUN = 21 PAUSE = 22 end STATE_NO_CONNECT = 0 STATE_OPENING = 5 STATE_READY = 10 STATE_RUN = 21 STATE_PAUSE = 22 @@open = Win32API.new(DLL_NAME, 'OpenMovieA', 'ip', 'l') @@get_size = Win32API.new(DLL_NAME, 'GetVideoSize', 'p', 'i') @@close = Win32API.new(DLL_NAME, 'CloseMovie', 'v', 'i') @@update_video = Win32API.new(DLL_NAME, 'UpdateVideo', 'n', 'i') @@run = Win32API.new(DLL_NAME, 'RunMovie', 'v', 'i') @@pause = Win32API.new(DLL_NAME, 'PauseMovie', 'v', 'i') @@get_volume = Win32API.new(DLL_NAME, 'GetVolume', 'v', 'l') @@set_volume = Win32API.new(DLL_NAME, 'SetVolume', 'l', 'l') @@state = Win32API.new(DLL_NAME, 'GetState', 'v', 'i') @@state = 0 @@system_pause = false @@volume = 10000 @@visible = true @@x = 0 @@y = 0 @@width_max = 0 @@height_max = 0 @@filename = "" @@bitmap = Bitmap.new(16, 16) @@bitmap.clear class << @@bitmap alias :_dispose :dispose unless method_defined?(:_dispose) def dispose end end @@bitmap_changed = true def self.open(filename) if @@filename != filename self.close end result = @@open.call(filename.size, filename); return result if result != 0 @@state = State::OPENING @@filename = filename return result end def self.close @@state = State::NO_CONNECT @@filename = "" @@close.call() @@bitmap.clear end def self.bitmap @@bitmap end def self.bitmap_changed? @@bitmap_changed end def self.bitmap_changed=(value) @@bitmap_changed = value end def self.filename @@filename end def self.update return 0 if !@@visible if @@state >= State::READY result = @@update_video.call(@@bitmap.object_id) if (result == 0) return 0 else self.close() return result end else return -1 end end def self.wait_opening return unless @@state == State::OPENING buff_size = "\000" * 8 while(@@state == State::OPENING) do result = @@get_size.call(buff_size) if result == 0 break; elsif result < 0 error_code = result error_code = result & 0xFFFF if DSError::JP_ERROR.key?(error_code) print "エラー(#{error_code}):#{DSError::JP_ERROR[error_code]}" else print "エラー(#{error_code}):#{result}" end return result end 5.times {Graphics.update} end width, height = buff_size.unpack("ii") if ( (@@bitmap.width != width) or (@@bitmap.height != height) ) @@bitmap._dispose @@bitmap = Bitmap.new(width, height) class << @@bitmap alias :_dispose :dispose unless method_defined?(:_dispose) def dispose end end @@bitmap_changed = true end @@bitmap.clear @@state = State::READY return 0 end def self.run self.wait_opening() if @@state >= State::READY self.set_volume(@@volume) @@run.call() @@state = State::RUN end end def self.pause if @@state == State::RUN @@pause.call() @@state = State::PAUSE end end def self.get_volume if @@state >= State::READY @@volume = @@get_volume.call() end return @@volume end def self.set_volume(volume) volume = 0 if volume < 0 volume = 10000 if volume > 10000 @@volume = volume if @@state >= State::READY @@set_volume.call(volume) end end def self.active? (@@state >= State::READY) end def self.system_pause if @@state == State::RUN self.pause() @@system_pause = true @@state == State::PAUSE end end def self.system_resume if @@system_pause self.run() @@system_pause = false end end def self.visible (@@visible && self.active? ) end # リセット対策 self.close() end module DSError # HNRGDS.dll で独自に定義しているエラーコード LOCAL_ERROR = { -100001 => "ERROR_NO_WINDOW", -100003 => "ERROR_WINDOW_OPENED", -100004 => "ERROR_NO_CONNECT", -100101 => "ERROR_CANT_OPEN_FILE", -100201 => "ERROR_MOVIE_LODING", -100205 => "ERROR_OPEN_TIMEOUT", -100301 => "ERROR_NOT_PLAYING", -100303 => "ERROR_DIFFERENT_SIZE", -101404 => "ERROR_FILTER_NOT_FOUND", -101406 => "ERROR_FILTER_UNSUPPORTED", } # DirectShowから返されるエラーの下位ビット JP_ERROR = { 554 => "このピンは、提供されたメディア タイプを使えない", 555 => "このサンプルはレンダリングできない", 558 => "タイムアウト期間が過ぎた", 559 => "ファイル フォーマットが無効", 599 => "ビデオ ストリームを再生できない(レンダラ)", 600 => "オーディオ ストリームを再生できない(レンダラ)", 603 => "DirectShow はこのプロセッサ上で MPEG ムービーを再生できない", 604 => "オーディオ ストリームを再生できない(フォーマット)", 605 => "ビデオ ストリームを再生できない(フォーマット)", 606 => "規格に準拠していないので DirectShow で再生できない", 607 => "フィルタグラフに存在しないオブジェクトに要求された関数を実行できない", 612 => "バッファが十分に満たされていない", 613 => "ファイルを再生できない(フォーマット)", 614 => "同じ転送をサポートしていないのでピンどうしを接続できない", } end
jt03.jpg (17.46 KB, 下载次数: 43)
QQ图片20130617150526.jpg (10.36 KB, 下载次数: 17)
jt04.jpg (49.19 KB, 下载次数: 16)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |