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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0423
ニボッシー動画再生で画面半分だけ再生2解決


ニボッシー

リンク

2015/4/23(Thu) 20:09:03|NO.68717

いつもお世話になっております。
動画を複数再生するソフトを作っているのですが
mciを使ったりhspdspを使ったりして試したもののmp4形式が再生できないため
下のコードにて再生できたためこちらをメインに使っています
躓いた点が2点ほど質問よろしいでしょうか?

1、下のソースを改造して動画の一部分を切り取った状態で
 再生するということは出来ないでしょうか?
 例えば、1280x720の動画の左半分だけを再生的な感じです

2、
複数の動画再生は出来たのですが同時に再生した時に
微妙にずれたりして音がでるので
片方をミュートにしたりしたいのですが(出来れば再生同期して出来ればいいのですが)
ミュートを追加しようと思っても記述方法がよく分からず出来ません。
下のリンクを参考にしてみましたがよく分かりませんでした。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/dd374329%28v=vs.85%29.aspx


こちらのサイトのコードです http://codetter.com/?p=1096
サイトから直接コピーすると半角スペースがついてエラーになるため
直したものをこちらに貼り付けています


#define IID_IMFPMediaPlayer "{A714590A-58AF-430a-85BF-44F5EC838D85}" #usecom IMFPMediaPlayer IID_IMFPMediaPlayer "{}" #comfunc IMFPMediaPlayer_Play 3 #comfunc IMFPMediaPlayer_Pause 4 #comfunc IMFPMediaPlayer_Stop 5 #comfunc IMFPMediaPlayer_FrameStep 6 #comfunc IMFPMediaPlayer_SetRate 10 float #comfunc IMFPMediaPlayer_Shutdown 38 newcom iMFPlayer,IMFPMediaPlayer #uselib "Mfplay" #func MFPCreateMediaPlayer "MFPCreateMediaPlayer" wstr,int,int,int,int,var #uselib "Mfplat" #func MFStartup "MFStartup" int,int #func MFShutdown "MFShutdown" #define MFSTARTUP_NOSOCKET 0x1 #define MFSTARTUP_LITE (MFSTARTUP_NOSOCKET) #define MFSTARTUP_FULL 0 screen 0,800,800 title "Media Foundation (1.3倍速再生サンプル)" LOADED=0 onexit *lEnd objsize 100,24 pos ginfo_winx-500,0 button gosub "Load",*lFileLoad pos ginfo_winx-400,0 button gosub "Play",*lPlay pos ginfo_winx-300,0 button gosub "Pause",*lPause pos ginfo_winx-200,0 button gosub "Stop",*lStop pos ginfo_winx-100,0 button gosub "Step",*lStep gosub *lFileLoad stop *lFileLoad dialog "mp4;*.avi;*.mpg;*.mpeg",16 if stat=0{ if LOADED{ return }else{ stop } } file=refstr gosub *lLoad IMFPMediaPlayer_SetRate iMFPlayer,1.3 ;1.3倍速再生 return *lLoad if LOADED{ gosub *lRelease } MFStartup MFPCreateMediaPlayer file, 1,0,0,hwnd,iMFPlayer ; ↑0にすると自動再生しない LOADED=1 return *lRelease gosub *lStop IMFPMediaPlayer_Shutdown iMFPlayer MFShutdown return *lPlay if LOADED : IMFPMediaPlayer_Play iMFPlayer return *lPause if LOADED : IMFPMediaPlayer_Pause iMFPlayer return *lStop if LOADED : IMFPMediaPlayer_Stop iMFPlayer return *lStep if LOADED : IMFPMediaPlayer_FrameStep iMFPlayer return *lEnd if LOADED{ gosub *lRelease } mes "MFShutdown:"+stat end



この記事に返信する


ニボッシー

リンク

2015/4/28(Tue) 20:14:39|NO.68847

>脳漿さん
詳しい説明有り難うございます!
#define IMFPMediaPlayer_SetVideoSourceRect(This,pnrcSource) \
( (This)->lpVtbl -> SetVideoSourceRect(This,pnrcSource) )
を見つけインデックスは27という所までは分かったのですが

>上に書いた要領で SetVideoSourceRect メソッドを定義して使う
>引数は float 型が入った構造体、Artlet2D(a2d.hsp) にある alFloat() を使って配列(要素数4)を作って渡す
ここの部分がよく分かりませんでした。

#comfunc IMFPMediaPlayer_SetVideoSourceRect 27 ????



ニボッシー

リンク

2015/4/29(Wed) 21:42:18|NO.68891

>脳漿さん
いえいえこちらこそ詳しい説明助かりました
インデックスの調べ方しかまだ良くわかってないですが
また徐々に勉強していきたいと思います。
無事リサイズできましたありがとうございます!
rectをいじると比率などをいじれるんですね



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