• <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 放屁阿狗 閱讀(1222) 評論(0)  編輯 收藏 引用 所屬分類: 視頻監控
            久久精品国产网红主播| 亚洲国产成人久久综合一| 国内精品久久久久久中文字幕| 亚洲精品美女久久777777| 丁香色欲久久久久久综合网| 亚洲AV日韩精品久久久久久久| 日韩精品久久久久久久电影| 色婷婷噜噜久久国产精品12p| 精品久久久久久无码人妻热| 久久亚洲2019中文字幕| AAA级久久久精品无码片| 97久久精品人人澡人人爽| 国产亚州精品女人久久久久久 | 97精品依人久久久大香线蕉97| 免费久久人人爽人人爽av| 国产精品久久久久aaaa| 久久中文精品无码中文字幕| 亚洲国产婷婷香蕉久久久久久| 性欧美大战久久久久久久久| 午夜精品久久久久久毛片| aaa级精品久久久国产片| 国产真实乱对白精彩久久| 色老头网站久久网| 久久久91精品国产一区二区三区 | 97久久久久人妻精品专区| 久久久久国产视频电影| 久久国产高潮流白浆免费观看| 精品免费久久久久国产一区 | 亚洲国产综合久久天堂 | 国产精品欧美久久久久天天影视| 无码人妻久久一区二区三区免费丨| 97精品久久天干天天天按摩| 一本久久a久久精品综合香蕉| 国产Av激情久久无码天堂| 中文字幕无码久久精品青草| 久久免费小视频| 精品久久8x国产免费观看| 亚洲国产成人久久一区WWW| 91性高湖久久久久| 九九99精品久久久久久| 香港aa三级久久三级|