¹êÅç¤T¡B¼vµ²á¤Ñ«Ç¡]PART III¡^
¨ç¦¡®w»¡©ú:
u
Video Capture¨ç¦¡®w
³oӨ禡®w¥Dn¨Ï¥Î¤U¦C¸ê®Æµ²ºc¡G
1. CAPTUREPARAMS¡G³oÓ¸ê®Æµ²ºc¥Dn¥]§t¤F¤@¨ÇÂ^¨ú¼v¹³ªº°Ñ¼Æ¡C¥H¤U¦C¥X´XÓ¤ñ¸û«nªº¦¨û¡G
(1)
DWORD dwRequestMicroSecPerFrame¡G¥Nªí¬Û¾F¨âÓframeªºÂ^¨ú®É¶¡¶¡¹j¡A¨ä³æ¦ì¬°microsecond¡CYȬ°66667«h¥Nªíframe
rate¬°15¡C
(2)
BOOL fYield¡GY¨äȬ°TRUE¡A«hªí¥ÜWindows·|¥H¥t¤@Óthread¨Ó®·®»¼v¹³¡A¦]¦¹¨Ï¥ÎªÌ¥i¥H¦b®·®»¼v¹³®É¤´µM¥i¥HÄ~Äò¨Ï¥Îµ{¦¡¡FY¨äȬ°FALSE¡A«hµ{¦¡·|¦b®·®»¼v¹³«áÅã¥Ü¦£¸Lª¬ºA(·Æ¹«´å¼Ð¬°º|¤æ¹Ï¥Ü)¡A¦]¦¹¨Ï¥ÎªÌµLªk¦A¹ïµ{¦¡¤U©R¥O¡C
(3)
BOOL fCaptureAudio¡G¨äÈ¥Nªí¥Ü§_n¦P®ÉÂ^¨úÁnµ¸ê®Æ¡C¥»¹êÅç³]¨ä¬°FALSE¡C
2. BITMAPINFO¡G³oÓ¸ê®Æµ²ºc©MÂI°}¹Ï®§®§¬ÛÃö¡A¥Dn©w¸q¤F¼v¹³Â^¨ú¤U¨Ó¤§«áÅã¥Ü¦b¿Ã¹õ¤W¡BÀx¦s¦b°O¾ÐÅé¤ÎÀɮתº®æ¦¡¡C¨ä¤¤¥]§t¤F¨âÓ¦¨û¡G
(1) BITMAPINFOHEADER bmiHeader¡G³o¬O¤@Ó´yz¼v¹³©Ê½èªº¸ê®Æµ²ºc¡A¨ä¤¤¦¨û°O¸ü¤F¼v¹³ªº¤j¤p¡Bcolor depth¡B¥H¤ÎÀ£ÁYªº¤è¦¡¡C¦bVideo
Capture¡BVideo Compression Manager¡BDrawDib¨ç¦¡®w¡A¬Æ¦Ü¬O¥un¦³Ãö©óÂI°}¹ÏªºÀ³¥Î³£·|¨Ï¥Î¨ì¡A¥i¥H»¡¬O¥»¹êÅçvideo³¡¤À³Ì«nªº¸ê®Æµ²ºc¡C
(2) RGBQUAD bmiColors¡G«ü¦Vcolor
table²Ä¤@Ó¤¸¯Àªº¦ì§}¡CColor table¥Dn°O¿ý³oӹϧΩҨϥΪºÃC¦âªí¥Üªk¤¤¨C¤@ºØÃC¦â¹ïÀ³¨ìRGBªí¥ÜªkªºÈ¡C
¥H¤U«K²³æ¤¶²Ð¥»¹êÅç¥Dn¨Ï¥Îªº¨ç¦¡¤Î¥¨¶°¡G
1. capCreateCaptureWindow¡Gcapture windows¦b·§©À¤Wº¡Ãþ¦üWindows¼Ð·Ç±±¨î¶µ(¦pButton¡BCheck
Box¡BRadio Buttonµ¥)¡A¨Ï¥ÎªÌ¹ïcapture windows¤U©R¥O¡A¦A¥Ñcapture windowst³d©MµwÅédriver·¾³q¥H§¹¦¨¼v¹³Â^¨ú¤u§@¡C¦]¦¹²Ä¤@¨B«K¥²»Ý°õ¦æ¦¹¨ç¦¡¨Ó«Ø¥ßcapture windows¨Ã±o¨ì¨ähandle¡C
2. capDriverConnect¡G³oÓ¥¨¶°¥Dn¬O±N«Ø¥ß¦nªºcapture
windows©MµwÅédriver³sµ²¡C
3. capCaptureGetSetup¤ÎcapCaptureSetSetup¡G«eªÌ¥Dn¬O¨ú±ocapture windowsªºCAPTUREPARAMS¡A¦b±N¨äק蠟«á¡A¦A§Q¥Î«áªÌ¨Ó³]©w¡C
4. capGetVideoFormat¤ÎcapSetVideoFormat¡G«eªÌ¥Dn¬O¨ú±ocapture windowsªºBITMAPINFO¡A¦b±N¨äק蠟«á¡A¦A§Q¥Î«áªÌ¨Ó³]©w¡C
5. capSetCallbackOnVideoStream¡G³oӨ禡¥Dn¬O¿é¤J¤@Ócallback ¨ç¦¡ªº¦ì§}¡A¨Ï±o·íWindows¨CÂ^¨ú¨ì¤@Óframe®É·|©I¥s³o¤@Ө禡¡A¨Ã±Nframe¤º®e·í§@¨ç¦¡ªº¿é¤J°Ñ¼Æ¡C¥»¹êÅç«K¬O¦b³o¤@Ө禡¤¤°õ¦æÀ£ÁYªº¤u§@¡A¨Ã±NÀ£ÁY¦nªºframe¥HWindows
Sockets¨ç¦¡°e¥X¡C
6. capCaptureSequenceNoFile¡G³oÓ¥¨¶°¥Dn¬O©R¥Ocapture
windows¶}©lÂ^¨ú¼v¹³¡C
7. capCaptureStop¡G³oÓ¥¨¶°¥Dn¬O©R¥Ocapture
windows°±¤îÂ^¨ú¼v¹³¡C
8. capDriverDisConnect¡G³oÓ¥¨¶°¥Dn¬O±Ncapture
windows©Mµw¸Ñ°£³sµ²¡C¦³¤@ÂI¥²»Ýª`·N¡A¦b°õ¦æ¦¹¥¨¶°¤§«e¥²»Ý¥ý°õ¦æcapSetCallbackOnVideoStream¡A¨ä¤¤¨ç¦¡ªº¦ì§}¶ñ¤JNULL¡C
u
Video Compression Manager¨ç¦¡®w
³oӨ禡®w¥Dn¨Ï¥Î¤U¦C¸ê®Æµ²ºc¡G
1. COMPVARS¡G³oÓ¸ê®Æµ²ºc¥Dn¬O°O¿ý©Ò¦³©MÀ£ÁY¬ÛÃöªº¸ê°T¡A¥H¤U¦C¥X´XÓ¤ñ¸û«nªº¦¨û¡G
(1) DWORD fccHandler¡Gcompressor¦WºÙ
(2) LPBITMAPINFO lpbiIn¡G«ü¦V«ÝÀ£ÁY¼v¹³¤§BITMAPINFOªº«ü¼Ð
(3) LPBITMAPINFO lpbiOut¡G«ü¦VÀ£ÁY§¹¼v¹³¤§BITMAPINFOªº«ü¼Ð
(4) LONG lKey¡G¥Nªíkey-frame
rate¡C©Ò¿×key frame¬O«ü¦¹frame¦b¸ÑÀ£ÁY®É¤£»Ý¨Ì¿à«e±ªºframe¡C
(5) LONG lQ¡G¥Nªí¼v¹³À£ÁY«áªº«~½è¡A¬°¤¶©ó1¦Ü10000ªº¤@Ó¾ã¼Æ
¥H¤U«K²³æ¤¶²Ð¥»¹êÅç¥Dn¨Ï¥Îªº¨ç¦¡¤Î¥¨¶°¡G
1. ICLocate¡G¿é¤J«ü¦VÀ£ÁY«e«áBITMAPINFOªº«ü¼Ð¡A¥H¤Î±ý¨Ï¥Î¤§codecs¡C
2. ICCompressorChoose¡G¦¹¨ç¦¡·|©I¥s¤@Ó¨t²Î¤º«Øªº¹ï¸Ü²°¡A¨ä¤¤¥]§t©Ò¦³¥i¥H¨Ï¥Îªºcodecs¥H¤Î¨ä¬ÛÃö°Ñ¼Æ¡F¨Ï¥Î¦¹¨ç¦¡ªºÀuÂI¦b©ó¹ï¸Ü²°µ²§ô®É¨t²Î·|¦Û°Ê±NCOMPVARS¸ê®Æµ²ºcªì¨Ï¤Æ¡Aµ{¦¡³]pªÌ«K¤£¥Î¶O¤ß¦b©ó°Ñ¼ÆȤ§³]p¡C
3. ICCompressQuery¡G¦¹¨ç¦¡¥Dn¦b¸ß°Ýcompressor¬O§_¤ä´©¬YºØÀ£ÁY¤è¦¡¡C¿é¤J°Ñ¼Æ¬°compressor
handle¤Î«ü¦VÀ£ÁY«e«áBITMAPINFOªº«ü¼Ð¡A¦¹¨ç¦¡·|¶Ç¦^¸ß°Ýµ²ªG¡C
4. ICCompressBegin¡G¦¹¨ç¦¡n¨D¨t²Î·Ç³Æ¬ÛÃö¸ê·½¥H¨ÑÀ£ÁY¤§¥Î¡C
5. ICCompress¡G¦¹¨ç¦¡À£ÁY¬Y¤@Óframe¡C
6. ICCompressEnd¡G¦¹¨ç¦¡ÂkÁÙ¬ÛÃö¸ê·½µ¹¨t²Î¡C
7. ICDecompressQuery¡G¦¹¨ç¦¡¥Dn¦b¸ß°Ýdecompressor¬O§_·h´©¬YºØ¸ÑÀ£ÁY¤è¦¡¡C
8. ICDecompressBegin¡G¦¹¨ç¦¡n¨D¨t²Î·Ç³Æ¬ÛÃö¸ê·½¥H¨Ñ¸ÑÀ£ÁY¤§¥Î
9. ICDecompress¡G¦¹¨ç¦¡¸ÑÀ£ÁY¬Y¤@Óframe¡C
10.
ICDecompressEnd¡G¦¹¨ç¦¡ÂkÁÙ¬ÛÃö¸ê·½µ¹¨t²Î¡C
11.
ICCompressorFree¡G¦¹¨ç¦¡ÂkÁÙCOMPVARS©Ò¦û¥Î¤§¸ê·½¡C
u
DrawDib¨ç¦¡®w
DrawDib¨ç¦¡®w©Ò¨Ï¥Îªº¸ê®Æµ²ºc¥Dn¬OBITMAPINFO¡A¤w¦b¥ý«e¤¶²Ð¹L¡C¥H¤U«K¤¶²Ð¥»¹êÅç¥Dn¨Ï¥Î¨ìªº¨ç¦¡¥H¤Î¥¨¶°¡G
1. DrawDibOpen¡G¦¹¨ç¦¡¥Dn¦b¶}±ÒDrawDib°ÊºA³sµ²¨ç¦¡®w¡B«Ø¥ß¤@ÓDrawDib DC¡B¤Î·Ç³Æ¬ÛÃöªº¨t²Î¸ê·½¡C
2. DrawDibBegin¡G¦¹¨ç¦¡¥Dn¦bªì©l¤ÆDrawDib DC¡A¿é¤J°Ñ¼Æ¬°¼v¹³¤j¤p¥H¤Î¼v¹³ªºBITMAPINFO¸ê®Æµ²ºc¡C
3. DrawDibDraw¡G¦¹¨ç¦¡±N¼v¦b¿Ã¹õ¤Wø¥X¡C
4. DrawDibEnd¡G¦¹¨ç¦¡¥Dn¦b±NDrawDib DC¬ÛÃö³]©wÁÙì¡C
5. DrawDibClose¡G¦¹¨ç¦¡·|Ãö³¬DrawDib DC¨ÃÂkÁÙ¬ÛÃö¸ê·½¡C
u
Waveform Audio¨ç¦¡®w
¥H¤U²³æ¤¶²Ð¨ä¥Dnªº¸ê®Æµ²ºc¡G
1.
WAVEFORMATEX¡G³oÓ¸ê®Æµ²ºc©w¸q¤FÁnµ¸ê®Æªº¬ÛÃö°Ñ¼Æ¡A¥H¤U¦C¥X¨ä«n¦¨û¡G
(1) WORD wFormatTag¡GÁnµªº®æ¦¡¡C¨Ò¦pWAVE_FORMAT_PCM«K¥Nªí¨Ï¥ÎPCM®æ¦¡¡C
(2) WORD nChannels¡G¨Ï¥ÎªºÁn¹D¼Æ¡C¨äȬ°1¥Nªí¬°³æÁn¹D¡A¬°2¥Nªí¬°¥ßÅéÁn¹D¡C
(3) DWORD nSamplesPerSec¡GÁnµªº¨ú¼ËÀW²v¡A¨äȬ°¨C¬íªº¨ú¼Ë¼Æ¡C
(4) DWORD nAvgBytesPerSec¡G¸ê®Æªºdata
rate¡A³æ¦ì¬°¨C¬íÄÁ²£¥Íªºbytes¼Æ¡C
(5) WORD wBitsPerSample¡G¨CÓ¨ú¼Ë»Ý¥H¦h¤ÖӦ줸¨Óªí¥Ü¡C
2.
WAVEHDR¡G«e±´£¨ìªºVideo for Windows¨ç¦¡®w¤¤¥Î¨ÓÀx¦s¼v¹³ªº°O¾ÐÅé¨t²Î·|¦Û¦æ·Ç³Æ¡A¦ý¦bWaveform
Audio¨ç¦¡®w¤¤µ{¦¡³]pªÌ¥²»Ý¦Û¦æ·Ç³Æ°O¾ÐÅé¥H¨Ñ¨t²Î¨Ï¥Î¡CWAVEHDR«K¬O¥Î¨Ó´yz¨C¤@¶ô°O¾ÐÅ骺¸ê®Æµ²ºc¡A¥H¤U¦C¨ä«n¦¨û¡G
(1) LPSTR lpData¡Gµ{¦¡³]pªÌ¥²»Ý·Ç³Æ¤@¶ô°O¾ÐÅé¡AµM«á¥H¦¹«ü¼Ð«ü¦V°O¾ÐÅ骺¦ì§}¡C
(2) DWORD dwBufferLength¡G¤W¤@°Ñ¼Æ©Ò«ü°O¾ÐÅ骺¤j¤p¡A³æ¦ì¬°¦ì¤¸²Õ¡C
¦b¶}©l¿ýµ¤§«á¡A¨t²Î·í¶ñº¡¤@¶ô°O¾ÐÅ餧«á·|°e¥XMM_WIM_DATA°T®§¡A¦b¥»¹êÅ礤¦¬¨ì¦¹°T®§¤§«á«Kn±N°O¾ÐÅé¸ê®Æ¥HWindows Sockets¨ç¦¡°e¥X¡C¦]¦¹¦b³]pµ{¦¡®É¥²»Ý·Ç³Æ¦h¶ô°O¾ÐÅé¡A¨Ï±o·íÀ³¥Îµ{¦¡±N¤@¶ô°O¾ÐÅé°e¥X®É¡A¤´µM¥i¥HÄ~Äò±NÁnµ¸ê®Æ¦s¦Ü¨ä¥L°O¾ÐÅé¡C
¥H¤U«K¤¶²Ð¿ýµ®É¥»¹êÅç¥Dn¨Ï¥Î¨ìªº¨ç¦¡¥H¤Î¥¨¶°¡G
1. waveInOpen¡G¦¹¨ç¦¡¿é¤JWAVEFORMATEX¸ê®Æµ²ºc¥H¿ï¾Ü¾A·íªº¿ýµ³]³Æ¡A¨Ã§i¶D¨t²Î·í¶ñº¡¤@¶ô°O¾ÐÅé®É¬On°e¥XMM_WIM_DATA°T®§ÁÙ¬On©I¥s¤@Ócallback¨ç¦¡¡C
2. waveInPrepareHeader¤ÎwaveInAddBuffer¡G¦¹¨â¨ç¦¡¬O¥Î¨Ó·Ç³Æ°O¾ÐÅé¡C
3. waveInStart¡G¦¹¨ç¦¡§iª¾¨t²Î¶}©l¿ýµ¡C
4. waveInStop¡G¦¹¨ç¦¡§iª¾¨t²Î°±¤î¿ýµ¡C
5. waveInUnprepareHeader¡G¦¹¨ç¦¡¥Î¨ÓÂkÁÙ¦bwaveInPrepareHeader©Ò·Ç³Æªº°O¾ÐÅé¡C
6. waveInClose¡G¦¹¨ç¦¡¥Î¨ÓÃö³¬¿ýµ³]³Æ¡C
¥H¤U«K¤¶²Ð©ñµ®É¥»¹êÅç¥Dn¨Ï¥Î¨ìªº¨ç¦¡¥H¤Î¥¨¶°¡G
1.
waveOutOpen¡G¦¹¨ç¦¡¿é¤JWAVEFORMATEX¸ê®Æµ²ºc¥H¿ï¾Ü¾A·íªº©ñµ³]³Æ¡C
2.
waveOutPrepareHeader¡G¦¹¨ç¦¡¥Î¨Ó·Ç³Æ°O¾ÐÅé¡C
3.
waveOutWrite¡G¦¹¨ç¦¡§iª¾¨t²Î¶}©l¼½©ñ¬Y¶ô°O¾ÐÅé©ÒÀx¦sªº¸ê®Æ¡C
4.
waveOutReset¡G¦¹¨ç¦¡§iª¾¨t²Î°±¤î¼½©ñ¨Ã±N¦¹¶ô°O¾ÐÅéµø¬°¤w¼½©ñ¡C
5.
waveOutClose¡G¦¹¨ç¦¡¥Î¨ÓÃö³¬©ñµ³]³Æ¡C