青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 67  文章 - 171  trackbacks - 0
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

常用鏈接

留言簿(10)

隨筆分類

隨筆檔案

連接資料

最新隨筆

搜索

  •  

最新隨筆

最新評論

哎呀 今天借了王明的 程序員成長攻略一書,發(fā)現(xiàn)里頭好多錯(cuò)誤的。 不過自己還是看出了 后來看看網(wǎng)上的 哎呀別人寫的好多了。就轉(zhuǎn)下來把!



 

3.2使用視頻捕獲

3.2.1創(chuàng)建捕獲窗體

 

下面的例子通過使用capCreateCaptureWindow函數(shù)來創(chuàng)建一個(gè)捕獲窗體

hWndC = capCreateCaptureWindow (

    (LPSTR) "My Capture Window",       // 如果是Pop-up窗口的窗口名稱

    WS_CHILD | WS_VISIBLE,          // 窗口類型

    0, 0, 160, 120,                      // 窗口位置和尺寸

    (HWND) hwndParent,

    (int) nID /* child ID */);

 

 

 

3.2.2連接到一個(gè)捕獲驅(qū)動(dòng)器

 

下面舉例,如何通過捕獲窗口的句柄hWndC連接到MS VIDEO驅(qū)動(dòng)程序上,同時(shí)還演示了如何斷開連接。使用capDriverDisconnect

fOK = SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0, 0L);

// 或者使用宏連接:

 

 

// fOK = capDriverConnect(hWndC, 0);

 

 

 

 

 

// 關(guān)閉連接

capDriverDisconnect (hWndC);

 

 

 

3.2.3列舉安裝的捕獲驅(qū)動(dòng)程序

 

使用capGetDriverDescription 函數(shù)來獲得系統(tǒng)已經(jīng)安裝的所有捕獲驅(qū)動(dòng)程序的名稱和版本。

char szDeviceName[80];

char szDeviceVersion[80];

for (wIndex = 0; wIndex < 10; wIndex++)

