全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1755
推到 Plurk!
推到 Facebook!

RenderStream會自動關閉程式

尚未結案
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-13 21:07:38 IP:60.251.xxx.xxx 訂閱
請教各位前輩
我如果在compiler中的時候按下F9,不管在Project->Option->compiler->debugging是否有勾選
執行pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, NULL, pCapSourceFilter,NULL,VideoFilter);時
都會在DSPack中的Result := S_OK;執行後,程式自動關閉
如果是直接執行執行檔時,程式可以正常執行,請問可能是有什麼樣的問題發生?

下面是DSPack中的一段程式碼
[code cpp]
function TFilterGraph.SelectedFilter(pMon: IMoniker): HResult; stdcall;
var
PropBag: IPropertyBag;
Name: OleVariant;
vGuid: OleVariant;
Guid: TGUID;
begin
if Assigned(FOnSelectedFilter) then
begin
pMon.BindToStorage(nil, nil, IID_IPropertyBag, PropBag);
if PropBag.Read('CLSID',vGuid,nil) = S_OK then Guid := StringToGUID(vGuid)
else Guid := GUID_NULL;
if PropBag.Read('FriendlyName', Name, nil) <> S_OK then Name := '';

PropBag := nil;
if FOnSelectedFilter(pMon,Name,Guid)
then Result := S_OK
else Result := E_FAIL;
end else
Result := S_OK;
end;
[/code]

下面是我寫的fucntion
[code cpp]
IBaseFilter *pCapSourceFilter = NULL;//capture
void __fastcall TMainForm::DevicesClick(TObject *Sender)
{
static int iOrder, iLastOrder;

if ( !BChangeResolution )
iOrder = ((TMenuItem *)Sender)->Tag;
else
iOrder = iLastOrder;

if ( iOrder == 0 )
return;
iLastOrder = iOrder;

FilterGraph->ClearGraph();
FilterGraph->Active = false;
Filter->BaseFilter->Moniker = SysDev->GetMoniker(iOrder-1);
FilterGraph->Active = true;
//encapsulated interface pointer with the specified IID and returns the resulting raw interface pointer in p.
CheckDSError(FilterGraph->QueryInterface(IID_ICaptureGraphBuilder2, &pBuild));//find capture interface of filter graph
#define WM_GRAPHNOTIFY WM_APP 1 // Private message.
pEvent->SetNotifyWindow((OAHWND)MainForm->Handle, WM_GRAPHNOTIFY, 0);

CheckDSError(VideoWindow->QueryInterface(IID_IBaseFilter, &VideoFilter));
if ( (hr = Filter->QueryInterface(IID_IBaseFilter, &pCapSourceFilter)) != S_OK )
{
Xprintf("%d, pCapSourceFilter fail",iOrder);
return;
}
/////////////////////////////////////////

//for capture use
CheckDSError( pBuild->FindInterface(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,pCapSourceFilter
,IID_IAMStreamConfig,(void**)&pConfig));
int iCount = 0, iSize = 0;
hr = pConfig->GetNumberOfCapabilities(&iCount, &iSize);
// Check the size to make sure we pass in the correct structure.
if ( (hr == S_OK) && (iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS)) )
{
CheckVideoFmt(READ,0,iCount);//show all resolution
}//if ( (hr == S_OK) && (iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS)) )

//********************** for preview use ****************************
pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, NULL, pCapSourceFilter,NULL,VideoFilter);
...
}
[/code]
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-14 08:52:14 IP:163.28.xxx.xxx 訂閱
老實說 我也有碰過這種情況, 不過與你環境不太一樣..
我是使用DirectShow filter under DX9 For BCB.
------
FPGA驗證, FPGA開發平台, http://smims.com
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-14 09:18:19 IP:60.251.xxx.xxx 訂閱
我的環境是XP SP2(NB用Vista SP1) + BCB6 + Microsoft DirectX SDK (December 2004及November 2008都有試)
我半年前寫的時候記得沒有這個問題,最近拿出來debug時才發現的
我在猜想是我這半年來灌了一些軟體的影響,主要有灌Microsoft SDKs,Keil C, VC6及VS2008,不知道會不會有影響
系統時間:2024-04-26 22:40:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!