線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1315
推到 Plurk!
推到 Facebook!

如何在電視端子與S端子之間選擇 擷取所需影像

尚未結案
simgen
一般會員


發表:2
回覆:3
積分:1
註冊:2004-11-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-09 22:54:02 IP:218.171.xxx.xxx 未訂閱
請教各位先進 小弟使用電視卡(附S端子 Compro 啟示錄 M800)擷取監視器攝影鏡頭信號(S端子),經多次實驗,均無法正確擷取訊號(僅能擷取TV訊號),請各位先進不吝賜教,謝謝。以下為本人撰寫程式片段 HWND hCapWnd; BITMAPINFO B; HDC hCapDc; hCapWnd = capCreateCaptureWindow("My Capture Window",WS_CHILD|WS_VISIBLE,0,0,640,480,Form1->Handle,0); hCapDc=GetDC(hCapWnd); capDriverConnect(hCapWnd,0); capPreview(hCapWnd,true); capPreviewRate(hCapWnd,1000/100); capOverlay(hCapWnd,true); B.bmiHeader.biBitCount=24; capGetVideoFormat(hCapWnd,&B,sizeof(BITMAPINFO)); SetWindowPos(hCapWnd,0,0,0,640,480,0);
fdia
一般會員


發表:4
回覆:12
積分:3
註冊:2002-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-15 05:00:23 IP:61.56.xxx.xxx 未訂閱
過濾器還沒設定是由那個裝置 In 起來, 所以預設由 Input0 的裝置,如果沒在控 制台 (Direct-X 的 Demo Amcap 有範例) 設好輸入方式,你系統預設就是 TV Tuner 為 Input0 ,要改成使用 S-Video ::StringFromPinType (TCHAR *pc, int nSize, long lType) { TCHAR *pcT; BOOL bSuccess; switch (lType) { case PhysConn_Video_Tuner: pcT = TEXT("Video Tuner"); break; case PhysConn_Video_Composite: pcT = TEXT("Video SVideo"); break; case PhysConn_Video_SVideo: pcT = TEXT("Video Composite"); break; case PhysConn_Video_RGB: pcT = TEXT("Video RGB"); break; case PhysConn_Video_YRYBY: pcT = TEXT("Video YRYBY"); break; case PhysConn_Video_SerialDigital: pcT = TEXT("Video SerialDigital"); break; case PhysConn_Video_ParallelDigital: pcT = TEXT("Video ParallelDigital");break; case PhysConn_Video_SCSI: pcT = TEXT("Video SCSI"); break; case PhysConn_Video_AUX: pcT = TEXT("Video AUX"); break; case PhysConn_Video_1394: pcT = TEXT("Video 1394"); break; case PhysConn_Video_USB: pcT = TEXT("Video USB"); break; case PhysConn_Video_VideoDecoder: pcT = TEXT("Video Decoder"); break; case PhysConn_Video_VideoEncoder: pcT = TEXT("Video Encoder"); break; case PhysConn_Audio_Tuner: pcT = TEXT("Audio Tuner"); break; case PhysConn_Audio_Line: pcT = TEXT("Audio Line"); break; case PhysConn_Audio_Mic: pcT = TEXT("Audio Mic"); break; case PhysConn_Audio_AESDigital: pcT = TEXT("Audio AESDigital"); break; case PhysConn_Audio_SPDIFDigital: pcT = TEXT("Audio SPDIFDigital"); break; case PhysConn_Audio_SCSI: pcT = TEXT("Audio SCSI"); break; case PhysConn_Audio_AUX: pcT = TEXT("Audio AUX"); break; case PhysConn_Audio_1394: pcT = TEXT("Audio 1394"); break; case PhysConn_Audio_USB: pcT = TEXT("Audio USB"); break; case PhysConn_Audio_AudioDecoder: pcT = TEXT("Audio Decoder"); break; default: pcT = TEXT("Unknown/不確定的AV輸入"); break; } 參數由 PhysConn_Video_Tuner ,改成由 PhysConn_Video_SVideo 為預設就行了。 I Love Sony
------
I Love Sony
simgen
一般會員


發表:2
回覆:3
積分:1
註冊:2004-11-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-15 11:09:51 IP:61.219.xxx.xxx 未訂閱
[quote] 過濾器還沒設定是由那個裝置 In 起來, 所以預設由 Input0 的裝置,如果沒在控 制台 (Direct-X 的 Demo Amcap 有範例) 設好輸入方式,你系統預設就是 TV Tuner 為 Input0 ,要改成使用 S-Video ::StringFromPinType (TCHAR *pc, int nSize, long lType) { TCHAR *pcT; BOOL bSuccess; switch (lType) { case PhysConn_Video_Tuner: pcT = TEXT("Video Tuner"); break; case PhysConn_Video_Composite: pcT = TEXT("Video SVideo"); break; case PhysConn_Video_SVideo: pcT = TEXT("Video Composite"); break; case PhysConn_Video_RGB: pcT = TEXT("Video RGB"); break; case PhysConn_Video_YRYBY: pcT = TEXT("Video YRYBY"); break; case PhysConn_Video_SerialDigital: pcT = TEXT("Video SerialDigital"); break; case PhysConn_Video_ParallelDigital: pcT = TEXT("Video ParallelDigital");break; case PhysConn_Video_SCSI: pcT = TEXT("Video SCSI"); break; case PhysConn_Video_AUX: pcT = TEXT("Video AUX"); break; case PhysConn_Video_1394: pcT = TEXT("Video 1394"); break; case PhysConn_Video_USB: pcT = TEXT("Video USB"); break; case PhysConn_Video_VideoDecoder: pcT = TEXT("Video Decoder"); break; case PhysConn_Video_VideoEncoder: pcT = TEXT("Video Encoder"); break; case PhysConn_Audio_Tuner: pcT = TEXT("Audio Tuner"); break; case PhysConn_Audio_Line: pcT = TEXT("Audio Line"); break; case PhysConn_Audio_Mic: pcT = TEXT("Audio Mic"); break; case PhysConn_Audio_AESDigital: pcT = TEXT("Audio AESDigital"); break; case PhysConn_Audio_SPDIFDigital: pcT = TEXT("Audio SPDIFDigital"); break; case PhysConn_Audio_SCSI: pcT = TEXT("Audio SCSI"); break; case PhysConn_Audio_AUX: pcT = TEXT("Audio AUX"); break; case PhysConn_Audio_1394: pcT = TEXT("Audio 1394"); break; case PhysConn_Audio_USB: pcT = TEXT("Audio USB"); break; case PhysConn_Audio_AudioDecoder: pcT = TEXT("Audio Decoder"); break; default: pcT = TEXT("Unknown/不確定的AV輸入"); break; } 參數由 PhysConn_Video_Tuner ,改成由 PhysConn_Video_SVideo 為預設就行了。 對不起 小弟對上面的完全沒有概念 上面的寫法 好像Visual C的寫法是嗎 可否在寫完整一點 是不是要用directshow呢 那該要如何寫呢 小弟對directx完全沒有概念說
fdia
一般會員


發表:4
回覆:12
積分:3
註冊:2002-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-16 02:35:21 IP:61.56.xxx.xxx 未訂閱
你是用 BCB6? BCB5 ? DirectX 9.0 ?  http://delphi.ktop.com.tw/topic.php?topic_id=35109   其實在站上就已經有許多範例了,可以下載回來編譯試試就知道喔.. ^.^    #pragma hdrstop    #include Unit1.h #include DShow.h #include windows.h    #define CLASSNAME VideoWindow    //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource *.dfm TForm1 *Form1; IGraphBuilder *pGraph = NULL; IMediaControl *pMediaControl = NULL; IVideoWindow *pVidWin = NULL; HWND g_hwnd; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender) {    // Create the filter graph manager. CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,  IID_IGraphBuilder, (void **)&pGraph);    //執行到這裡就不行了 請教各位高手能給小弟一些意見    改成 CoCreateInstance(CLSID_FilterGraph, IID_IGraphBuilder, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pGraph);                                   ^^^^^^^^^^^^^^^^^^ 強制轉換的方式不對吧,需要傳入正確的 source object, 如果有中文檔名需要 wchar_t 操作。        pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);    // Build the graph.  pGraph->RenderFile(LC:\\CAPTURE.AVI, NULL);    //Set the video window. g_hwnd=Form1->Handle;  pVidWin->put_Owner((OAHWND)g_hwnd); pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);    TRect grc; grc=Form1->ClientRect;    pVidWin->SetWindowPosition(0, 0, grc.right, grc.bottom);    // Run the graph. pMediaControl->Run();    } //---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender) { pVidWin->put_Visible(OAFALSE); pVidWin->put_Owner(NULL);  pMediaControl->Release(); pVidWin->Release(); pGraph->Release();    }     I Love Sony
------
I Love Sony
KENI_LIN
中階會員


發表:86
回覆:267
積分:90
註冊:2004-05-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-16 17:55:00 IP:220.228.xxx.xxx 未訂閱
我想首先要確認你要使用的影像擷取工具,像我在學習過程中,先後接觸到的是vfw,WDM(TVideoGrabber),DirectShow,最後成功的是用DirectShow,它的功能上比較齊全,你可以參考我之前遇到的問題:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=54652
------
Keni Lin
系統時間:2024-05-17 14:59:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!