HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0602
dsp_CaptureVideoExを用いた縮小キャプチャ23解決


リンク

2013/6/2(Sun) 13:02:42|NO.54493

前回解決済みとしましたので新スレで失礼します。
おかげさまで動画リアルタイムキャプチャができるようになったのですが、
フレームの取得が少々不安定というか、処理が重たいわけでは
なさそうながらややガタつきが出る場合があります。
現在使っているルーチンでテストソースを組んでみました。
より高速化、安定化できる点がありましたらご指摘ください。

#include "user32.as" #include "gdi32.as" #include "hspdsp.as" dsp_Init screen 0,320,240,0,0,0 buffer 10,64,64,0 screen 11,256,256,0,327,0 ;実際はscreenではなくbufferで使用 dialog "*",16,"メディアファイル" ;ファイル選択 if stat=0:end gsel 10 dsp_UseCaptureVideoEx 1 dsp_Open refstr,OPEN_DEFAULT_RENDERER,0,0,0 dsp_SetCaptureBufferSamples 1 onexit *exit ;Xで終了する bai=0 size=64 gsel 11 SetStretchBltMode hdc,4 ;きれいに縮小するモード選択 dsp_Play hwnd,0,0,0,0 ;再生開始 *main stick ky ;スペースキーでキャプチャサイズを変える if ky&16{bai++:bai=bai\8:size=64+bai*16} gsel 11 dsp_CaptureVideoEx hdc,0,0,size,size*dsp_info(1)/dsp_info(0),SRCCOPY redraw mref vram,66 gsel 0 color 255,255,255:boxf color 0,0,0:pos 0,0:mes"メインウィンドウ" pos 0,16:mes"キャプチャサイズX:"+size pos 0,32:mes"キャプチャサイズY:"+size*dsp_info(1)/dsp_info(0) pos 0,48:mes"vram読み取りテスト:"+peek(vram,195500) await 0 ; ↑0〜196607までの任意の整数値 goto *main *exit dsp_Stop dsp_Close dsp_Exit end



この記事に返信する


inovia

リンク

2013/6/2(Sun) 13:39:46|NO.54494

フレームが変更されているかどうかチェックし、
されている場合はdsp_CaptureVideoExを実行したほうが若干軽くなるかも。


#include "user32.as" #include "gdi32.as" #include "hspdsp.as" dsp_Init screen 0, 320, 240, 0, 0, 0 buffer 10, 64, 64, 0 screen 11, 256, 256, 0, 327, 0 ;実際はscreenではなくbufferで使用 dialog "*", 16, "メディアファイル" ;ファイル選択 if stat = 0 : end gsel 10 dsp_UseCaptureVideoEx 1 dsp_Open refstr, OPEN_DEFAULT_RENDERER, 0, 0, 0 dsp_SetCaptureBufferSamples 1 onexit *exit ;Xで終了する bai = 0 size = 64 gsel 11 SetStretchBltMode hdc, 4 ;きれいに縮小するモード選択 // フレーム数に変更(うまくいかない場合もあり) dsp_SetMediaSeeking 1, 1 dsp_Play hwnd, 0, 0, 0, 0 ;再生開始 current_time = -1 *main // フレームが変わっているかチェック if current_time = dsp_GetMediaSeeking(3){ await 0 goto *main }else{ current_time = dsp_GetMediaSeeking(3) } stick ky ;スペースキーでキャプチャサイズを変える if ky & 16{bai++ : bai = bai\8 : size = 64 + bai * 16} gsel 11 dsp_CaptureVideoEx hdc, 0, 0, size, size * dsp_info(1) / dsp_info(0), SRCCOPY redraw mref vram, 66 gsel 0 color 255, 255, 255 : boxf color 0, 0, 0 : pos 0, 0 : mes"メインウィンドウ" pos 0, 16 : mes"キャプチャサイズX:" + size pos 0, 32 : mes"キャプチャサイズY:" + size * dsp_info(1) / dsp_info(0) pos 0, 48 : mes"vram読み取りテスト:" + peek(vram, 195500) await 0 ; ↑0〜196607までの任意の整数値 goto *main *exit dsp_Stop dsp_Close dsp_Exit end



リンク

2013/6/2(Sun) 16:22:04|NO.54496

またしても完璧です、お世話になりました。
dsp_SetMediaSeekingを使ってフレーム更新を間引く方法は自分も
考えたのですが引数の2番目がよくわからなかったので、
mdet使って1フレームあたりのmsを計算して?みたいなのを考えてたところでした。

あと1つ追加質問で申し訳ございません。
作っているプログラムはhgimg3のフルスクリーンモードで実行できるものです。
hspdspを使用していなかったバージョンでは普通にフルスクリーン実行できていたものが、
現在はいったんHSPがタスクバーに降りてしまって、そこをクリックするとフルスクリーン
モードにできるという現象が発生しています。
自分はちょっとウィンドウハンドルとかデバイスコンテキストなどが
理解できていないのですが、その関係なのでしょうか?
漠然としていてすみませんが、もし思いあたる原因などございましたらお願いいたします。



リンク

2013/6/2(Sun) 18:12:33|NO.54504

うーん…
動画の種類によってはうまくフレーム数が取得できない場合もありますね。



ONION software Copyright 1997-2021(c) All rights reserved.