{

    if (capGetDriverDescription (wIndex, szDeviceName,

        sizeof (szDeviceName), szDeviceVersion,

        sizeof (szDeviceVersion))

    {

        // 加入名字到一個(gè)已經(jīng)安裝的設(shè)備列表中

 

 

        // 讓用戶選擇一個(gè)使用。

    }

}

 

 

 

 

 

 

3.2.4獲得捕獲驅(qū)動(dòng)器的性能參數(shù)

 

       WM_CAP_DRIVER_GET_CAPS消息可以返回捕獲驅(qū)動(dòng)程序以及其硬件的性能參數(shù)。這些信息存放在一個(gè)CAPDRIVERCAPS的數(shù)據(jù)結(jié)構(gòu)中。當(dāng)你的應(yīng)用程序的捕獲窗口連接到一個(gè)新的捕獲驅(qū)動(dòng)器后,都會刷新這個(gè)CAPDRIVERCAPS數(shù)據(jù)結(jié)構(gòu)。下面將使用capDriverGetCaps宏來獲得捕獲設(shè)備的性能參數(shù)。

CAPDRIVERCAPS CapDrvCaps;

SendMessage (hWndC, WM_CAP_DRIVER_GET_CAPS,

    sizeof (CAPDRIVERCAPS), (LONG) (LPVOID) &CapDrvCaps);

// 或者,使用宏來獲得驅(qū)動(dòng)器的新能參數(shù)

 

 

// capDriverGetCaps(hWndC, &CapDrvCaps, sizeof (CAPDRIVERCAPS));

 

 

 

 

 

3.2.5獲得捕獲窗口狀態(tài)(Status)

 

下面例子使用SetWindowPos函數(shù)區(qū)設(shè)置捕獲窗口的尺寸,這個(gè)尺寸的大小是基于輸入的視頻流大小的。輸入視頻流的尺寸大小由capGetStatus宏來獲得,獲得信息放在一個(gè)CAPSTATUS的數(shù)據(jù)結(jié)構(gòu)體中。

 

 

 

CAPSTATUS CapStatus;

capGetStatus(hWndC, &CapStatus, sizeof (CAPSTATUS));

SetWindowPos(hWndC, NULL, 0, 0, CapStatus.uiImageWidth,

             CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);

3.2.6顯示對話框區(qū)設(shè)置視頻屬性

 

       每個(gè)捕獲驅(qū)動(dòng)器都可以提高3個(gè)以上的不同對話框來控制數(shù)字視頻的特性和捕獲處理。下面的例子示范如何顯示這些對話框。在顯示每個(gè)對話框前,該例會調(diào)用capDriverGetCaps宏并且檢查返回的CAPDRIVERCAPS對象來查看是否可以能夠顯示特定的對話框。

 

 

 

CAPDRIVERCAPS CapDrvCaps;

capDriverGetCaps(hWndC, &CapDrvCaps, sizeof (CAPDRIVERCAPS)); 

// 視頻源對話框

 

 

if (CapDriverCaps.fHasDlgVideoSource)

    capDlgVideoSource(hWndC); 

// 視頻格式對話框

 

 

if (CapDriverCaps.fHasDlgVideoFormat)

{

    capDlgVideoFormat(hWndC);

   // 是否由新的圖像尺寸?Are there new image dimensions?

 

 

    capGetStatus(hWndC, &CapStatus, sizeof (CAPSTATUS));

   // 如果有,發(fā)送通知給父窗口,告訴它尺寸改變了

 

 

// 視頻顯示對話框

 

 

if (CapDriverCaps.fHasDlgVideoDisplay)

    capDlgVideoDisplay(hWndC);

 

 

 

3.2.7獲得和設(shè)定視頻格式

 

BITMAPINFO數(shù)據(jù)結(jié)構(gòu)體可以實(shí)現(xiàn)長度可調(diào)節(jié)地去適應(yīng)標(biāo)準(zhǔn)壓縮的數(shù)據(jù)格式。因?yàn)樗拈L度可以變,所以在每次獲得當(dāng)前視頻格式前,都必須去查詢這個(gè)結(jié)構(gòu)的長度以及分配的內(nèi)存大小。該例子使用了capGetVideoFormatSize宏去獲得緩存區(qū)大小,使用capGetVideoFormat宏區(qū)獲得當(dāng)前視頻格式。

 

 

 

LPBITMAPINFO lpbi;

DWORD dwSize;

 

 

 

dwSize = capGetVideoFormatSize(hWndC);

lpbi = GlobalAllocPtr (GHND, dwSize);

capGetVideoFormat(hWndC, lpbi, dwSize);

 

 

 

// 訪問視頻格式,并且釋放分配的內(nèi)存。

 

 

 

 

 

應(yīng)用程序使用capSetVideoFormat(WM_CAP_SET_VIDEOFORMAT),把一個(gè)BITMAPINFO結(jié)構(gòu)發(fā)送給捕獲窗口,顯示修改。因?yàn)橐曨l格式由設(shè)備指定的,你的應(yīng)用程序可以去檢查獲得的返回值,來知道這個(gè)視頻格式是不是公開的。

 

 

 

3.2.8預(yù)覽視頻

       下面使用capPreviewRate宏來設(shè)置預(yù)覽模式的幀頻率為66毫秒/幀,使用capPreview宏在捕獲窗口預(yù)覽圖像。

 

 

 

capPreviewRate(hWndC, 66);      // 速度,微秒

 

 

capPreview(hWndC, TRUE);       // 開始預(yù)覽

 

 

 

 

 

capPreview(hWnd, FALSE);        // 屏蔽預(yù)覽

 

 

 

3.2.9允許視頻覆蓋(Overlay)

 

下面使用capDriverGetCaps宏去檢測這個(gè)捕獲驅(qū)動(dòng)是否支持覆蓋(Overlay)模式,如果支持,就允許視頻覆蓋模式;

 

 

 

CAPDRIVERCAPS CapDrvCaps;

