• <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 @ 2006-03-02 00:36 放屁阿狗 閱讀(1221) | 評論 (0)編輯 收藏

                 摘要:     1 #include <windows.h>  2   3 long int crv_tab[256];  4 long int cbu_tab[256];  5 lo...  閱讀全文
            posted @ 2006-03-02 00:33 放屁阿狗 閱讀(4660) | 評論 (2)編輯 收藏

                 摘要: 由于視頻開發的需求,封裝xvid c調用接口,使之優雅易用我已經對pc camera視頻流(RGB)進行嘗試,編碼之后傳輸到遠程主機進行解碼回放,效果不錯具體的xvid的參數可以進一步優化,這里只是提供簡單的范例1. xvid 解碼  1  2 /* 3     encode.cpp 4...  閱讀全文
            posted @ 2006-03-02 00:28 放屁阿狗 閱讀(4627) | 評論 (6)編輯 收藏

            公司的項目中有訪問DB2數據的需求,我以前也只是聽說DB2有這么個咚咚,據說也是個恐龍級的數據庫。以前也沒有用過DB2 在c語言的接口(訪問oracle我一直用oci),網上一兜,才發現DB2有JDBC的訪問接口,c方面的很少。
            項目的工期比較緊,同時我也不想花太多的時間研究數據庫訪問接口,所以在項目中許多模塊都是用python編寫,開發周期短,調試,跨平臺也是很吸引人,所以就用python拉。在python.org一搜索,便找到了pydb2,OK! 馬上下載pydb1.2,一解開壓縮包,原來是原代碼,只能編譯拉。還好有編譯腳本:), 運行setup.py install
            出現以下異常:
            Compiling under Visual Studio .NET v7 recieves the
            following error:

            _db2_module.c(1855) : error C2036: 'SQLPOINTER' :
            unknown size

            This can be resolved by casting to (SQLCHAR *) instead
            of a (void *):

            < SQLPOINTER buf = (SQLPOINTER)((SQLCHAR
            *)bs->buf + (bs->bufLen * idx));

            發現原來SQLCHAR類型沒有找到,沒問題,找到_db2_module.c:1855行修改為:
            SQLPOINTER buf = (SQLPOINTER)((void *)bs->buf +
            (bs->bufLen * idx));
            再次 setup.py install
            ok,編譯成功,db2.py的模塊也被拷貝得到 $PYTHONHOME/lib/site_pakages/下去了
            然后安裝db2 client runtime
            這樣就完成了pydb2的運行配置。然后就在odbc中配置一個dsn
            測試以下代碼:

            import DB2
            conn = DB2.connect(dsn='sample', uid='db2inst1', pwd='secret')
            無異常表示成功連接上DB2
            之后訪問數據庫只要遵循python DBI2.0的規范就可以拉!
            生活在python世界是很快樂的事情!

            *注意: python2.4的話必須用vc7.1編譯pydb2的擴展模塊,因為python2.4(win32)也是用vc7.1編譯的


            posted @ 2006-03-02 00:18 放屁阿狗 閱讀(1599) | 評論 (1)編輯 收藏

            讀ICE core 源碼
            讀linux 2.4 kernel
            學習e文
            學習computer graphic

            posted @ 2006-02-23 13:06 放屁阿狗 閱讀(177) | 評論 (0)編輯 收藏

            linux kernel 0.11學習計劃
            posted @ 2006-01-29 20:16 放屁阿狗 閱讀(349) | 評論 (0)編輯 收藏

            近日我將Ice源碼庫中的Base64的代碼挖掘出來以便自己使用,做了一些試驗,發現其對二進制編碼之后的產生0x0D,0x0A字符,不得其解
            用了一下python的base64庫,發現其也是在編碼只有加上0D,0A字符,嘿嘿,難道這是標準阿?
            posted @ 2006-01-06 09:46 放屁阿狗 閱讀(459) | 評論 (2)編輯 收藏

                  參閱 www.xmlrpc.org 的xmlrpc規范,發現其規格比較簡單,網站list top50中xmlrpc的不同語言的實現,研究了xmlrpc-c,sexyRcp,phpRpc等代碼,發現其都實現比較復雜,有些只是提供了xmlrpc的語言規格實現,但沒有實現網絡傳輸的功能。
                  由于xmlrpc規范的網絡傳輸采用http,一個請求必須創建一次tcp的交互,導致性能上得不到提高,而且只是單向調用等限制,我考慮重新編寫xmlrpc的實現,提供xmlrpc-server,簡化其操作接口,支持在客戶機和服務器之間保持一個tcp連接,持續的進行xmlrpc雙向調用.
                  支持語言:      C++ / Python
                  計劃時間:   2005.12.31    ~ 2006.1.3

            2006.1.4    完成rpcServer c++版本

            posted @ 2006-01-02 00:52 放屁阿狗 閱讀(2073) | 評論 (2)編輯 收藏

                 摘要: 本人一直使用的日志類,支持3種輸出方式(windows窗體,udp,常規文件),并格式化輸出:   1  2/**//*  3    nvlog.h  4    ----------------  5 &nb...  閱讀全文
            posted @ 2005-12-11 20:31 放屁阿狗 閱讀(3853) | 評論 (4)編輯 收藏

            linux9.0 用dlopen,動態加載函數XmlParse(),能成功被加載,但是訪問core dump ,很是奇怪,錯誤點在memmove....,實在沒有辦法,只能直接連接到libexpat.so,直接用XmlParse而沒有任何問題,很是奇怪
            libexpat.dll在windows下動態加載無任何問題
            所以只能改寫:

             1NVXML_INLINE
             2bool    NVXmlTree::Init_XmlLib(const char * libexpat){    
             3#ifdef WIN32
             4    if ( !_xml_dll.LoadDll(libexpat)){
             5        return false;    
             6    }
                
             7    _xmlf.XML_Parse= (NV_XML_Parse)_xml_dll.LoadSymbol("XML_Parse");    
             8    _xmlf.XML_ParserCreate = (NV_XML_ParserCreate)_xml_dll.LoadSymbol("XML_ParserCreate");    
             9    _xmlf.XML_ParserFree=(NV_XML_ParserFree)_xml_dll.LoadSymbol("XML_ParserFree");
            10    _xmlf.XML_SetElementHandler=(NV_XML_SetElementHandler)_xml_dll.LoadSymbol("XML_SetElementHandler");
            11    _xmlf.XML_SetUserData = (NV_XML_SetUserData)_xml_dll.LoadSymbol("XML_SetUserData");        
            12    _xmlf.XML_SetEncoding = (NV_XML_SetEncoding) _xml_dll.LoadSymbol("XML_SetEncoding");    
            13    _xmlf.XML_SetCharacterDataHandler = (NV_XML_SetCharacterDataHandler)
            14                            _xml_dll.LoadSymbol("XML_SetCharacterDataHandler");    
            15#endif
            16#ifdef _UNIX
            17//-- on unix,using expat api directly
            18    _xmlf.XML_Parse= (NV_XML_Parse)XML_Parse;    
            19    _xmlf.XML_ParserCreate = (NV_XML_ParserCreate)XML_ParserCreate;    
            20    _xmlf.XML_ParserFree=(NV_XML_ParserFree)XML_ParserFree;
            21    _xmlf.XML_SetElementHandler=(NV_XML_SetElementHandler)XML_SetElementHandler;
            22    _xmlf.XML_SetUserData = (NV_XML_SetUserData)XML_SetUserData;        
            23    _xmlf.XML_SetEncoding = (NV_XML_SetEncoding)XML_SetEncoding;    
            24    _xmlf.XML_SetCharacterDataHandler = (NV_XML_SetCharacterDataHandler)XML_SetCharacterDataHandler;    
            25
            26#endif
            27    return true;
            28}
                
            posted @ 2005-12-11 20:26 放屁阿狗 閱讀(769) | 評論 (0)編輯 收藏

            僅列出標題
            共25頁: First 17 18 19 20 21 22 23 24 25 
            色综合久久中文色婷婷| 久久99久久成人免费播放| 久久国产美女免费观看精品| 国产成人无码精品久久久免费| 成人国内精品久久久久影院| 一本伊大人香蕉久久网手机| 天堂无码久久综合东京热| 亚洲中文精品久久久久久不卡| 久久国产亚洲高清观看| 久久97久久97精品免视看| 夜夜亚洲天天久久| 久久www免费人成精品香蕉| 久久AAAA片一区二区| 久久99精品免费一区二区 | 久久香蕉综合色一综合色88| 精品无码久久久久久尤物| 久久综合九色综合久99| 久久精品a亚洲国产v高清不卡| 婷婷五月深深久久精品| 久久影视综合亚洲| 久久国产AVJUST麻豆| 亚洲精品乱码久久久久久中文字幕| 久久国产欧美日韩精品免费| 午夜人妻久久久久久久久| 久久亚洲精品人成综合网| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久精品这里热有精品| 2021国产成人精品久久| 亚洲乱码日产精品a级毛片久久| 久久免费视频一区| 久久久www免费人成精品| 久久久久人妻一区精品| 久久久久亚洲AV片无码下载蜜桃| 久久综合亚洲欧美成人| 久久国产香蕉视频| 久久综合综合久久综合| 狠狠精品干练久久久无码中文字幕| 久久天天躁夜夜躁狠狠| 欧美777精品久久久久网| 久久精品一本到99热免费| 国产精品无码久久综合网|