• <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)  編輯 收藏 引用 所屬分類: 視頻監控
            2021国内久久精品| 久久精品国产国产精品四凭| 久久久久免费看成人影片| 久久久久无码精品国产| 国产高清国内精品福利99久久| 性欧美大战久久久久久久 | 久久精品aⅴ无码中文字字幕重口| 久久精品中文字幕一区| 久久国产精品-久久精品| 亚洲精品高清一二区久久| 老司机国内精品久久久久| 无码任你躁久久久久久老妇| 日韩亚洲欧美久久久www综合网 | 伊人久久精品无码av一区| 久久精品国产亚洲网站| 久久久婷婷五月亚洲97号色| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久免费小视频| 香蕉99久久国产综合精品宅男自 | 色综合久久88色综合天天 | 韩国无遮挡三级久久| 国内精品九九久久精品| 久久国产美女免费观看精品| 精品一区二区久久| 久久久av波多野一区二区| 欧美国产成人久久精品| 亚洲精品成人网久久久久久| 久久久精品人妻无码专区不卡| 99久久国语露脸精品国产| 国产成人无码精品久久久性色| 亚洲精品无码久久久| 午夜精品久久久久久| 亚洲乱码日产精品a级毛片久久| 久久久久国色AV免费看图片| 国产亚州精品女人久久久久久 | 久久婷婷五月综合色高清| 久久笫一福利免费导航| 2021国产精品久久精品| 国内精品久久久久影院老司 | 国产99久久久久久免费看| 久久精品国产精品青草|