capDriverGetCaps(hWndC, &CapDrvCaps, sizeof (CAPDRIVERCAPS));

if (CapDrvCaps.fHasOverlay)

    capOverlay(hWndC, TRUE);

 

 

 

 

3.2.10捕獲文件命名

 

    下例使用capFileSetCaptureFile宏來指定一個(gè)要命名的文件名(mycap.avi),使用capFileAlloc宏去預(yù)分配5MB的文件。

 

 

 

char szCaptureFile[] = "MYCAP.AVI";

capFileSetCaptureFile( hWndC, szCaptureFile);

capFileAlloc( hWndC, (1024L * 1024L * 5));

 

3.2.11格式化音頻捕獲

 

下例使用capSetAudioFormat來設(shè)置音頻格式為11-KHz PCM 8-bit,立體聲。

 

 

 

WAVEFORMATEX wfex;

wfex.wFormatTag = WAVE_FORMAT_PCM;

wfex.nChannels = 2;                     // 使用立體聲

wfex.nSamplesPerSec = 11025;

wfex.nAvgBytesPerSec = 22050;

wfex.nBlockAlign = 2;

wfex.wBitsPerSample = 8;

wfex.cbSize = 0;

capSetAudioFormat(hWndC, &wfex, sizeof(WAVEFORMATEX));

 

 

 

3.2.12改變視頻捕獲設(shè)置

 

       下例使用capCaptureGetSetupcapCaptureSetSetup宏來改變捕獲速度,從默認(rèn)值(15/)10/秒。

 

 

 

CAPTUREPARMS CaptureParms;

float FramesPerSec = 10.0;

capCaptureGetSetup(hWndC, &CaptureParms, sizeof(CAPTUREPARMS));

CaptureParms.dwRequestMicroSecPerFrame = (DWORD) (1.0e6 /

    FramesPerSec);

capCaptureSetSetup(hWndC, &CaptureParms, sizeof (CAPTUREPARMS));

 

 

 

3.2.13捕獲數(shù)據(jù)

 

       下例使用capCaptureSequence宏開始視頻捕獲,使用capFileSaveAs宏從捕獲文件拷貝數(shù)據(jù)到其他文件NEWFILE.AVI中。

 

 

 

char szNewName[] = "NEWFILE.AVI";

// Set up the capture operation.

capCaptureSequence(hWndC);

// Capture.

capFileSaveAs(hWndC, szNewName);

 

 

 

3.2.14加入信息塊

 

如果你想添加其他信息(除了音視頻),你可以建一個(gè)信息塊并把它們插入到一個(gè)捕獲文件中去。信息塊可以包含這個(gè)方面的內(nèi)容。比如版權(quán)信息,視頻源的ID,外部顯示的時(shí)間信息。下面的例子保存外部時(shí)間信息SMPTE()到一個(gè)信息塊中,并加入使用capFileSetInfoChunk宏加入到捕獲文件中。

 

 

 

// This example assumes the application controls

 

 

// the video source for preroll and postroll.

CAPINFOCHUNK cic;

// .

// .

// .

cic.fccInfoID = infotypeSMPTE_TIME;

cic.lpData = "00:20:30:12";

cic.cbData = strlen (cic.lpData) + 1;

capFileSetInfoChunk (hwndC, &cic);

 

 

 

3.2.15在程序中加入回調(diào)函數(shù)

應(yīng)用程序可以注冊捕獲窗口的回調(diào)函數(shù),這樣就可以把下面的情況通知給應(yīng)用程序:

l         狀態(tài)變化了

l         錯(cuò)誤發(fā)生了

l         視頻和音頻的緩沖區(qū)的數(shù)據(jù)可以使用了

l         在捕獲期間,應(yīng)用程序?qū)?/span>yield

下面的例子將創(chuàng)建一個(gè)捕獲窗口并在應(yīng)用的消息循環(huán)中,注狀態(tài)、錯(cuò)誤、視頻流、幀的回調(diào)函數(shù)。

 

 

 

