• <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>

            socketref,再見!高德

            https://github.com/adoggie

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            利用windows capture Api捕獲的視頻流是RGB數(shù)據(jù)
             1 
             2 /*
             3 
             4     capture.h
             5     caputre用戶捕獲pc camera的 RGB視頻源
             6     做到capture,encoder,mgr 獨立,不會有依賴性,以便之后的復(fù)用
             7 */
             8 
             9 #ifndef _DESKCAM_CAPTURE_H
            10 #define _DESKCAM_CAPTURE_H
            11 
            12 
            13 #include <windows.h>
            14 #include "vfw.h"
            15 #pragma comment(lib, "winmm.lib")
            16 #pragma comment(lib, "vfw32.lib")
            17 #include <nv.h>
            18 
            19 
            20 struct CaptureInfo{
            21     NVString        sid;
            22     unsigned int    index;    //
            23     unsigned int    type;    //類別
            24     unsigned short    width;
            25     unsigned short  height;    
            26     void (*after_capture)(void * data,unsigned int size,void * user);
            27     void * user;
            28 };
            29 
            30 class  PCDeskCamera:public NVObject{
            31 public:
            32     PCDeskCamera(){ _bmpInfo = NULL;}
            33     ~PCDeskCamera(){    if(_bmpInfo)    {delete _bmpInfo;_bmpInfo=NULL;} }
            34 
            35     bool                Open();
            36     void                Close();
            37     CaptureInfo&        GetCaptureInfo(){    return _ctx;}
            38 private:    
            39     static LRESULT    CALLBACK    StreamCapture(HWND hwnd,LPVIDEOHDR hdr);
            40     bool                GetBitmapInfo(HWND cap);
            41     HWND                _hwnd;
            42     CaptureInfo            _ctx;
            43     HWND                _capture_wnd;
            44     LPBITMAPINFO        _bmpInfo;        
            45 };
            46 #endif
            47 
             1 
             2 #include "capture.h"
             3 
             4 /*
             5 視頻捕獲,必須提供消息處理機制:    
             6 while(GetMessage()){
             7     TranslateMessage();
             8     DispatchMessage();
             9 }
            10 而且回調(diào)函數(shù)必須聲明為 static LRESULT    CALLBACK,否則產(chǎn)生異常
            11 */
            12 
            13 LRESULT PCDeskCamera::StreamCapture(HWND hwnd,LPVIDEOHDR hdr){
            14     PCDeskCamera * cam;    
            15     //int i;
            16     //i=100;
            17 //    MessageBeep(100);
            18 //    return 0;
            19     
            20     cam = (PCDeskCamera*)GetWindowLong(hwnd,GWL_USERDATA);
            21     if( cam== NULL){        
            22         return 0;
            23     }    
            24     //--     
            25     cam->GetCaptureInfo().after_capture(hdr->lpData,hdr->dwBytesUsed,
            26         cam->GetCaptureInfo().user);
            27     return 1;
            28 }
            29  
            30 
            31 bool PCDeskCamera::GetBitmapInfo(HWND cap){
            32     int vfs=capGetVideoFormatSize(cap);    
            33     if(!vfs)        return false;    
            34     if(_bmpInfo)    {delete _bmpInfo;_bmpInfo=NULL;}
            35     _bmpInfo =(BITMAPINFO*)( new char[vfs]);    
            36     LPBITMAPINFOHEADER bmpIH=( LPBITMAPINFOHEADER )_bmpInfo;    
            37     bmpIH->biSize= sizeof(BITMAPINFOHEADER);
            38     BOOL ret=capGetVideoFormat(cap, _bmpInfo, (WORD)vfs);    
            39     _ctx.width = bmpIH->biWidth;
            40     _ctx.height = bmpIH->biHeight;
            41     return true;
            42 }
            43 
            44 bool PCDeskCamera::Open(){
            45     int ret;
            46     CAPTUREPARMS cpp;        
            47     _capture_wnd = capCreateCaptureWindow("AviCap_Basic1", WS_CHILD|WS_VISIBLE, 
            48         00200,200,
            49         GetDesktopWindow(),
            50         0xff00);    
            51     if(_capture_wnd == NULL){
            52         return false;
            53     }
            54     SetWindowLong(_capture_wnd,GWL_USERDATA,(LONG)this);
            55     capPreviewRate(_capture_wnd,50);
            56     ret =capDriverConnect(_capture_wnd, _ctx.index);
            57     if( ret == FALSE){
            58         return false;
            59     }
            60 
            61     if(!GetBitmapInfo(_capture_wnd))    {
            62         return false;
            63     }    
            64     ret = capSetCallbackOnVideoStream(_capture_wnd,PCDeskCamera::StreamCapture);
            65     capCaptureGetSetup(_capture_wnd, &cpp, sizeof(CAPTUREPARMS));
            66        cpp.fYield = true ;
            67     cpp.fAbortLeftMouse = false;
            68     cpp.fAbortRightMouse = false;
            69     cpp.fCaptureAudio = false;
            70     ret = capCaptureSetSetup (_capture_wnd, &cpp, sizeof(CAPTUREPARMS));
            71     capCaptureSequenceNoFile(_capture_wnd);
            72     //capCaptureSequence(_capture_wnd);
            73     ShowWindow(_capture_wnd,SW_HIDE);    
            74 
            75 
            76     return true;
            77 }
            78 
            79 void PCDeskCamera::Close(){
            80 //    capCaptureAbort(_capture_wnd);    
            81     capSetCallbackOnVideoStream(0 ,NULL);
            82     capDriverDisconnect(_capture_wnd);    
            83     capCaptureStop(_capture_wnd);
            84     SetWindowLong(_capture_wnd,GWL_USERDATA,(LONG)NULL);
            85     ::CloseWindow(_capture_wnd);
            86     DestroyWindow(_capture_wnd);    
            87 }
            88 
            89 
            90 
            posted on 2006-03-02 00:36 放屁阿狗 閱讀(1220) 評論(0)  編輯 收藏 引用 所屬分類: 視頻監(jiān)控
            精品久久777| 狠狠色丁香婷婷久久综合五月| 欧美综合天天夜夜久久| 办公室久久精品| 久久无码国产专区精品| 大美女久久久久久j久久| 亚洲国产日韩欧美综合久久| 久久国产热精品波多野结衣AV| 国产69精品久久久久9999| 久久人妻AV中文字幕| 伊人久久精品线影院| 亚洲午夜久久久久久久久久| 国产亚州精品女人久久久久久 | 亚洲午夜无码久久久久小说| 久久精品国产亚洲AV无码偷窥| 无码任你躁久久久久久久| 久久青青草原精品影院| 亚洲精品乱码久久久久66| 久久99亚洲综合精品首页| 久久九九有精品国产23百花影院| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 77777亚洲午夜久久多喷| 久久综合亚洲色一区二区三区| 久久er国产精品免费观看8| 亚洲国产精久久久久久久| 国产V综合V亚洲欧美久久| 亚洲国产欧洲综合997久久| 精品国产日韩久久亚洲| 中文字幕精品久久久久人妻| 久久久精品日本一区二区三区| 久久线看观看精品香蕉国产| 久久精品国产亚洲AV电影| 久久综合九色综合网站| 亚洲va久久久噜噜噜久久狠狠 | 亚洲精品无码成人片久久| 狠狠色丁香久久婷婷综合图片 | 精品久久一区二区| 久久免费精品一区二区| 久久精品国产影库免费看| 久久福利青草精品资源站| 亚洲国产成人久久综合碰碰动漫3d|