• <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++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            利用windows capture Api捕獲的視頻流是RGB數據
             1 
             2 /*
             3 
             4     capture.h
             5     caputre用戶捕獲pc camera的 RGB視頻源
             6     做到capture,encoder,mgr 獨立,不會有依賴性,以便之后的復用
             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 而且回調函數必須聲明為 static LRESULT    CALLBACK,否則產生異常
            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 放屁阿狗 閱讀(1228) 評論(0)  編輯 收藏 引用 所屬分類: 視頻監控
            精品久久久久久综合日本| 国产精品久久久久9999| 国产精品九九久久免费视频 | 香蕉久久影院| 久久天堂AV综合合色蜜桃网| 亚洲精品乱码久久久久久自慰| 精产国品久久一二三产区区别| 97精品国产97久久久久久免费 | 久久99精品久久久久久齐齐| 久久国产视屏| 久久AV高清无码| 理论片午午伦夜理片久久| 国产毛片欧美毛片久久久| 精品九九久久国内精品| 国产aⅴ激情无码久久| 亚洲国产二区三区久久| 蜜桃麻豆WWW久久囤产精品| 久久国产精品无码一区二区三区| 国产成人久久777777| 无码精品久久久久久人妻中字| 91麻精品国产91久久久久 | 国产精品岛国久久久久| 欧美亚洲国产精品久久高清| 99久久久久| 国产午夜久久影院| 午夜精品久久久久久久| 久久久久久久精品成人热色戒| 久久综合九色综合97_久久久| 久久人人爽人人爽人人av东京热| 久久无码av三级| 久久99精品综合国产首页| 少妇人妻88久久中文字幕| 亚洲国产高清精品线久久 | 亚洲精品乱码久久久久66| 国内精品久久久久国产盗摄| 日韩AV无码久久一区二区| 久久午夜福利无码1000合集| 久久伊人五月天论坛| 久久久久国色AV免费看图片| 国产99久久久国产精免费| 狠狠人妻久久久久久综合|