




已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
這段時(shí)間閑來無事,看了看MSDN的文檔,自己翻譯了一下。一是為了學(xué)習(xí),二是對空閑時(shí)間的打發(fā)。所以也希望大家在拍磚的同時(shí),尊重我的勞動,如要轉(zhuǎn)貼請注明轉(zhuǎn)至/suntaoznz。謝謝!孫濤2005-8-6Microsoft Video for Windows (VFW) 提供的函數(shù)可以讓應(yīng)用程序去處理視頻數(shù)據(jù)。 VFW 在16位Windows的時(shí)候就被引入了。它的許多重要功能已經(jīng)被DirectX取代了。 要獲得更多的信息,你可以參考DirectX 的文檔。下面講介紹VFW的視頻捕獲:3.視頻捕獲你可以使用windows的AVICap類輕松地完成視頻捕獲。AVICap提供給應(yīng)用程序一個(gè)簡單的、基于消息的接口去訪問視頻設(shè)備和錄音設(shè)備,并且可以控制處理視頻流捕獲。3.1 關(guān)于視頻捕獲AVICap支持實(shí)是視頻流捕獲和實(shí)時(shí)單幀圖像捕獲。另外,AVICap提供了對視頻源的控制(MCI媒體控制接口設(shè)備),因此使用者可以通過應(yīng)用程序控制一個(gè)視頻源開始和結(jié)束的位置,并且可以加大對幀捕獲的控制。你使用AVICap類可以完成如下的任務(wù):l捕獲聲音和視頻,并將他們寫入到一個(gè)AVI文件中。l動態(tài)連接和斷開視頻和音頻的輸入設(shè)備。l使用覆蓋或預(yù)覽的方法去顯示當(dāng)前的視頻信號。l指定一個(gè)文件用于捕獲,并且把這個(gè)捕獲文件的內(nèi)容拷貝給另一個(gè)文件。l設(shè)定捕獲圖像速度(好多幀)。l顯示對話框用于控制視頻源和格式。l創(chuàng)建、保存、加載調(diào)色板。l拷貝圖像和調(diào)色板到剪貼板中。l捕獲并把圖像作為一個(gè)DIB位圖保存。3.1.1視頻捕獲:最簡單的方法視頻捕獲將數(shù)字化一個(gè)視頻流和音頻數(shù)據(jù),并且將他們保存在硬盤和其他存儲設(shè)備上。這里將描述如何在應(yīng)用程序中簡單地應(yīng)用視頻捕獲,它通過三句代碼實(shí)現(xiàn)。它還介紹了如何通過發(fā)送消息給視頻捕獲窗口來結(jié)束或中斷一個(gè)視頻會話。AVICap捕獲窗口可以把捕獲的音視頻信息寫入一個(gè)AVI文件中。你的應(yīng)用程序可以自由地處理這個(gè)AVI文件、管理緩存區(qū)的音視頻數(shù)據(jù)、還可以在底層訪問音視頻設(shè)備的驅(qū)動器。AVICap為應(yīng)用程序提供了一個(gè)靈活的接口。你可以使用下面的代碼,在你的應(yīng)用程序中加入視頻捕獲:HWndC=capCreateCaptureWindow ( My Own Capture Window,WS_CHILD | WS_VISIBLE,0 ,0,160,120,hwndParent,nID);SendMessage( hWndC,WM_CAP_DRIVER_CONNECT,0/* wIndex */,0L);SendMessage( hWndC,WM_CAP_SEQUENCE,0,0L);宏接口同樣有用,你可以選擇是使用宏接口還是SendMessage函數(shù)來實(shí)現(xiàn)上面的功能,不過宏接口可以讓你的代碼更加容易理解。下面就使用了宏接口。HWndC=capCreateCaptureWindow ( My Own Capture Window ,WS_CHILD | WS_VISIBLE ,0,0,160,120,hwndParent,nID);capDriverConnect( hWndC,0);/宏接口capCaptureSequence( hWndC);/宏接口你的應(yīng)用程序創(chuàng)建AVICap捕獲窗口,并和視頻設(shè)備建立連接后。你創(chuàng)建的這個(gè)捕獲窗口就準(zhǔn)備捕獲數(shù)據(jù)了。這時(shí),你可以通過發(fā)送WM_CAP_SEQUENCE消息(或capCaptureSequence宏)開始對數(shù)據(jù)進(jìn)行捕獲。WM_CAP_SEQUENCE將使用默認(rèn)設(shè)置,開始對視頻和音頻進(jìn)行捕獲,并把數(shù)據(jù)放在一個(gè)CAPTURE.AVI的文件中,捕獲動作將一直持續(xù),除非有下面的事件發(fā)生:l用戶按了ESC鍵或者鼠標(biāo)的按鈕。l你的應(yīng)用程序停止或者退出了捕獲操作。l磁盤寫滿了。在應(yīng)用程序中,你可以通過發(fā)送WM_CAP_STOP命令(或capCaptureStop)給捕獲窗口,讓它停止向文件寫數(shù)據(jù)。你還可以通過發(fā)送WM_CAP_ABORT命令(或capCaptureAbort)給捕獲窗口,讓它中斷捕獲操作。3.1.2捕獲基本設(shè)置通過對定義在CAPTUREPARMS結(jié)構(gòu)中的捕獲參數(shù)進(jìn)行修改,你可以完成:l改變捕獲的幀頻律(幀/秒);l指定用鍵盤或鼠標(biāo)去結(jié)束一個(gè)捕獲會話;l為一個(gè)捕獲會話指定時(shí)間周期;捕獲的幀頻率捕獲的幀頻率表示在一個(gè)捕獲會話中,每秒要捕獲多少幀。你通過WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到當(dāng)前捕獲的幀頻率。當(dāng)前的幀頻率被保存在CAPTUREPARMS結(jié)構(gòu)的dwRequestMicroSecPerFrame成員中。你可以對該值進(jìn)行修改,從而去改變幀頻率。該值為捕獲一幀要用的時(shí)間(單位是微秒1/1000000秒),修改后,你可以發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(或capCaptureSetSetup宏)給你的捕獲窗體,來刷新CAPTUREPARMS結(jié)構(gòu)。dwRequestMicroSecPerFrame默認(rèn)值是66667微秒,表示每秒15幀。(1000000/15=66667)退出數(shù)據(jù)捕獲你可以讓用戶按這幾種方法退出一個(gè)捕獲會話,按鍵盤上的一個(gè)鍵或幾個(gè)組合鍵、或者按鼠標(biāo)的左鍵或者是右鍵。如果用戶退出一個(gè)實(shí)時(shí)的捕獲會話,那么捕獲文件中的內(nèi)容將被系統(tǒng)丟棄掉。如果用戶退出一個(gè)步幀(step-frame)捕獲的會話,捕獲文件將保存到退出時(shí)刻前的所有數(shù)據(jù)。你可以通過發(fā)WM_CAP_GET_SEQUENCE_SETUP消息(或capCaptureGetSetup宏)給捕獲窗口,來獲得捕獲退出的設(shè)置信息。當(dāng)前的退出按鈕設(shè)置保存在CAPTUREPARMS結(jié)構(gòu)的vKeyAbort成員中,當(dāng)前的退出鼠標(biāo)設(shè)置保存在fAbortLeftMouse和fAbortRightMouse成員中。你可以改變這幾個(gè)成員,實(shí)現(xiàn)對當(dāng)前值的修改。當(dāng)你修改完成后,你可以發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(或capCaptureSetSetup宏)給你的捕獲窗體,來刷新CAPTUREPARMS結(jié)構(gòu)。vKeyAbort默認(rèn)值是VK_ESCAPE。在重新指定其他按鍵前,你必須調(diào)用RegisterHotKey函數(shù)。fAbortLeftMouse和fAbortRightMouse是TRUE。時(shí)間限定通過使用CAPTUREPARMS結(jié)構(gòu)的fLimitEnabled和wTimeLimit成員,你可以去限定一個(gè)捕獲操作的時(shí)間周期。fLimitEnabled表示是否要對捕獲操作限定時(shí)間,wTimeLimit用于指定限定時(shí)間的最大值。你發(fā)WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)給捕獲窗口,就可以得到fLimitEnabled和wTimeLimit的值。FLimitEnabled為TRUE表示要指定時(shí)間周期。WTimeLimit單位為秒。修改完成后,你可以發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(或capCaptureSetSetup宏)給你的捕獲窗體,來刷新CAPTUREPARMS結(jié)構(gòu)。fLimitEnabled默認(rèn)值為FALSE.3.1.3捕獲窗口捕獲窗體類似于一個(gè)標(biāo)準(zhǔn)控件(不如按鈕、列表框),它一般使用WS_CHILD和WS_VISIBLE窗口類型。.創(chuàng)建一個(gè)AVICap捕獲窗口使用capCreateCaptureWindow函數(shù)可以創(chuàng)建一個(gè)AVICap的捕獲窗口。這個(gè)函數(shù)返回一個(gè)窗口句柄,這個(gè)句柄就是捕獲窗口的句柄,后面其他操作就是通過發(fā)送消息給該句柄來實(shí)現(xiàn)。你可以在一個(gè)程序中創(chuàng)建多個(gè)捕獲窗口,并且每個(gè)窗口連接到不同的捕獲設(shè)備上。建立捕獲窗口到捕獲設(shè)備的連接你可以動態(tài)地連接或斷開捕獲窗口與設(shè)備間的鏈接。通過使用WM_CAP_DRIVR_CONNECT消息(或capDriverConnect宏),可以實(shí)現(xiàn)捕獲窗體與設(shè)備驅(qū)動間的連接。當(dāng)捕獲窗體和捕獲設(shè)備驅(qū)動連接后,你就可以發(fā)送針對設(shè)備的消息給該窗體了。如果你的系統(tǒng)安裝了多個(gè)捕獲設(shè)備,你可以通過在發(fā)送WM_CAP_DRIVER_CONNECT消息時(shí),設(shè)置wPrarm參數(shù)(integer)。來指定捕獲窗口與那個(gè)具體的視頻捕獲設(shè)備相連接。WPrarm參數(shù)是一個(gè)整數(shù),它表示一個(gè)系統(tǒng)已經(jīng)安裝的視頻捕獲設(shè)備列表的索引(注冊表中或這System.ini drivers中的信息)。該列表的索引從0開始。通過capGetDriverDescription函數(shù)可以獲得安裝的捕獲驅(qū)動程序的名稱和版本。你的應(yīng)用程序可以使用這個(gè)函數(shù)列舉除安裝的所有捕獲設(shè)備,讓用戶可以選擇其中一個(gè)去與捕獲窗口相聯(lián)。通過發(fā)送WM_CAP_DRIVER_GET_NAME消息(capDriverGetName宏),可以獲得與指定窗體連接的捕獲設(shè)備的名稱。通過發(fā)送WM_CAP_DRIVER_GET_VERSION消息(capDriverGetVersion宏),可以獲得與指定窗體連接的捕獲設(shè)備的版本。通過發(fā)送WM_CAP_DRIVER_DISCONNECT消息(capDriverGetDisconnect宏),可以斷開連接。當(dāng)捕獲窗體銷毀后,任何連接的視頻捕獲設(shè)備都將自動斷開。父子窗體交付一些系統(tǒng)級的消息,比如WM_PALETTECHANGED、WM_QUERYNEWPALETTE,只被發(fā)送到頂層(top-level)和overlapped窗口。如果一個(gè)捕獲窗體是一個(gè)資窗體,那它的父窗口應(yīng)該來轉(zhuǎn)寄這些消息。同樣地,假如父窗口尺寸改變了,它可能需要發(fā)送一個(gè)通知消息給捕獲窗口。相反,如果捕獲視頻尺寸變化了,捕獲窗口可能需要發(fā)一個(gè)通知消息給父窗口。最簡單的管理方法是讓捕獲窗口的尺寸等于捕獲視頻流的尺寸,隨時(shí)把改變的尺寸告訴給父窗口。捕獲窗體狀態(tài)通過發(fā)送WM_CAP_GET_STATUS消息(capGetStatus宏),可以獲得當(dāng)前捕獲窗口的狀態(tài)。這個(gè)消息得到一個(gè)CAPSTATUS結(jié)構(gòu)體的拷貝,狀態(tài)信息就在這個(gè)結(jié)構(gòu)體的成員中。CAPSTATUS結(jié)構(gòu)體包含了圖形尺寸大小、滾動位置(scroll position)、是否覆蓋(overlay)或者預(yù)覽(preview)等信息。因?yàn)樵贑APSTATUS中的信息是動態(tài)的,你的應(yīng)用程序應(yīng)該隨時(shí)去刷新這個(gè)結(jié)構(gòu)體中的內(nèi)容。改變捕獲窗口的尺寸對實(shí)際的視頻流的尺寸沒有影響。3.1.4捕獲和音頻驅(qū)動器視頻捕獲可以做這幾個(gè)方面的工作:訪問視頻源、顯示選項(xiàng)、格式和壓縮選項(xiàng)。音頻捕獲包括指定音頻格式和選擇壓縮方式。捕獲驅(qū)動性能通過發(fā)送WM_CAP_DRIVER_GET_CAPS消息(capDriverGetCaps宏),可以獲得當(dāng)前連接的捕獲設(shè)備的性能。發(fā)送該消息后,會返回一個(gè)CAPDRIVERCAPS結(jié)構(gòu)的對象。設(shè)備的性能信息,就在這個(gè)對象中。視頻對話框(Video Dialog Boxes)每個(gè)捕獲設(shè)備的驅(qū)動程序都可以為控制視頻信號和捕獲處理和視頻壓縮提供4個(gè)對話框。這些對話框中的內(nèi)容都是視頻捕獲驅(qū)動程序定義的。視頻源對話框(Video Source dialog box)用于選擇視頻輸入通道和視頻圖像的動態(tài)參數(shù)。它可以列舉出當(dāng)前連接視頻設(shè)備的信號類型(SVHS和復(fù)合類型),并且可以通過該對話框去修改圖像的色調(diào)、亮度、飽和度。你可以通過使用WM_CAP_DLG_VIDEOSOURCE消息(或capDlgVideoSource宏)來顯示和刷新這個(gè)窗口。視頻格式對話框(Video Format dialog box)用于選擇數(shù)字視頻的框架大小和視頻圖像的色深,以及捕獲視頻圖像的壓縮格式。你可以通過使用WM_CAP_DLG_VIDEOFORMAT消息(或capDlgVideoFormat宏)來顯示和刷新這個(gè)窗口。視頻顯示對話框(Video Display dialog box)用于控制視頻外觀。在該對話框上進(jìn)行了修改只是對視頻顯示起作用,對于實(shí)際的視頻數(shù)據(jù)是不會造成改變的。比如,可以改變顯示的顏色,飽和度等等.。你可以通過使用WM_CAP_DLG_VIDEODISPLAY消息(或capDlgVideoDisplay宏)來顯示和刷新這個(gè)窗口。視頻壓縮對話框(Video Compression dialog box)用于設(shè)置視頻壓縮的格式。通過使用WM_CAP_DLG_VIDEOCOMPRESSION消息(或capDlgVideoCompression宏)來顯示和刷新這個(gè)窗口。預(yù)覽和覆蓋模式(Preview and Overlay )一般,一個(gè)捕獲驅(qū)動提供兩種方式來觀看輸入的視頻流:預(yù)覽模式和覆蓋模式。如果捕獲驅(qū)動可以提供上面兩種模式,那么用戶就可以選擇其中的模式來使用。預(yù)覽模式從捕獲設(shè)備硬件傳輸數(shù)據(jù)幀到系統(tǒng)的內(nèi)存中,并且在捕獲窗口中使用GDI函數(shù)來顯示這些數(shù)據(jù)幀。當(dāng)捕獲窗口的父窗體失去焦點(diǎn)的時(shí)候,在應(yīng)用程序的視頻預(yù)覽的數(shù)據(jù)將變慢,如果父窗體獲的焦點(diǎn)后,將對預(yù)覽顯示進(jìn)行加速。因?yàn)轭A(yù)覽處理的這種處理方式將大大提高整個(gè)系統(tǒng)的效率。這里用3個(gè)消息用于控制預(yù)覽操作。lWM_CAP_SET_PREVIEW消息(capPreview宏)可以打開或者關(guān)閉預(yù)覽模式。lWM_CAP_SET_PREVIEWRATE消息(capPreviewRate宏)可以設(shè)置預(yù)覽模式下圖像的幀速度。lWM_CAP_SET_SCALE消息(capPreviewScale宏)打開或者關(guān)閉預(yù)覽視頻的縮放比例。當(dāng)預(yù)覽和縮放比例屬性都打開后,那么視頻將被縮放到和捕獲窗口尺寸一樣大。打開預(yù)覽模式后,系統(tǒng)將自動關(guān)閉覆蓋模式。覆蓋模式,將不占用CPU的處理資源,直接在顯示器上顯示視頻內(nèi)容。所用的處理是有捕獲設(shè)備硬件來完成。發(fā)送WM_CAP_SET_OVERLAY消息(或capOverlay宏)給捕獲窗口,可以打開覆蓋模式。打開覆蓋模式后,將自動關(guān)閉預(yù)覽格式。無論是預(yù)覽模式還是覆蓋模式,都可以通過發(fā)送WM_CAP_SETSCROLL消息(capSetScroollPos宏),可以設(shè)置圖像的在整個(gè)視頻幀的滾動位置(scroll position)。視頻格式通過發(fā)送WM_CAP_GET_VIDEOFORMAT消息(capGetVideoFormat宏)給視頻捕獲窗口可以得到一個(gè)結(jié)構(gòu),在這個(gè)結(jié)構(gòu)體中就包含了視頻的格式、大小。通過發(fā)送WM_CAP_SET_VIDEOFORMAT消息(capSetVideoFormat宏)給視頻捕獲窗口可以對視頻格式進(jìn)行修改設(shè)置。You can set the format of captured video data by sending theWM_CAP_SET_VIDEOFORMATmessage (or thecapSetVideoFormatmacro) to a capture window.視頻捕獲設(shè)置CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)包括了視頻流的控制參數(shù)。它允許完成如下的任務(wù):l指定幀速度(Frame rate)。l指定為視頻分配的緩存大小。l關(guān)閉或者打開音頻捕獲。l設(shè)定捕獲的時(shí)間間隔。l指定捕獲設(shè)備(MCI設(shè)備、VCR或者影碟)。l指定鍵盤或鼠標(biāo)去控制結(jié)束捕獲。l指定適用的視頻類型通過發(fā)送WM_CAP_GET_SEQENCE_SETUP消息(capCaptureGetSetup)給捕獲窗體,可以獲得一個(gè)CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)的對象,當(dāng)前視頻捕獲的設(shè)置信息就在這里面。你可以改寫CAPTUREPARMS對象的成員,來實(shí)現(xiàn)對視頻捕獲信息的修改。修改后,發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(capCaptureSetSetup)給捕獲窗體,并把這個(gè)CAPTUREPARMS對象發(fā)給捕獲窗體,就可以實(shí)現(xiàn)修改。音頻格式通過發(fā)送WM_CAP_GET_AUDIOFORMAT消息(capGetAudioFormat和capGetAudioFormatSize宏)給捕獲窗體,你就可以獲得當(dāng)前的音頻數(shù)據(jù)格式或音頻數(shù)據(jù)結(jié)構(gòu)的大小。默認(rèn)音頻捕獲格式是mono, 8-bit, 11 kHz PCM。當(dāng)你使用WM_CAP_GET_AUDIOFORMAT消息得到音頻格式后,通常會使用WAVEFORMATEX這個(gè)數(shù)據(jù)結(jié)構(gòu)。通過發(fā)送WM_CAP_SET_AUDIOFORMAT消息(capSetAudioFormat宏)給捕獲窗體,你可以設(shè)置音頻數(shù)據(jù)捕獲格式。當(dāng)設(shè)置這個(gè)音頻格式時(shí),你可以通過一個(gè)指針指向一個(gè)WAVEFORMAT,WAVEFORMATEX,或者PCMWAVEFORMAT數(shù)據(jù)結(jié)構(gòu)。3.1.5捕獲文件和緩存區(qū)捕獲文件名AVICap默認(rèn),把音視頻數(shù)據(jù)從捕獲窗口保存到當(dāng)前驅(qū)動得根目錄下,文件名稱為CAPTURE.AVI。發(fā)送WM_CAP_FILE_SET_CAPTURE_FILE消息(capFileSetCaptureFile)給捕獲窗體,可以改變保存的文件名。這個(gè)消息指定文件名;它不實(shí)際創(chuàng)建文件,分配空間,也不能打開文件。通過發(fā)送WM_CAP_FILE_GET_CAPTURE_FILE消息(capFileFGetCaptureFile宏)給捕獲窗口,就可以得到當(dāng)前文件名。保存捕獲數(shù)據(jù)到一個(gè)新文件如果用戶想保存捕獲數(shù)據(jù),把數(shù)據(jù)存到另外一個(gè)文件中??梢允褂肳M_CAP_FILE_SAVEAS消息(capFileSaveAs宏)。這個(gè)消息不能改變捕獲文件的名稱和內(nèi)容。你必須去指定新建的文件名,因?yàn)椴东@文件將保留原來的文件名稱。為捕獲文件預(yù)分配磁盤空間在捕獲操作前,先在磁盤上為捕獲文件建一個(gè)指定大小的文件。預(yù)分配空間將減少數(shù)據(jù)保存時(shí)的處理時(shí)間??梢酝ㄟ^WM_CAP_FILE_ALLOCATE消息(capFileAlloc宏)來預(yù)分配一個(gè)捕獲文件。你要預(yù)分配足夠大的磁盤空間去保存預(yù)計(jì)最大的捕獲文件。預(yù)分配磁盤空間沒有限定捕獲文件的大小。如果捕獲的數(shù)據(jù)大于了分配的空間,文件尺寸將自動變大。對一個(gè)捕獲文件進(jìn)行重寫數(shù)據(jù),將對文件的已經(jīng)分配的磁盤空間進(jìn)行重寫。通過對捕獲文件進(jìn)行磁盤碎片整理可以提高捕獲性能。要對文件進(jìn)行碎片整理,可以使用一個(gè)碎片整理工具來完成,比如Disk Defragmenter。通過使用沒壓縮的磁盤來保存數(shù)據(jù),同樣可以提高性能。因?yàn)樵诓东@期間壓縮數(shù)據(jù)將對磁盤的吞吐量進(jìn)行限制。索引大小在每個(gè)AVI文件中都會使用一個(gè)指定大小的索引去查找音視頻數(shù)據(jù)塊。在一個(gè)索引的入口定位了一個(gè)視頻幀或者一個(gè)波形聲音的緩存器。所以,這個(gè)索引的大小簡接地限定了一個(gè)捕獲文件所能保存的幀的數(shù)量上限。通過發(fā)送WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)給捕獲窗口就可以得到當(dāng)前的索引大小。這個(gè)索引大小就保存在CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)對象的一個(gè)成員中(dwIndexSize)。你可以在dwIndexSize中指定一個(gè)新的索引大小,并通過發(fā)送消息WM_CAP_SET_SEQUENCE_SETUP(capCaptureSetSetup宏)給捕獲窗口完成信息設(shè)置。索引默認(rèn)大小34,952 (允許32K幀和想匹配的聲音緩存器).音視頻塊的間隔尺寸(Granularity)數(shù)據(jù)塊的間隔尺寸是一個(gè)AVI文件的邏輯塊大小。它用于寫和讀音視頻數(shù)據(jù)塊。當(dāng)向磁盤寫音視頻數(shù)據(jù)時(shí),AVICap將在每個(gè)數(shù)據(jù)塊中加入一個(gè)必須的填充塊(filler chunks (RIFF JUNK chunks))去填充滿該數(shù)據(jù)塊。你可以使用WM_CAP_GET_SEQUENC_SETUP消息(capCaptureGetSetup)去獲得當(dāng)前的塊間隔尺寸(Granularity)。CAPTUREPARMS的wChunkGranularity成員保存的是當(dāng)前的塊間隔尺寸信息。通過對該成員的改寫,并發(fā)送WM_CAP_GET_SEQUENC_SETUP消息(capCaptureSetSetup),可以對其進(jìn)行修改。你設(shè)置該參數(shù)為零的話,那么塊間隔尺寸的值就為磁盤的扇區(qū)大小。視頻緩存區(qū)這個(gè)緩存區(qū)將視頻數(shù)據(jù)放在內(nèi)存的堆中。緩存區(qū)的大小可以改變,并且它的大小是由CAPTUREPARMS的wNumVideoRequested成員和系統(tǒng)可以的內(nèi)存大小來決定。你可以使用WM_CAP_GET_SEQUENC_SETUP消息(capCaptureGetSetup)去獲得當(dāng)前的視頻緩存區(qū)的大小。CAPTUREPARMS的wNumVideoRequested成員保存的是當(dāng)前的緩存區(qū)尺寸。通過對該成員的改寫,并發(fā)送WM_CAP_GET_SEQUENC_SETUP消息(capCaptureSetSetup),可以對其進(jìn)行修改。音頻緩存區(qū)你可以使用下面三種方法來控制捕獲的音頻數(shù)據(jù):l在捕獲中包含音頻或者不包含音頻l按要求指定音頻緩存區(qū)的大小lRequest that audio buffers be a specific size.你可以使用WM_CAP_GET_SEQUENC_SETUP消息(capCaptureGetSetup)去獲得當(dāng)前的音頻緩存區(qū)的設(shè)置。CAPTUREPARMS的fCaptureAudio指定在這次捕獲操作中是否包括對聲音的捕獲。WNumAudioRequested保存當(dāng)前要求的音頻緩存區(qū)的大小。dwAudioBufferSize保存當(dāng)前的音頻緩存區(qū)的大小。通過對該成員的改寫,并發(fā)送WM_CAP_GET_SEQUENC_SETUP消息(capCaptureSetSetup),可以對其進(jìn)行修改。fCaptureAudio默認(rèn)值是TRUE。The default buffer size (the value of) can contain 0.5 seconds of audio data or 10K, whichever is greater.3.1.6捕獲變化除了對基于持續(xù)時(shí)間間隔的流捕獲外,AVICap還支持如下的捕獲:l手控制幀捕獲lStill-image捕獲l不使用磁盤存儲的捕獲l從一個(gè)MCI設(shè)備的流捕獲(real-time and step-frame)手動幀捕獲如果你向指定捕獲視頻流中個(gè)別幀,你可以通過WM_CAP_SINGLE_FRAME_OPEN消息、WM_CAP_SINGLE_FRAME消息、WM_CAP_SINGLE_FRMAE_CLOSE消息來控制幀序列(capCaptureSingleFrameOpen、/capCaptureSingleFrame、capCaptureSigleFrameClose)。典型應(yīng)用是,這些消息用于向捕獲文件添加單獨(dú)的幀來創(chuàng)建一個(gè)動畫,WM_CAP_SINGLE_FRAME_OPEN為手動捕獲操作打開一個(gè)文件,WM_CAP_SINGLE_FRAME用于捕獲一個(gè)單獨(dú)的幀放在文件中。WM_CAP_SINGLE_FRMAE_CLOSE用于關(guān)閉這個(gè)捕獲文件。注:該操作支持音視頻同時(shí)捕獲。Still-Image捕獲如果要捕獲一個(gè)單獨(dú)的幀作為一個(gè)靜態(tài)圖像,你可以使用WM_CAP_GRAB_FRAME_NOSTOP或者WM_CAP_GRAB_FRAME消息(capGrabFrameNoStop或capGrabFrame宏)在一個(gè)幀緩存區(qū)中捕獲一個(gè)圖像。你可以通過使用下面的消息來抓獲當(dāng)前顯示的圖形WM_CAP_GRAB_FRAME,否則,使用WM_CAP_GRAB_FRAME_NOSTOP。一旦開始捕獲,你可以拷貝圖像給其他應(yīng)用程序。你可以從幀緩存區(qū)拷貝一個(gè)圖像到剪貼板(使用WM_CAP_EDIT_COPY消息或capEditCopy宏)。你還可以使用如下的消息,將緩存區(qū)的一張圖像拷貝到一個(gè)DIB位圖中(WM_CAP_FILE_SAVEDIB消息或capFileSaveDIB宏)。不使用磁盤存儲的捕獲使用WM_CAP_SEUENCE_NOFILE消息(capCaptureSequenceNoFile宏),可以不向磁盤文件寫入數(shù)據(jù)。該消息僅在配合回調(diào)函數(shù)時(shí)有用,它允許你的應(yīng)用程序直接使用音視頻數(shù)據(jù)。例如,在視頻會議中,應(yīng)用程序使用該消息區(qū)獲得視頻流。回調(diào)函數(shù)將傳輸捕獲的圖像傳送給遠(yuǎn)程的計(jì)算機(jī)。從MCI設(shè)備進(jìn)行流捕獲MCI設(shè)備加強(qiáng)了實(shí)時(shí)捕獲和步進(jìn)幀(step-frame)捕獲的處理操作。你可以指定一個(gè)MCI設(shè)備,比如一張影碟或者一盤錄像帶(VCR)來充當(dāng)視頻源。通過發(fā)送消息并指定你要選定的MCI設(shè)備的名稱。消息:WM_CAP_SET_MCI_DEVICE(capSetMCIDeviceName宏)。獲得當(dāng)前使用的設(shè)備可以使用WM_CAP_GET_MCI_DEVICE(capGetMCIDeviceName)消息。在實(shí)時(shí)捕獲中,the capture window synchronizes the capture operation and compensates for delays associated with positioning the MCI video source and initializing the resources (such as capture buffers) required for capturing data. The capture window expects a valid MCI video device to be installed in the system for capturing data this way.控制MCI設(shè)備的規(guī)格信息保存在CAPTRUEPARMS數(shù)據(jù)結(jié)構(gòu)體的數(shù)據(jù)成員中。MCI兼容的視頻源包括錄像機(jī)(VCR)和光碟。如果fMCIControl數(shù)據(jù)成員為TRUE,捕獲窗口采用MCI操作。捕獲窗口使用dwMCIStartTime和dwMCIStopTime來獲得開始和結(jié)束位置(毫秒)。如果fMCIControl數(shù)據(jù)成員的值為FALSE,dwMCIStartTime和dwMCIStopTime的值將被忽略不見。你可以使用Media Player去快速檢查MCI設(shè)備是否正確地連接到了你的系統(tǒng)上,如果在視頻顯示顯示了圖像,就表示這個(gè)視頻源正確連接到了捕獲硬件上。在步進(jìn)幀(step-frame)捕獲情況下,the capture window synchronizes the capture operation and compensates for the delays associated with positioning the MCI video source and initializing the resources required for capturing data. In addition, the capture window ensures that no frames are dropped; it steps through the video frames individually, ensuring that the frame is captured and stored before capturing the next frame in the video stream.步進(jìn)幀(step-frame)捕獲控制的規(guī)格信息保存在CAPTRUEPARMS數(shù)據(jù)結(jié)構(gòu)體的數(shù)據(jù)成員中。步進(jìn)幀(step-frame)捕獲除了使用視頻捕獲要用的數(shù)據(jù)成員外,還使用其他的數(shù)據(jù)成員:fStepMCIDevice,fStepCaptureAt2x,和wStepCaptureAverageFrames。如果數(shù)據(jù)成員fStepMCIDevice的值為TRUE,捕獲窗口采用步進(jìn)幀(step-frame)捕獲。捕獲窗口將使用這兩個(gè)參數(shù)來指定捕獲的開始和結(jié)束位置(dwMCIStartTime和dwMCIStopTime毫秒)。捕獲窗口使用fStepCaptureAt2x來決定捕獲硬件捕獲的視頻幀使用兩個(gè)普通的分辨率。使用wStepCaptureAverageFrames來指定捕獲時(shí)每幀圖像使用的時(shí)間大小。如果在一個(gè)步進(jìn)幀(step-frame)捕獲中,指定fStepCaptureAt2x為TRUE,那么捕獲硬件將使用兩個(gè)指定的解析度來進(jìn)行捕獲(高和寬的解析度都是雙倍的)。它使用軟件,在指定的解析度的基礎(chǔ)上改寫圖像的象素,讓其成為更高解析度的圖像。如果硬件不支持基于硬件的批量處理,你也可以使用該選項(xiàng)。并且捕獲為RGB格式。注意:如果你的硬件步支持基于硬件的批量處理(hardware-based decimation), it can capture samples at a higher rate than specified and use these additional samples to obtain color definitions that are more consistent with the original image. The additional samples are discarded after they are used, and the hardware passes samples to the capture driver at the specified rate。如果指定了步進(jìn)幀捕獲,wStepCaptureAverageFrames成員用于指定捕獲一幀圖像要使用的時(shí)間,它是一個(gè)采樣的標(biāo)準(zhǔn)時(shí)間。以后捕獲圖像捕獲平均時(shí)間都會基于這個(gè)時(shí)間。采用這種機(jī)制,降會減少在一個(gè)圖像幀的隨機(jī)數(shù)字化噪音。這個(gè)數(shù)據(jù)成員的標(biāo)準(zhǔn)值是5。關(guān)于MCI的信息可以查看MSDN上的信息。3.1.7高級捕獲選項(xiàng)這節(jié)描述在一個(gè)捕獲操作中,你還可以進(jìn)行的其他選擇。l測量視頻質(zhì)量l用戶初始化捕獲l和調(diào)色板一起工作l在AVI文件中的嵌入信息塊l用戶數(shù)據(jù)消息(Messages)測量視頻質(zhì)量測量視頻質(zhì)量的一個(gè)方法是去限定在一個(gè)捕獲操作期間丟掉的捕獲圖像幀的數(shù)字。當(dāng)流捕獲完成后,質(zhì)量=丟掉的幀/所有的幀。如果這個(gè)數(shù)(百分?jǐn)?shù))大于wPercentDropForError的值,AVICap將發(fā)一個(gè)錯(cuò)誤信息給錯(cuò)誤回調(diào)函數(shù)。WPercentDropForError是CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)體的一個(gè)數(shù)據(jù)成員。通過WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到當(dāng)前設(shè)定的丟掉幀的限定值。同樣對wPercentDropForError進(jìn)行修改,再把修改后的數(shù)據(jù)結(jié)構(gòu)體發(fā)送給捕獲窗體就可以完成對限定值的修改。WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureSetSetup),wPercentDropForErrorm默認(rèn)值10 (10)。用戶初始化捕獲通過WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到當(dāng)前用戶初始化捕獲的狀態(tài)值。該值存放在fMakeUserHitOKToCapture中。在開始一個(gè)捕獲會話前,設(shè)置該值為TRUE,可以為用戶提供精確的控制。系統(tǒng)為所有的音視頻分配好數(shù)據(jù)緩存區(qū)后,AVICap會顯示一個(gè)對話框。它讓用戶清除因?yàn)檐浖跏蓟瘜?dǎo)致的捕獲延遲。如果你的應(yīng)用程序?yàn)橐曨l數(shù)據(jù)分配的數(shù)據(jù)緩存區(qū)很小,那么這個(gè)對話框可能就沒的必要了。該值的默認(rèn)值是FALSE。和調(diào)色板一起工作最初,如果視頻捕獲格式需要一個(gè)調(diào)色板,那么捕獲窗口將使用捕獲驅(qū)動提供的調(diào)色板來代替。這個(gè)調(diào)色板可能由灰度值,或者可選的彩色值組成。使用WM_CAP_PAL_PASTE或者WM_CAP_PAL_OPEN消息(capPalettePaste或capPaletteOpen)可以獲得一個(gè)現(xiàn)存的調(diào)色板去替換默認(rèn)的調(diào)色板。你還可以創(chuàng)建一個(gè)自定義的調(diào)色板去替換默認(rèn)的調(diào)色板,你要使用WM_CAP_PAL_AUTOCREATE或者WM_CAP_PAL_MANUALCREATE消息(capPaletteAuto或capPaletteManual)。當(dāng)你替換了調(diào)色板后,捕獲窗體和驅(qū)動程序?qū)⑹褂锰鎿Q后的調(diào)色板,直到你創(chuàng)建或打開其他的調(diào)色板為止。WM_CAP_PAL_AUTOCREATE或者WM_CAP_PAL_MANUALCREATE消息將創(chuàng)建一個(gè)基于當(dāng)前視頻輸入最優(yōu)化的調(diào)色板。這個(gè)自定義的調(diào)色板將為視頻提供一個(gè)最好的顏色逼真度,因?yàn)檫@個(gè)調(diào)色板的顏色是基于這個(gè)視頻的。捕獲窗口創(chuàng)建一個(gè)采樣顏色的3維柱狀圖。它會減小真實(shí)顏色和漸近色間的值。在發(fā)送WM_CAP_PAL_AUTOCREATE消息時(shí),你必須指定AVICap采樣的幀數(shù)以及調(diào)色板的顏色尺寸。在指定幀數(shù)時(shí),要保證幀數(shù)足夠大以保證所有的視頻顏色可以被采樣收集到。使用WM_CAP_PAL_MANUALCREATE消息可以對當(dāng)前幀進(jìn)行采樣。通過該消息,進(jìn)行幾次手動選擇幀采樣操作,你可以創(chuàng)建自己的調(diào)色板,它包含了你想要的顏色信息。一個(gè)調(diào)色板可以包含256種顏色。如果你要合并調(diào)色板,或者在視頻隊(duì)列中同時(shí)在顯示其他視頻或圖像。你可以去使用一個(gè)小的顏色集合,這樣不同圖像或視頻的顏色就可以共存了。使用WM_CAP_PAL_SAVE消息(capPaletteSave),可以保促一個(gè)新的調(diào)色板。通過WM_CAP_PAL_OPEN消息還可以得到當(dāng)前的調(diào)色板。你可以在調(diào)色板處理前保存一個(gè)調(diào)色板,或者為其他應(yīng)用程序使用去保存一個(gè)調(diào)色板。使用WM_CAP_PAL_PASTE可以把剪貼板中的調(diào)色板粘貼到捕獲窗口中。捕獲窗口通過這個(gè)調(diào)色板到捕獲驅(qū)動。其他程序可以拷貝調(diào)色板到剪貼板中。你也可以把調(diào)色板粘貼到剪貼板中。使用WM_CAP_ENDIT_COPY消息(capEditCopy)。它將拷貝視頻緩存區(qū)(包括調(diào)色板)到剪貼區(qū)。在AVI文件中的嵌入信息塊你可以在一個(gè)AVI文件中插入信息塊,比如文本或者自定義的數(shù)據(jù)。通過使用下面的消息:WM_CAP_FILE_SET_INFOCHUNK(capFileSetInfoChunk)。可以使用這個(gè)消息還可以清除掉一個(gè)AVI文件中的信息塊。用戶數(shù)據(jù)消息通過使用WM_CAP_GET_USER_DATA和WM_CAP_SET_USER_DATA消息可以關(guān)聯(lián)數(shù)據(jù)到一個(gè)捕獲窗體。(capGetUserData和capSetUserData宏)。使用Get消息可以得到一個(gè)LONG數(shù)據(jù)值,可以通過_Set_消息去設(shè)置該值。3.1.8 AVICap回調(diào)函數(shù)你的應(yīng)用程序可以為一個(gè)捕獲窗口注冊一些回調(diào)函數(shù),它們可以告訴你的應(yīng)用程序一些變化。比如捕獲狀態(tài)發(fā)生變化了,或者有錯(cuò)誤發(fā)生了,音視頻緩存區(qū)可使用了。下面的消息設(shè)置回調(diào)函數(shù)。消息說明WM_CAP_SET_CALLBACK_CAPCONTROLCapSetCallbackOnCapControl宏在應(yīng)用程序中指定回調(diào)函數(shù)用于控制捕獲的開始和結(jié)束。WM_CAP_SET_CALLBACK_ERRORCapSetCallbackOnError宏在應(yīng)用程序中指定回調(diào)函數(shù),當(dāng)出錯(cuò)的時(shí)候就調(diào)用它。WM_CAP_SET_CALLBACK_FRAMECapSetCallbackOnFrame宏在應(yīng)用程序中指定回調(diào)函數(shù),當(dāng)預(yù)覽圖像幀被捕獲了的時(shí)候就調(diào)用它。WM_CAP_SET_CALLBACK_STATUSCapSetCallbackOnStatus宏在應(yīng)用程序中指定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (二模)晉中市2025年3月高考適應(yīng)性訓(xùn)練考試 地理試卷(含A+B卷答案詳解)
- 2025年初中人教版八年級上冊第二章第二節(jié)聲音的特性說課稿
- 4.2《光的反射》說課稿 2025年初中 人教版物理八年級上冊
- 【東吳證券】AI+服務(wù)消費(fèi)專題報(bào)告:AI在各消費(fèi)場景的落地空間-進(jìn)展幾何
- 理付款授權(quán)委托書
- 新能源申請電表委托書
- 研發(fā)中心裝修保修合同樣本
- 農(nóng)業(yè)人才培養(yǎng)與引進(jìn)發(fā)展方案
- 工廠光伏太陽能發(fā)電
- 施工現(xiàn)場安全隱患整改方案
- 第三單元名著閱讀《經(jīng)典常談》-2023-2024學(xué)年八年級語文下冊同步教學(xué)課件
- 排污許可證申請與核發(fā)技術(shù)規(guī)范 火電(二次征求意見稿)
- QB-T 2673-2023 鞋類產(chǎn)品標(biāo)識
- 鄰近鐵路營業(yè)線施工安全監(jiān)測技術(shù)規(guī)程 (TB 10314-2021)
- 《中國帕金森病診療指南(第四版)》(2023)要點(diǎn)
- 2024年揚(yáng)州市職業(yè)大學(xué)高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 2024年北京京北職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 流感病人護(hù)理版
- 中學(xué)生睡眠質(zhì)量研究性學(xué)習(xí)報(bào)告
- 酒店水單賬單范本
- 空壓機(jī)(儲氣罐)日常安全檢查表
評論
0/150
提交評論