case WM_CREATE:

{

    char    achDeviceName[80] ;

    char    achDeviceVersion[100] ;

    char    achBuffer[100] ;

    WORD    wDriverCount = 0 ;

    WORD    wIndex ;

    WORD    wError ;

    HMENU   hMenu ;

 

    // 使用capCreateCaptureWindow宏創(chuàng)建一個(gè)捕獲窗體.

 

 

    ghWndCap = capCreateCaptureWindow((LPSTR)"Capture Window",

        WS_CHILD | WS_VISIBLE, 0, 0, 160, 120, (HWND) hWnd, (int) 0);

 

    // 使用capSetCallbackOnError宏注冊錯(cuò)誤回調(diào)函數(shù)

 

 

     capSetCallbackOnError(ghWndCap, fpErrorCallback);

 

    // 使用capSetCallbackOnStatus宏注冊狀態(tài)回調(diào)函數(shù)

 

 

    capSetCallbackOnStatus(ghWndCap, fpStatusCallback);

 

    //使用capSetCallbackOnVideoStream宏注冊視頻流回調(diào)函數(shù)

    capSetCallbackOnVideoStream(ghWndCap, fpVideoCallback);

 

    //使用capSetCallbackOnFrame宏注冊幀回調(diào)函數(shù)

    capSetCallbackOnFrame(ghWndCap, fpFrameCallback);

 

    // 連接到一個(gè)捕獲驅(qū)動(dòng)器上

 

 

 

 

 

    break;

}

case WM_CLOSE:

{

//使用capSetCallbackOnFrame宏關(guān)閉幀回調(diào)函數(shù)

// 類似可調(diào)用其他存在的回調(diào)函數(shù)。

 

 

 

 

 

    capSetCallbackOnFrame(hWndC, NULL);

 break;

}

 

 

 

 

 

 

 

3.2.16創(chuàng)建一個(gè)狀態(tài)回調(diào)函數(shù)

 

下面的例子是一個(gè)簡單的狀態(tài)回調(diào)函數(shù),使用capSetCallbackOnStatus宏來注冊這個(gè)回調(diào)函數(shù)。

// StatusCallbackProc: 狀態(tài)回調(diào)函數(shù)

 

 

// hWnd:            捕獲窗體句柄

 

 

// nID:              當(dāng)前狀態(tài)的狀態(tài)碼

 

 

// lpStatusText:       當(dāng)前狀態(tài)的文本字符

//

LRESULT PASCAL StatusCallbackProc(HWND hWnd, int nID,

    LPSTR lpStatusText)

{

    if (!ghWndMain)

        return FALSE;

 

    if (nID == 0) {           // 清除舊的狀態(tài)信息

        SetWindowText(ghWndMain, (LPSTR) gachAppName);

        return (LRESULT) TRUE;

    }

    // 顯示狀態(tài)ID和狀態(tài)文本..

 

 

    wsprintf(gachBuffer, "Status# %d: %s", nID, lpStatusText);

 

    SetWindowText(ghWndMain, (LPSTR)gachBuffer);

    return (LRESULT) TRUE;

}

 

3.2.17創(chuàng)建一個(gè)錯(cuò)誤的回調(diào)函數(shù)

 

下面例子是一個(gè)簡單的錯(cuò)誤回調(diào)函數(shù)。通過capSetCallbackOnError宏來注冊回調(diào)。

// ErrorCallbackProc:    錯(cuò)誤回調(diào)函數(shù)

 

 

// hWnd:              捕獲窗口句柄

 

 

// nErrID:              錯(cuò)誤代碼

 

 

// lpErrorText:          關(guān)于錯(cuò)誤的文本信息

//

LRESULT PASCAL ErrorCallbackProc(HWND hWnd, int nErrID,

    LPSTR lpErrorText)

