已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
這段時間閑來無事,看了看MSDN的文檔,自己翻譯了一下。一是為了學習,二是對空閑時間的打發(fā)。所以也希望大家在拍磚的同時,尊重我的勞動,如要轉(zhuǎn)貼請注明轉(zhuǎn)至/suntaoznz。謝謝!孫濤2005-8-6Microsoft Video for Windows (VFW) 提供的函數(shù)可以讓應用程序去處理視頻數(shù)據(jù)。 VFW 在16位Windows的時候就被引入了。它的許多重要功能已經(jīng)被DirectX取代了。 要獲得更多的信息,你可以參考DirectX 的文檔。下面講介紹VFW的視頻捕獲:3.視頻捕獲你可以使用windows的AVICap類輕松地完成視頻捕獲。AVICap提供給應用程序一個簡單的、基于消息的接口去訪問視頻設(shè)備和錄音設(shè)備,并且可以控制處理視頻流捕獲。3.1 關(guān)于視頻捕獲AVICap支持實是視頻流捕獲和實時單幀圖像捕獲。另外,AVICap提供了對視頻源的控制(MCI媒體控制接口設(shè)備),因此使用者可以通過應用程序控制一個視頻源開始和結(jié)束的位置,并且可以加大對幀捕獲的控制。你使用AVICap類可以完成如下的任務:l捕獲聲音和視頻,并將他們寫入到一個AVI文件中。l動態(tài)連接和斷開視頻和音頻的輸入設(shè)備。l使用覆蓋或預覽的方法去顯示當前的視頻信號。l指定一個文件用于捕獲,并且把這個捕獲文件的內(nèi)容拷貝給另一個文件。l設(shè)定捕獲圖像速度(好多幀)。l顯示對話框用于控制視頻源和格式。l創(chuàng)建、保存、加載調(diào)色板。l拷貝圖像和調(diào)色板到剪貼板中。l捕獲并把圖像作為一個DIB位圖保存。3.1.1視頻捕獲:最簡單的方法視頻捕獲將數(shù)字化一個視頻流和音頻數(shù)據(jù),并且將他們保存在硬盤和其他存儲設(shè)備上。這里將描述如何在應用程序中簡單地應用視頻捕獲,它通過三句代碼實現(xiàn)。它還介紹了如何通過發(fā)送消息給視頻捕獲窗口來結(jié)束或中斷一個視頻會話。AVICap捕獲窗口可以把捕獲的音視頻信息寫入一個AVI文件中。你的應用程序可以自由地處理這個AVI文件、管理緩存區(qū)的音視頻數(shù)據(jù)、還可以在底層訪問音視頻設(shè)備的驅(qū)動器。AVICap為應用程序提供了一個靈活的接口。你可以使用下面的代碼,在你的應用程序中加入視頻捕獲: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ù)來實現(xiàn)上面的功能,不過宏接口可以讓你的代碼更加容易理解。下面就使用了宏接口。HWndC=capCreateCaptureWindow ( My Own Capture Window ,WS_CHILD | WS_VISIBLE ,0,0,160,120,hwndParent,nID);capDriverConnect( hWndC,0);/宏接口capCaptureSequence( hWndC);/宏接口你的應用程序創(chuàng)建AVICap捕獲窗口,并和視頻設(shè)備建立連接后。你創(chuàng)建的這個捕獲窗口就準備捕獲數(shù)據(jù)了。這時,你可以通過發(fā)送WM_CAP_SEQUENCE消息(或capCaptureSequence宏)開始對數(shù)據(jù)進行捕獲。WM_CAP_SEQUENCE將使用默認設(shè)置,開始對視頻和音頻進行捕獲,并把數(shù)據(jù)放在一個CAPTURE.AVI的文件中,捕獲動作將一直持續(xù),除非有下面的事件發(fā)生:l用戶按了ESC鍵或者鼠標的按鈕。l你的應用程序停止或者退出了捕獲操作。l磁盤寫滿了。在應用程序中,你可以通過發(fā)送WM_CAP_STOP命令(或capCaptureStop)給捕獲窗口,讓它停止向文件寫數(shù)據(jù)。你還可以通過發(fā)送WM_CAP_ABORT命令(或capCaptureAbort)給捕獲窗口,讓它中斷捕獲操作。3.1.2捕獲基本設(shè)置通過對定義在CAPTUREPARMS結(jié)構(gòu)中的捕獲參數(shù)進行修改,你可以完成:l改變捕獲的幀頻律(幀/秒);l指定用鍵盤或鼠標去結(jié)束一個捕獲會話;l為一個捕獲會話指定時間周期;捕獲的幀頻率捕獲的幀頻率表示在一個捕獲會話中,每秒要捕獲多少幀。你通過WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到當前捕獲的幀頻率。當前的幀頻率被保存在CAPTUREPARMS結(jié)構(gòu)的dwRequestMicroSecPerFrame成員中。你可以對該值進行修改,從而去改變幀頻率。該值為捕獲一幀要用的時間(單位是微秒1/1000000秒),修改后,你可以發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(或capCaptureSetSetup宏)給你的捕獲窗體,來刷新CAPTUREPARMS結(jié)構(gòu)。dwRequestMicroSecPerFrame默認值是66667微秒,表示每秒15幀。(1000000/15=66667)退出數(shù)據(jù)捕獲你可以讓用戶按這幾種方法退出一個捕獲會話,按鍵盤上的一個鍵或幾個組合鍵、或者按鼠標的左鍵或者是右鍵。如果用戶退出一個實時的捕獲會話,那么捕獲文件中的內(nèi)容將被系統(tǒng)丟棄掉。如果用戶退出一個步幀(step-frame)捕獲的會話,捕獲文件將保存到退出時刻前的所有數(shù)據(jù)。你可以通過發(fā)WM_CAP_GET_SEQUENCE_SETUP消息(或capCaptureGetSetup宏)給捕獲窗口,來獲得捕獲退出的設(shè)置信息。當前的退出按鈕設(shè)置保存在CAPTUREPARMS結(jié)構(gòu)的vKeyAbort成員中,當前的退出鼠標設(shè)置保存在fAbortLeftMouse和fAbortRightMouse成員中。你可以改變這幾個成員,實現(xiàn)對當前值的修改。當你修改完成后,你可以發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(或capCaptureSetSetup宏)給你的捕獲窗體,來刷新CAPTUREPARMS結(jié)構(gòu)。vKeyAbort默認值是VK_ESCAPE。在重新指定其他按鍵前,你必須調(diào)用RegisterHotKey函數(shù)。fAbortLeftMouse和fAbortRightMouse是TRUE。時間限定通過使用CAPTUREPARMS結(jié)構(gòu)的fLimitEnabled和wTimeLimit成員,你可以去限定一個捕獲操作的時間周期。fLimitEnabled表示是否要對捕獲操作限定時間,wTimeLimit用于指定限定時間的最大值。你發(fā)WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)給捕獲窗口,就可以得到fLimitEnabled和wTimeLimit的值。FLimitEnabled為TRUE表示要指定時間周期。WTimeLimit單位為秒。修改完成后,你可以發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(或capCaptureSetSetup宏)給你的捕獲窗體,來刷新CAPTUREPARMS結(jié)構(gòu)。fLimitEnabled默認值為FALSE.3.1.3捕獲窗口捕獲窗體類似于一個標準控件(不如按鈕、列表框),它一般使用WS_CHILD和WS_VISIBLE窗口類型。.創(chuàng)建一個AVICap捕獲窗口使用capCreateCaptureWindow函數(shù)可以創(chuàng)建一個AVICap的捕獲窗口。這個函數(shù)返回一個窗口句柄,這個句柄就是捕獲窗口的句柄,后面其他操作就是通過發(fā)送消息給該句柄來實現(xiàn)。你可以在一個程序中創(chuàng)建多個捕獲窗口,并且每個窗口連接到不同的捕獲設(shè)備上。建立捕獲窗口到捕獲設(shè)備的連接你可以動態(tài)地連接或斷開捕獲窗口與設(shè)備間的鏈接。通過使用WM_CAP_DRIVR_CONNECT消息(或capDriverConnect宏),可以實現(xiàn)捕獲窗體與設(shè)備驅(qū)動間的連接。當捕獲窗體和捕獲設(shè)備驅(qū)動連接后,你就可以發(fā)送針對設(shè)備的消息給該窗體了。如果你的系統(tǒng)安裝了多個捕獲設(shè)備,你可以通過在發(fā)送WM_CAP_DRIVER_CONNECT消息時,設(shè)置wPrarm參數(shù)(integer)。來指定捕獲窗口與那個具體的視頻捕獲設(shè)備相連接。WPrarm參數(shù)是一個整數(shù),它表示一個系統(tǒng)已經(jīng)安裝的視頻捕獲設(shè)備列表的索引(注冊表中或這System.ini drivers中的信息)。該列表的索引從0開始。通過capGetDriverDescription函數(shù)可以獲得安裝的捕獲驅(qū)動程序的名稱和版本。你的應用程序可以使用這個函數(shù)列舉除安裝的所有捕獲設(shè)備,讓用戶可以選擇其中一個去與捕獲窗口相聯(lián)。通過發(fā)送WM_CAP_DRIVER_GET_NAME消息(capDriverGetName宏),可以獲得與指定窗體連接的捕獲設(shè)備的名稱。通過發(fā)送WM_CAP_DRIVER_GET_VERSION消息(capDriverGetVersion宏),可以獲得與指定窗體連接的捕獲設(shè)備的版本。通過發(fā)送WM_CAP_DRIVER_DISCONNECT消息(capDriverGetDisconnect宏),可以斷開連接。當捕獲窗體銷毀后,任何連接的視頻捕獲設(shè)備都將自動斷開。父子窗體交付一些系統(tǒng)級的消息,比如WM_PALETTECHANGED、WM_QUERYNEWPALETTE,只被發(fā)送到頂層(top-level)和overlapped窗口。如果一個捕獲窗體是一個資窗體,那它的父窗口應該來轉(zhuǎn)寄這些消息。同樣地,假如父窗口尺寸改變了,它可能需要發(fā)送一個通知消息給捕獲窗口。相反,如果捕獲視頻尺寸變化了,捕獲窗口可能需要發(fā)一個通知消息給父窗口。最簡單的管理方法是讓捕獲窗口的尺寸等于捕獲視頻流的尺寸,隨時把改變的尺寸告訴給父窗口。捕獲窗體狀態(tài)通過發(fā)送WM_CAP_GET_STATUS消息(capGetStatus宏),可以獲得當前捕獲窗口的狀態(tài)。這個消息得到一個CAPSTATUS結(jié)構(gòu)體的拷貝,狀態(tài)信息就在這個結(jié)構(gòu)體的成員中。CAPSTATUS結(jié)構(gòu)體包含了圖形尺寸大小、滾動位置(scroll position)、是否覆蓋(overlay)或者預覽(preview)等信息。因為在CAPSTATUS中的信息是動態(tài)的,你的應用程序應該隨時去刷新這個結(jié)構(gòu)體中的內(nèi)容。改變捕獲窗口的尺寸對實際的視頻流的尺寸沒有影響。3.1.4捕獲和音頻驅(qū)動器視頻捕獲可以做這幾個方面的工作:訪問視頻源、顯示選項、格式和壓縮選項。音頻捕獲包括指定音頻格式和選擇壓縮方式。捕獲驅(qū)動性能通過發(fā)送WM_CAP_DRIVER_GET_CAPS消息(capDriverGetCaps宏),可以獲得當前連接的捕獲設(shè)備的性能。發(fā)送該消息后,會返回一個CAPDRIVERCAPS結(jié)構(gòu)的對象。設(shè)備的性能信息,就在這個對象中。視頻對話框(Video Dialog Boxes)每個捕獲設(shè)備的驅(qū)動程序都可以為控制視頻信號和捕獲處理和視頻壓縮提供4個對話框。這些對話框中的內(nèi)容都是視頻捕獲驅(qū)動程序定義的。視頻源對話框(Video Source dialog box)用于選擇視頻輸入通道和視頻圖像的動態(tài)參數(shù)。它可以列舉出當前連接視頻設(shè)備的信號類型(SVHS和復合類型),并且可以通過該對話框去修改圖像的色調(diào)、亮度、飽和度。你可以通過使用WM_CAP_DLG_VIDEOSOURCE消息(或capDlgVideoSource宏)來顯示和刷新這個窗口。視頻格式對話框(Video Format dialog box)用于選擇數(shù)字視頻的框架大小和視頻圖像的色深,以及捕獲視頻圖像的壓縮格式。你可以通過使用WM_CAP_DLG_VIDEOFORMAT消息(或capDlgVideoFormat宏)來顯示和刷新這個窗口。視頻顯示對話框(Video Display dialog box)用于控制視頻外觀。在該對話框上進行了修改只是對視頻顯示起作用,對于實際的視頻數(shù)據(jù)是不會造成改變的。比如,可以改變顯示的顏色,飽和度等等.。你可以通過使用WM_CAP_DLG_VIDEODISPLAY消息(或capDlgVideoDisplay宏)來顯示和刷新這個窗口。視頻壓縮對話框(Video Compression dialog box)用于設(shè)置視頻壓縮的格式。通過使用WM_CAP_DLG_VIDEOCOMPRESSION消息(或capDlgVideoCompression宏)來顯示和刷新這個窗口。預覽和覆蓋模式(Preview and Overlay )一般,一個捕獲驅(qū)動提供兩種方式來觀看輸入的視頻流:預覽模式和覆蓋模式。如果捕獲驅(qū)動可以提供上面兩種模式,那么用戶就可以選擇其中的模式來使用。預覽模式從捕獲設(shè)備硬件傳輸數(shù)據(jù)幀到系統(tǒng)的內(nèi)存中,并且在捕獲窗口中使用GDI函數(shù)來顯示這些數(shù)據(jù)幀。當捕獲窗口的父窗體失去焦點的時候,在應用程序的視頻預覽的數(shù)據(jù)將變慢,如果父窗體獲的焦點后,將對預覽顯示進行加速。因為預覽處理的這種處理方式將大大提高整個系統(tǒng)的效率。這里用3個消息用于控制預覽操作。lWM_CAP_SET_PREVIEW消息(capPreview宏)可以打開或者關(guān)閉預覽模式。lWM_CAP_SET_PREVIEWRATE消息(capPreviewRate宏)可以設(shè)置預覽模式下圖像的幀速度。lWM_CAP_SET_SCALE消息(capPreviewScale宏)打開或者關(guān)閉預覽視頻的縮放比例。當預覽和縮放比例屬性都打開后,那么視頻將被縮放到和捕獲窗口尺寸一樣大。打開預覽模式后,系統(tǒng)將自動關(guān)閉覆蓋模式。覆蓋模式,將不占用CPU的處理資源,直接在顯示器上顯示視頻內(nèi)容。所用的處理是有捕獲設(shè)備硬件來完成。發(fā)送WM_CAP_SET_OVERLAY消息(或capOverlay宏)給捕獲窗口,可以打開覆蓋模式。打開覆蓋模式后,將自動關(guān)閉預覽格式。無論是預覽模式還是覆蓋模式,都可以通過發(fā)送WM_CAP_SETSCROLL消息(capSetScroollPos宏),可以設(shè)置圖像的在整個視頻幀的滾動位置(scroll position)。視頻格式通過發(fā)送WM_CAP_GET_VIDEOFORMAT消息(capGetVideoFormat宏)給視頻捕獲窗口可以得到一個結(jié)構(gòu),在這個結(jié)構(gòu)體中就包含了視頻的格式、大小。通過發(fā)送WM_CAP_SET_VIDEOFORMAT消息(capSetVideoFormat宏)給視頻捕獲窗口可以對視頻格式進行修改設(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ù)。它允許完成如下的任務:l指定幀速度(Frame rate)。l指定為視頻分配的緩存大小。l關(guān)閉或者打開音頻捕獲。l設(shè)定捕獲的時間間隔。l指定捕獲設(shè)備(MCI設(shè)備、VCR或者影碟)。l指定鍵盤或鼠標去控制結(jié)束捕獲。l指定適用的視頻類型通過發(fā)送WM_CAP_GET_SEQENCE_SETUP消息(capCaptureGetSetup)給捕獲窗體,可以獲得一個CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)的對象,當前視頻捕獲的設(shè)置信息就在這里面。你可以改寫CAPTUREPARMS對象的成員,來實現(xiàn)對視頻捕獲信息的修改。修改后,發(fā)送WM_CAP_SET_SEQUENCE_SETUP消息(capCaptureSetSetup)給捕獲窗體,并把這個CAPTUREPARMS對象發(fā)給捕獲窗體,就可以實現(xiàn)修改。音頻格式通過發(fā)送WM_CAP_GET_AUDIOFORMAT消息(capGetAudioFormat和capGetAudioFormatSize宏)給捕獲窗體,你就可以獲得當前的音頻數(shù)據(jù)格式或音頻數(shù)據(jù)結(jié)構(gòu)的大小。默認音頻捕獲格式是mono, 8-bit, 11 kHz PCM。當你使用WM_CAP_GET_AUDIOFORMAT消息得到音頻格式后,通常會使用WAVEFORMATEX這個數(shù)據(jù)結(jié)構(gòu)。通過發(fā)送WM_CAP_SET_AUDIOFORMAT消息(capSetAudioFormat宏)給捕獲窗體,你可以設(shè)置音頻數(shù)據(jù)捕獲格式。當設(shè)置這個音頻格式時,你可以通過一個指針指向一個WAVEFORMAT,WAVEFORMATEX,或者PCMWAVEFORMAT數(shù)據(jù)結(jié)構(gòu)。3.1.5捕獲文件和緩存區(qū)捕獲文件名AVICap默認,把音視頻數(shù)據(jù)從捕獲窗口保存到當前驅(qū)動得根目錄下,文件名稱為CAPTURE.AVI。發(fā)送WM_CAP_FILE_SET_CAPTURE_FILE消息(capFileSetCaptureFile)給捕獲窗體,可以改變保存的文件名。這個消息指定文件名;它不實際創(chuàng)建文件,分配空間,也不能打開文件。通過發(fā)送WM_CAP_FILE_GET_CAPTURE_FILE消息(capFileFGetCaptureFile宏)給捕獲窗口,就可以得到當前文件名。保存捕獲數(shù)據(jù)到一個新文件如果用戶想保存捕獲數(shù)據(jù),把數(shù)據(jù)存到另外一個文件中??梢允褂肳M_CAP_FILE_SAVEAS消息(capFileSaveAs宏)。這個消息不能改變捕獲文件的名稱和內(nèi)容。你必須去指定新建的文件名,因為捕獲文件將保留原來的文件名稱。為捕獲文件預分配磁盤空間在捕獲操作前,先在磁盤上為捕獲文件建一個指定大小的文件。預分配空間將減少數(shù)據(jù)保存時的處理時間??梢酝ㄟ^WM_CAP_FILE_ALLOCATE消息(capFileAlloc宏)來預分配一個捕獲文件。你要預分配足夠大的磁盤空間去保存預計最大的捕獲文件。預分配磁盤空間沒有限定捕獲文件的大小。如果捕獲的數(shù)據(jù)大于了分配的空間,文件尺寸將自動變大。對一個捕獲文件進行重寫數(shù)據(jù),將對文件的已經(jīng)分配的磁盤空間進行重寫。通過對捕獲文件進行磁盤碎片整理可以提高捕獲性能。要對文件進行碎片整理,可以使用一個碎片整理工具來完成,比如Disk Defragmenter。通過使用沒壓縮的磁盤來保存數(shù)據(jù),同樣可以提高性能。因為在捕獲期間壓縮數(shù)據(jù)將對磁盤的吞吐量進行限制。索引大小在每個AVI文件中都會使用一個指定大小的索引去查找音視頻數(shù)據(jù)塊。在一個索引的入口定位了一個視頻幀或者一個波形聲音的緩存器。所以,這個索引的大小簡接地限定了一個捕獲文件所能保存的幀的數(shù)量上限。通過發(fā)送WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)給捕獲窗口就可以得到當前的索引大小。這個索引大小就保存在CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)對象的一個成員中(dwIndexSize)。你可以在dwIndexSize中指定一個新的索引大小,并通過發(fā)送消息WM_CAP_SET_SEQUENCE_SETUP(capCaptureSetSetup宏)給捕獲窗口完成信息設(shè)置。索引默認大小34,952 (允許32K幀和想匹配的聲音緩存器).音視頻塊的間隔尺寸(Granularity)數(shù)據(jù)塊的間隔尺寸是一個AVI文件的邏輯塊大小。它用于寫和讀音視頻數(shù)據(jù)塊。當向磁盤寫音視頻數(shù)據(jù)時,AVICap將在每個數(shù)據(jù)塊中加入一個必須的填充塊(filler chunks (RIFF JUNK chunks))去填充滿該數(shù)據(jù)塊。你可以使用WM_CAP_GET_SEQUENC_SETUP消息(capCaptureGetSetup)去獲得當前的塊間隔尺寸(Granularity)。CAPTUREPARMS的wChunkGranularity成員保存的是當前的塊間隔尺寸信息。通過對該成員的改寫,并發(fā)送WM_CAP_GET_SEQUENC_SETUP消息(capCaptureSetSetup),可以對其進行修改。你設(shè)置該參數(shù)為零的話,那么塊間隔尺寸的值就為磁盤的扇區(qū)大小。視頻緩存區(qū)這個緩存區(qū)將視頻數(shù)據(jù)放在內(nèi)存的堆中。緩存區(qū)的大小可以改變,并且它的大小是由CAPTUREPARMS的wNumVideoRequested成員和系統(tǒng)可以的內(nèi)存大小來決定。你可以使用WM_CAP_GET_SEQUENC_SETUP消息(capCaptureGetSetup)去獲得當前的視頻緩存區(qū)的大小。CAPTUREPARMS的wNumVideoRequested成員保存的是當前的緩存區(qū)尺寸。通過對該成員的改寫,并發(fā)送WM_CAP_GET_SEQUENC_SETUP消息(capCaptureSetSetup),可以對其進行修改。音頻緩存區(qū)你可以使用下面三種方法來控制捕獲的音頻數(shù)據(jù):l在捕獲中包含音頻或者不包含音頻l按要求指定音頻緩存區(qū)的大小lRequest that audio buffers be a specific size.你可以使用WM_CAP_GET_SEQUENC_SETUP消息(capCaptureGetSetup)去獲得當前的音頻緩存區(qū)的設(shè)置。CAPTUREPARMS的fCaptureAudio指定在這次捕獲操作中是否包括對聲音的捕獲。WNumAudioRequested保存當前要求的音頻緩存區(qū)的大小。dwAudioBufferSize保存當前的音頻緩存區(qū)的大小。通過對該成員的改寫,并發(fā)送WM_CAP_GET_SEQUENC_SETUP消息(capCaptureSetSetup),可以對其進行修改。fCaptureAudio默認值是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ù)時間間隔的流捕獲外,AVICap還支持如下的捕獲:l手控制幀捕獲lStill-image捕獲l不使用磁盤存儲的捕獲l從一個MCI設(shè)備的流捕獲(real-time and step-frame)手動幀捕獲如果你向指定捕獲視頻流中個別幀,你可以通過WM_CAP_SINGLE_FRAME_OPEN消息、WM_CAP_SINGLE_FRAME消息、WM_CAP_SINGLE_FRMAE_CLOSE消息來控制幀序列(capCaptureSingleFrameOpen、/capCaptureSingleFrame、capCaptureSigleFrameClose)。典型應用是,這些消息用于向捕獲文件添加單獨的幀來創(chuàng)建一個動畫,WM_CAP_SINGLE_FRAME_OPEN為手動捕獲操作打開一個文件,WM_CAP_SINGLE_FRAME用于捕獲一個單獨的幀放在文件中。WM_CAP_SINGLE_FRMAE_CLOSE用于關(guān)閉這個捕獲文件。注:該操作支持音視頻同時捕獲。Still-Image捕獲如果要捕獲一個單獨的幀作為一個靜態(tài)圖像,你可以使用WM_CAP_GRAB_FRAME_NOSTOP或者WM_CAP_GRAB_FRAME消息(capGrabFrameNoStop或capGrabFrame宏)在一個幀緩存區(qū)中捕獲一個圖像。你可以通過使用下面的消息來抓獲當前顯示的圖形WM_CAP_GRAB_FRAME,否則,使用WM_CAP_GRAB_FRAME_NOSTOP。一旦開始捕獲,你可以拷貝圖像給其他應用程序。你可以從幀緩存區(qū)拷貝一個圖像到剪貼板(使用WM_CAP_EDIT_COPY消息或capEditCopy宏)。你還可以使用如下的消息,將緩存區(qū)的一張圖像拷貝到一個DIB位圖中(WM_CAP_FILE_SAVEDIB消息或capFileSaveDIB宏)。不使用磁盤存儲的捕獲使用WM_CAP_SEUENCE_NOFILE消息(capCaptureSequenceNoFile宏),可以不向磁盤文件寫入數(shù)據(jù)。該消息僅在配合回調(diào)函數(shù)時有用,它允許你的應用程序直接使用音視頻數(shù)據(jù)。例如,在視頻會議中,應用程序使用該消息區(qū)獲得視頻流。回調(diào)函數(shù)將傳輸捕獲的圖像傳送給遠程的計算機。從MCI設(shè)備進行流捕獲MCI設(shè)備加強了實時捕獲和步進幀(step-frame)捕獲的處理操作。你可以指定一個MCI設(shè)備,比如一張影碟或者一盤錄像帶(VCR)來充當視頻源。通過發(fā)送消息并指定你要選定的MCI設(shè)備的名稱。消息:WM_CAP_SET_MCI_DEVICE(capSetMCIDeviceName宏)。獲得當前使用的設(shè)備可以使用WM_CAP_GET_MCI_DEVICE(capGetMCIDeviceName)消息。在實時捕獲中,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兼容的視頻源包括錄像機(VCR)和光碟。如果fMCIControl數(shù)據(jù)成員為TRUE,捕獲窗口采用MCI操作。捕獲窗口使用dwMCIStartTime和dwMCIStopTime來獲得開始和結(jié)束位置(毫秒)。如果fMCIControl數(shù)據(jù)成員的值為FALSE,dwMCIStartTime和dwMCIStopTime的值將被忽略不見。你可以使用Media Player去快速檢查MCI設(shè)備是否正確地連接到了你的系統(tǒng)上,如果在視頻顯示顯示了圖像,就表示這個視頻源正確連接到了捕獲硬件上。在步進幀(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.步進幀(step-frame)捕獲控制的規(guī)格信息保存在CAPTRUEPARMS數(shù)據(jù)結(jié)構(gòu)體的數(shù)據(jù)成員中。步進幀(step-frame)捕獲除了使用視頻捕獲要用的數(shù)據(jù)成員外,還使用其他的數(shù)據(jù)成員:fStepMCIDevice,fStepCaptureAt2x,和wStepCaptureAverageFrames。如果數(shù)據(jù)成員fStepMCIDevice的值為TRUE,捕獲窗口采用步進幀(step-frame)捕獲。捕獲窗口將使用這兩個參數(shù)來指定捕獲的開始和結(jié)束位置(dwMCIStartTime和dwMCIStopTime毫秒)。捕獲窗口使用fStepCaptureAt2x來決定捕獲硬件捕獲的視頻幀使用兩個普通的分辨率。使用wStepCaptureAverageFrames來指定捕獲時每幀圖像使用的時間大小。如果在一個步進幀(step-frame)捕獲中,指定fStepCaptureAt2x為TRUE,那么捕獲硬件將使用兩個指定的解析度來進行捕獲(高和寬的解析度都是雙倍的)。它使用軟件,在指定的解析度的基礎(chǔ)上改寫圖像的象素,讓其成為更高解析度的圖像。如果硬件不支持基于硬件的批量處理,你也可以使用該選項。并且捕獲為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。如果指定了步進幀捕獲,wStepCaptureAverageFrames成員用于指定捕獲一幀圖像要使用的時間,它是一個采樣的標準時間。以后捕獲圖像捕獲平均時間都會基于這個時間。采用這種機制,降會減少在一個圖像幀的隨機數(shù)字化噪音。這個數(shù)據(jù)成員的標準值是5。關(guān)于MCI的信息可以查看MSDN上的信息。3.1.7高級捕獲選項這節(jié)描述在一個捕獲操作中,你還可以進行的其他選擇。l測量視頻質(zhì)量l用戶初始化捕獲l和調(diào)色板一起工作l在AVI文件中的嵌入信息塊l用戶數(shù)據(jù)消息(Messages)測量視頻質(zhì)量測量視頻質(zhì)量的一個方法是去限定在一個捕獲操作期間丟掉的捕獲圖像幀的數(shù)字。當流捕獲完成后,質(zhì)量=丟掉的幀/所有的幀。如果這個數(shù)(百分數(shù))大于wPercentDropForError的值,AVICap將發(fā)一個錯誤信息給錯誤回調(diào)函數(shù)。WPercentDropForError是CAPTUREPARMS數(shù)據(jù)結(jié)構(gòu)體的一個數(shù)據(jù)成員。通過WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到當前設(shè)定的丟掉幀的限定值。同樣對wPercentDropForError進行修改,再把修改后的數(shù)據(jù)結(jié)構(gòu)體發(fā)送給捕獲窗體就可以完成對限定值的修改。WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureSetSetup),wPercentDropForErrorm默認值10 (10)。用戶初始化捕獲通過WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到當前用戶初始化捕獲的狀態(tài)值。該值存放在fMakeUserHitOKToCapture中。在開始一個捕獲會話前,設(shè)置該值為TRUE,可以為用戶提供精確的控制。系統(tǒng)為所有的音視頻分配好數(shù)據(jù)緩存區(qū)后,AVICap會顯示一個對話框。它讓用戶清除因為軟件初始化導致的捕獲延遲。如果你的應用程序為視頻數(shù)據(jù)分配的數(shù)據(jù)緩存區(qū)很小,那么這個對話框可能就沒的必要了。該值的默認值是FALSE。和調(diào)色板一起工作最初,如果視頻捕獲格式需要一個調(diào)色板,那么捕獲窗口將使用捕獲驅(qū)動提供的調(diào)色板來代替。這個調(diào)色板可能由灰度值,或者可選的彩色值組成。使用WM_CAP_PAL_PASTE或者WM_CAP_PAL_OPEN消息(capPalettePaste或capPaletteOpen)可以獲得一個現(xiàn)存的調(diào)色板去替換默認的調(diào)色板。你還可以創(chuàng)建一個自定義的調(diào)色板去替換默認的調(diào)色板,你要使用WM_CAP_PAL_AUTOCREATE或者WM_CAP_PAL_MANUALCREATE消息(capPaletteAuto或capPaletteManual)。當你替換了調(diào)色板后,捕獲窗體和驅(qū)動程序?qū)⑹褂锰鎿Q后的調(diào)色板,直到你創(chuàng)建或打開其他的調(diào)色板為止。WM_CAP_PAL_AUTOCREATE或者WM_CAP_PAL_MANUALCREATE消息將創(chuàng)建一個基于當前視頻輸入最優(yōu)化的調(diào)色板。這個自定義的調(diào)色板將為視頻提供一個最好的顏色逼真度,因為這個調(diào)色板的顏色是基于這個視頻的。捕獲窗口創(chuàng)建一個采樣顏色的3維柱狀圖。它會減小真實顏色和漸近色間的值。在發(fā)送WM_CAP_PAL_AUTOCREATE消息時,你必須指定AVICap采樣的幀數(shù)以及調(diào)色板的顏色尺寸。在指定幀數(shù)時,要保證幀數(shù)足夠大以保證所有的視頻顏色可以被采樣收集到。使用WM_CAP_PAL_MANUALCREATE消息可以對當前幀進行采樣。通過該消息,進行幾次手動選擇幀采樣操作,你可以創(chuàng)建自己的調(diào)色板,它包含了你想要的顏色信息。一個調(diào)色板可以包含256種顏色。如果你要合并調(diào)色板,或者在視頻隊列中同時在顯示其他視頻或圖像。你可以去使用一個小的顏色集合,這樣不同圖像或視頻的顏色就可以共存了。使用WM_CAP_PAL_SAVE消息(capPaletteSave),可以保促一個新的調(diào)色板。通過WM_CAP_PAL_OPEN消息還可以得到當前的調(diào)色板。你可以在調(diào)色板處理前保存一個調(diào)色板,或者為其他應用程序使用去保存一個調(diào)色板。使用WM_CAP_PAL_PASTE可以把剪貼板中的調(diào)色板粘貼到捕獲窗口中。捕獲窗口通過這個調(diào)色板到捕獲驅(qū)動。其他程序可以拷貝調(diào)色板到剪貼板中。你也可以把調(diào)色板粘貼到剪貼板中。使用WM_CAP_ENDIT_COPY消息(capEditCopy)。它將拷貝視頻緩存區(qū)(包括調(diào)色板)到剪貼區(qū)。在AVI文件中的嵌入信息塊你可以在一個AVI文件中插入信息塊,比如文本或者自定義的數(shù)據(jù)。通過使用下面的消息:WM_CAP_FILE_SET_INFOCHUNK(capFileSetInfoChunk)??梢允褂眠@個消息還可以清除掉一個AVI文件中的信息塊。用戶數(shù)據(jù)消息通過使用WM_CAP_GET_USER_DATA和WM_CAP_SET_USER_DATA消息可以關(guān)聯(lián)數(shù)據(jù)到一個捕獲窗體。(capGetUserData和capSetUserData宏)。使用Get消息可以得到一個LONG數(shù)據(jù)值,可以通過_Set_消息去設(shè)置該值。3.1.8 AVICap回調(diào)函數(shù)你的應用程序可以為一個捕獲窗口注冊一些回調(diào)函數(shù),它們可以告訴你的應用程序一些變化。比如捕獲狀態(tài)發(fā)生變化了,或者有錯誤發(fā)生了,音視頻緩存區(qū)可使用了。下面的消息設(shè)置回調(diào)函數(shù)。消息說明WM_CAP_SET_CALLBACK_CAPCONTROLCapSetCallbackOnCapControl宏在應用程序中指定回調(diào)函數(shù)用于控制捕獲的開始和結(jié)束。WM_CAP_SET_CALLBACK_ERRORCapSetCallbackOnError宏在應用程序中指定回調(diào)函數(shù),當出錯的時候就調(diào)用它。WM_CAP_SET_CALLBACK_FRAMECapSetCallbackOnFrame宏在應用程序中指定回調(diào)函數(shù),當預覽圖像幀被捕獲了的時候就調(diào)用它。WM_CAP_SET_CALLBACK_STATUSCapSetCallbackOnStatus宏在應用程序中指定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年生態(tài)環(huán)境治理保護合同
- 2024年版項目監(jiān)工聘用合同
- 特崗英語課程設(shè)計
- 現(xiàn)代詩課程設(shè)計分享
- 電子表課程設(shè)計c語言
- 測繪工程課程設(shè)計選題
- 社交軟件銷售工作總結(jié)
- 航空航天顧問工作總結(jié)
- 保健品行業(yè)營銷策略總結(jié)
- 餐飲團購前臺工作總結(jié)
- 水泥行業(yè)數(shù)字化轉(zhuǎn)型服務方案
- 深圳市南山區(qū)2024-2025學年第一學期期末教學質(zhì)量檢測九年級物理 24-25上九年級物理
- 應急設(shè)施設(shè)備和物資儲備管理制度(4篇)
- 團委書記個人工作總結(jié)
- 高危多發(fā)性骨髓瘤診斷與治療中國專家共識(2024年版)解讀
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標準內(nèi)容解讀
- 江蘇省鎮(zhèn)江市實驗學校2023-2024學年九年級上學期期末考試化學試卷
- 期末 (試題) -2024-2025學年人教PEP版(2024)英語三年級上冊
- GB/T 32066-2024煤基費托合成液體石蠟
- 安慶市農(nóng)業(yè)雪災恢復重建和救災資金使用情況總結(jié)
- 食品工程原理課程設(shè)計攪拌器的設(shè)計
評論
0/150
提交評論