掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
オーバーレイされない? (ID:38592)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
上に書かれている「壁紙ビデオ レンダラ」の作者です。 使ってみようなどという物好きな方がいらっしゃるかどうか判りませんが、一応ご参考までに、Delphi で使う場合の簡単なサンプル コーディングです。 エラー処理等は適宜入れてください。 uses Windows, ActiveX, … : const CLSID_FilterGraph: TGUID = '{E436EBB3-524F-11CE-9F53-0020AF0BA770}'; CLSID_CaptureGraphBuilder2: TGUID = '{BF87B6E1-8C27-11D0-B3F0-00AA003761C5}'; CLSID_AsyncReader: TGUID = '{E436EBB5-524F-11CE-9F53-0020AF0BA770}'; CLSID_Wallpaper: TGUID = '{9A1585D2-CECD-432D-B8AA-F1F91F217D47}'; IID_IGraphBuilder: TGUID = '{56A868A9-0AD4-11CE-B03A-0020AF0BA770}'; IID_ICaptureGraphBuilder2: TGUID = '{93E5A4E0-2D50-11D2-ABFA-00A0C9C6E38D}'; IID_IBaseFilter: TGUID = '{56A86895-0AD4-11CE-B03A-0020AF0BA770}'; IID_IFileSourceFilter: TGUID = '{56A868A6-0AD4-11CE-B03A-0020AF0BA770}'; IID_IMediaControl: TGUID = '{56A868B1-0AD4-11CE-B03A-0020AF0BA770}'; : type PLONGLONG = ^LONGLONG; IBaseFilter = interface; TAM_MEDIA_TYPE = record majortype: TGUID; subtype: TGUID; bFixedSizeSamples: BOOL; bTemporalCompression: BOOL; lSampleSize: ULONG; formattype: TGUID; pUnk: IUnknown; cbFormat: ULONG; pbFormat: Pointer; end; PAM_MEDIA_TYPE = ^TAM_MEDIA_TYPE; IFilterGraph = interface(IUnknown) ['{56A8689F-0AD4-11CE-B03A-0020AF0BA770}'] function AddFilter(pFilter: IBaseFilter; const pName: LPCWSTR): HResult; stdcall; function RemoveFilter(pFilter: IBaseFilter): HResult; stdcall; function EnumFilters(out ppEnum: IUnknown): HResult; stdcall; function FindFilterByName(const pName: LPCWSTR; out ppFilter: IBaseFilter): HResult; stdcall; function ConnectDirect(ppinOut: IUnknown; ppinIn: IUnknown; pmt: PAM_MEDIA_TYPE): HResult; stdcall; function Reconnect(ppin: IUnknown): HResult; stdcall; function Disconnect(ppin: IUnknown): HResult; stdcall; function SetDefaultSyncSource: HResult; stdcall; end; IGraphBuilder = interface(IFilterGraph) ['{56A868A9-0AD4-11CE-B03A-0020AF0BA770}'] function Connect(ppinOut: IUnknown; ppinIn: IUnknown): HResult; stdcall; function Render(ppinOut: IUnknown): HResult; stdcall; function RenderFile(const lpwstrFile: LPCWSTR; lpwstrPlayList: LPCWSTR): HResult; stdcall; function AddSourceFilter(const lpwstrFileName: LPCWSTR; const lpwstrFilterName: LPCWSTR; out ppFilter: IBaseFilter): HResult; stdcall; function SetLogFile(hFile: THandle): HResult; stdcall; function Abort: HResult; stdcall; function ShouldOperationContinue: HResult; stdcall; end; TPIN_DIRECTION = ( PINDIR_INPUT, PINDIR_OUTPUT ); ICaptureGraphBuilder2 = interface(IUnknown) ['{93E5A4E0-2D50-11D2-ABFA-00A0C9C6E38D}'] function SetFiltergraph(pfg: IGraphBuilder): HResult; stdcall; function GetFiltergraph(out ppfg: IGraphBuilder): HResult; stdcall; function SetOutputFileName(const pType: TGUID; const lpwstrFile: POLESTR; out ppf: IBaseFilter; pSink: IUnknown): HResult; stdcall; function FindInterface(pCategory: PGUID; pType: PGUID; pf: IBaseFilter; const riid: TIID; out ppint: Pointer): HResult; stdcall; function RenderStream(pCategory: PGUID; pType: PGUID; pSource: IUnknown; pfCompressor: IBaseFilter; pfRenderer: IBaseFilter): HResult; stdcall; function ControlStream(const pCategory: TGUID; pType: PGUID; pFilter: IBaseFilter; pstart: PLONGLONG; pstop: PLONGLONG; wStartCookie: WORD; wStopCookie: WORD): HResult; stdcall; function AllocCapFile(const lpwstr: POLESTR; dwlSize: Int64{DWORDLONG}): HResult; stdcall; function CopyCaptureFile(const lpwstrOld: POLESTR; const lpwstrNew: POLESTR; fAllowEscAbort: Integer; pCallback: IUnknown): HResult; stdcall; function FindPin(pSource: IUnknown; pindir: TPIN_DIRECTION; pCategory: PGUID; pType: PGUID; fUnconnected: BOOL; num: Integer; out ppPin: IUnknown): HResult; stdcall; end; TFILTER_STATE = ( State_Stopped, State_Paused, State_Running ); IMediaFilter = interface(IPersist) ['{56A86899-0AD4-11CE-B03A-0020AF0BA770}'] function Stop: HResult; stdcall; function Pause: HResult; stdcall; function Run(tStart: LONGLONG): HResult; stdcall; function GetState(dwMilliSecsTimeout: DWORD; out State: TFILTER_STATE): HResult; stdcall; function SetSyncSource(pClock: IUnknown): HResult; stdcall; function GetSyncSource(out pClock: IUnknown): HResult; stdcall; end; TFILTER_INFO = record achName: array[0..127] of WCHAR; pGraph: IFilterGraph; end; IBaseFilter = interface(IMediaFilter) ['{56A86895-0AD4-11CE-B03A-0020AF0BA770}'] function EnumPins(out ppEnum: IUnknown): HResult; stdcall; function FindPin(const Id: LPCWSTR; out ppPin: IUnknown): HResult; stdcall; function QueryFilterInfo(out pInfo: TFILTER_INFO): HResult; stdcall; function JoinFilterGraph(pGraph: IFilterGraph; const pName: LPCWSTR): HResult; stdcall; function QueryVendorInfo(out pVendorInfo: LPWSTR): HResult; stdcall; end; IFileSourceFilter = interface(IUnknown) ['{56A868A6-0AD4-11CE-B03A-0020AF0BA770}'] function Load(const pszFileName: POLESTR; pmt: PAM_MEDIA_TYPE): HResult; stdcall; function GetCurfile(out ppszFileName: POLESTR; out pmt: TAM_MEDIA_TYPE): HResult; stdcall; end; IMediaControl = interface(IDispatch) ['{56A868B1-0AD4-11CE-B03A-0020AF0BA770}'] function Run: HResult; stdcall; function Pause: HResult; stdcall; function Stop: HResult; stdcall; function GetState(msTimeout: Integer; out pfs: Integer): HResult; stdcall; function RenderFile(const strFilename: TBStr): HResult; stdcall; function AddSourceFilter(const strFilename: TBStr; out ppUnk: IDispatch): HResult; stdcall; function get_FilterCollection(out ppUnk: IDispatch): HResult; stdcall; function get_RegFilterCollection(out ppUnk: IDispatch): HResult; stdcall; function StopWhenReady: HResult; stdcall; end; : var gb: IGraphBuilder; cgb2: ICaptureGraphBuilder2; src: IBaseFilter; fsf: IFileSourceFilter; wall: IBaseFilter; mc: IMediaControl; : CoInitialize(nil); {グラフ作成} CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, gb); CoCreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, cgb2); cgb2.SetFiltergraph(gb); {ソース追加} CoCreateInstance(CLSID_AsyncReader, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter, src); src.QueryInterface(IFileSourceFilter, fsf); fsf.Load('nantoka.avi', nil); gb.AddFilter(src, 'Video Source'); {レンダラ追加} CoCreateInstance(CLSID_Wallpaper, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter, wall); gb.AddFilter(wall, 'Video Renderer'); {フィルタ接続} cgb2.RenderStream(nil, nil, src, nil, wall); {実行} gb.QueryInterface(IID_IMediaControl, mc); mc.Run(); : {停止} mc.Stop(); mc := nil; cgb2 := nil; gb := nil; src := nil; fsf := nil; wall := nil; CoUninitialize();
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.