{

 

    if (!ghWndMain)

        return FALSE;

 

    if (nErrID == 0)            // Starting a new major function.

        return TRUE;          // 清除舊的錯(cuò)誤

 

    // 顯示錯(cuò)誤ID和錯(cuò)誤文本信息

 

 

    wsprintf(gachBuffer, "Error# %d", nErrID);

 

    MessageBox(hWnd, lpErrorText, gachBuffer,

               MB_OK | MB_ICONEXCLAMATION);

 

    return (LRESULT) TRUE;

}

 

 

 

3.2.18創(chuàng)建一個(gè)幀回調(diào)函數(shù)

 

下面是一個(gè)簡單的幀回調(diào)函數(shù)。通過capSetCallbackFrame宏來注冊回調(diào)函數(shù)。

 

 

 

// FrameCallbackProc:   幀回調(diào)函數(shù)

 

 

// hWnd:              捕獲窗體句柄

 

 

// lpVHdr:             指向一個(gè)包含幀信息的數(shù)據(jù)結(jié)構(gòu)體

//

LRESULT PASCAL FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)

{

    if (!ghWndMain)

        return FALSE;

 

    wsprintf(gachBuffer, "Preview frame# %ld ", gdwFrameNum++);

    SetWindowText(ghWndMain, (LPSTR)gachBuffer);

    return (LRESULT) TRUE ;

}

 


posted on 2008-07-06 17:17 cpsprogramer 閱讀(2727) 評論(1)  編輯 收藏 引用 所屬分類: VC++

FeedBack:
# re: VFW視頻問題 2008-07-09 11:25 小七
收下了  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲图片欧美午夜| 欧美四级电影网站| 你懂的网址国产 欧美| 久久aⅴ乱码一区二区三区| 亚洲伦伦在线| 欧美大片在线观看一区| 亚洲黑丝在线| 亚洲黄色成人网| 欧美第一黄色网| 蜜桃久久av一区| 999亚洲国产精| 亚洲欧美另类久久久精品2019| 中日韩视频在线观看| 亚洲性图久久| 午夜精品福利在线| 免费一级欧美在线大片| 欧美成人国产| 欧美激情第三页| 中文在线资源观看网站视频免费不卡| 这里只有视频精品| 欧美一区二区三区日韩| 久久理论片午夜琪琪电影网| 欧美成人一品| 欧美婷婷在线| 国产女主播视频一区二区| 欧美精品在线播放| 欧美日韩一级大片网址| 国产精品久久一卡二卡| 国产精品入口66mio| 在线免费不卡视频| 亚洲三级视频| 亚洲欧美日韩网| 欧美国产日韩精品免费观看| 一片黄亚洲嫩模| 欧美在线观看网址综合| 欧美成人精品不卡视频在线观看| 国产模特精品视频久久久久| 国内精品久久久久影院 日本资源| 亚洲成人资源网| 亚洲一区二区免费看| 久久综合九色综合欧美就去吻 | 欧美专区中文字幕| 欧美国产精品v| 国产精品人成在线观看免费| 国产女人18毛片水18精品| 亚洲免费在线观看视频| 在线观看亚洲| 99精品免费视频| 欧美在线亚洲一区| 欧美激情偷拍| 久久人人97超碰人人澡爱香蕉| 美女诱惑黄网站一区| 国产女人18毛片水18精品| 亚洲人成久久| 久久精品国产亚洲aⅴ| 亚洲一区二区在线看| 蜜桃久久精品一区二区| 国产一区二区三区成人欧美日韩在线观看| 一区二区三区视频在线观看| 久久久人成影片一区二区三区观看| 99精品国产在热久久下载| 免费的成人av| 亚洲日韩欧美一区二区在线| 久久爱另类一区二区小说| 一本久道综合久久精品| 久久久91精品国产一区二区三区| 国产欧美在线观看| 午夜国产精品视频免费体验区| 欧美大片在线观看一区| 在线综合亚洲| 欧美视频一区| 亚洲天堂偷拍| 日韩亚洲在线观看| 国产精品久久久久久户外露出 | 一区二区三区产品免费精品久久75| 欧美成人小视频| 激情成人av在线| 久久五月天婷婷| 亚洲国产毛片完整版 | 欧美激情精品| 韩国精品一区二区三区| 免费观看一区| 久久免费少妇高潮久久精品99| 国产乱人伦精品一区二区| 久久久精品五月天| 久久riav二区三区| 欧美日韩亚洲三区| 欧美一区二区性| 欧美一级视频精品观看| 国产一区二区精品久久91| 欧美福利在线| 欧美日韩爆操| 香蕉久久夜色精品| 久久狠狠婷婷| 99视频精品免费观看| 一本综合久久| 国产免费一区二区三区香蕉精| 亚洲网站啪啪| 性欧美暴力猛交69hd| 在线免费观看日本欧美| 欧美日韩中文字幕在线| 国语精品中文字幕| 麻豆成人在线播放| 欧美成人午夜激情在线| 一区二区三区高清视频在线观看| 免费不卡在线视频| 欧美日韩综合不卡| 久久www免费人成看片高清| 欧美专区第一页| 国产精品劲爆视频| 欧美高清在线播放| 国产精品高清网站| 久久综合色综合88| 国产精品一区二区三区观看| 你懂的网址国产 欧美| 欧美国产精品日韩| 一区二区三区精品视频在线观看| 亚洲在线观看免费| 亚洲国产成人tv| 先锋影音网一区二区| 亚洲每日更新| 久久午夜激情| 久久精品日韩一区二区三区| 国产精品高潮呻吟久久av黑人| 亚洲国产欧美一区二区三区同亚洲 | 免费成人性网站| 国产亚洲免费的视频看| 亚洲午夜成aⅴ人片| 亚洲深夜福利网站| 欧美精品国产一区二区| 欧美激情第1页| 亚洲国产综合在线看不卡| 久久国产精品久久久久久电车| 久久精品国产综合精品| 国产欧美日韩免费看aⅴ视频| 亚洲视频在线视频| 亚洲欧美国产日韩天堂区| 欧美视频在线视频| 日韩亚洲一区二区| 亚洲视频在线播放| 欧美色综合天天久久综合精品| 亚洲国产影院| 99精品国产99久久久久久福利| 欧美电影免费观看大全| 91久久精品国产91性色tv| 日韩一级大片在线| 欧美日韩视频在线一区二区观看视频 | 亚洲欧美激情视频| 欧美资源在线观看| 国模精品一区二区三区| 久久亚洲一区二区三区四区| 欧美高清日韩| 亚洲美女在线国产| 欧美日韩在线观看一区二区| 亚洲素人一区二区| 久久久精品国产一区二区三区| 在线播放日韩欧美| 欧美激情1区2区| 亚洲视频在线观看视频| 欧美日韩高清免费| 亚洲在线成人| 国产日韩亚洲| 久久天天狠狠| 亚洲区第一页| 午夜精品免费在线| 国内精品美女av在线播放| 久热精品视频在线观看| 亚洲毛片在线观看.| 欧美在线观看天堂一区二区三区| 影音先锋日韩精品| 欧美精品尤物在线| 午夜久久tv| 91久久国产精品91久久性色| 亚洲一区不卡| 在线成人性视频| 欧美日韩国产免费观看| 午夜欧美大片免费观看| 欧美韩日一区二区三区| 性色av一区二区三区红粉影视| 亚洲电影免费观看高清完整版在线观看| 欧美精品97| 久久精品动漫| 一本色道久久综合亚洲精品婷婷| 久久一区二区三区四区五区| 在线视频欧美精品| 伊甸园精品99久久久久久| 国产精品红桃| 麻豆精品国产91久久久久久| 亚洲午夜激情| 亚洲日韩视频| 久色婷婷小香蕉久久| 亚洲专区免费| 日韩亚洲精品电影| 影音先锋亚洲精品| 国产精品日韩在线播放| 欧美日本精品一区二区三区| 久久综合网络一区二区| 午夜亚洲一区| 亚洲自拍偷拍麻豆| 亚洲视频电影在线|