大恒采集卡的,采集c++代码

#ifndef   _DAHENG_CARD_HEAD_
#define  _DAHENG_CARD_HEAD_
#include"Daheng\CGVideo.h"
#include"Daheng\CGVidEx.h"
#pragma comment(lib, "CGVideo.lib")
#pragma comment(lib, "CGVidEx.lib")

class DaHengVideo
{
public:
    DaHengVideo()
    {
        initdata();
    }
    ~DaHengVideo()
    {
        clear();
    }
    void initdata()
    {
         pImage=NULL;
        m_CardID=1,m_PortID=2,m_OSC28M=0;
        m_Width=768,m_Height=576;
        m_inputX=0,m_inputY=0,m_inputW=768,m_inputH=576;
        m_Brightness=128,m_Contrast=128,m_Hue=80,m_Saturation=128;
        bInit =false;
    }
    bool setup(int w,int h,int CardID,int PortID,int OSC28M)
    {
         m_Width=w,m_Height=h;
    //---------------------------------------------------------------------------------------
    m_size=m_Width*m_Height*3;
    pImage=new BYTE[m_size];
 
    
     //
    CGSTATUS status =BeginCGCard(m_CardID,&m_hcg);
    if(status!= CG_OK)
    {
        printf("init Card error! \n");
    }
    CGSetVideoStandard(m_hcg,PAL);
    CGSetVideoFormat(m_hcg,RGB888);
    CGSetScanMode(m_hcg,FRAME);
    if(m_OSC28M)
        CGSelectCryOSC(m_hcg,CRY_OSC_28M);
    else
        CGSelectCryOSC(m_hcg,CRY_OSC_35M);
    VIDEO_SOURCE source;
    source.type    = COMPOSITE_VIDEO;
    source.nIndex = m_PortID;
    CGSetVideoSource(m_hcg,source);
    CGSetInputWindow(m_hcg,m_inputX,m_inputY,m_inputW,m_inputH);
    CGSetOutputWindow(m_hcg,0,0,m_Width,m_Height);
    CGOpenSnapEx(m_hcg,SnapCallbackEx,this);
    CGStartSnapEx(m_hcg,m_size*((m_CardID-1)*2),TRUE,2);

    SetBrightness(m_Brightness);
    SetContrast(m_Contrast);
    SetHue(m_Hue);
    SetSaturation(m_Saturation);
    bInit  =true;
        printf("DaHeng Card init Succssed \n");
        return true;
    }

    void clear()
    {
        CGSTATUS m_stats=EndCGCard(m_hcg);
        if(m_stats ==CG_OK)
        {
            printf("DaHengCard Shutdown Sucssed!\n ");
        }
        if(pImage!=NULL)
        {
            delete [] pImage;
            pImage =NULL;
        }
        
    }
    
    

    void SetBrightness(long Brightness){m_Brightness=Brightness;CGAdjustVideo(m_hcg,BRIGHTNESS,m_Brightness);}
    void SetContrast(long Contrast){m_Contrast=Contrast;CGAdjustVideo(m_hcg,CONTRAST,m_Contrast);}
    void SetHue(long Hue){m_Hue=Hue;CGAdjustVideo(m_hcg,HUE,m_Hue);}
    void SetSaturation(long Saturation){m_Saturation=Saturation;CGAdjustVideo(m_hcg,SATURATION,m_Saturation);}

    void update()
    {
        if(m_Refrash)
        {
        
        
            m_Refrash=false;
        }
    
    }
    int GetW()
    {
        return m_Width;
    }
    int GetH()
    {
        return m_Height;
    }
    BYTE *GetPixels()
    {
        return pImage;
    
    }


    //
    void Play()
    {
        CGStartSnapEx(m_hcg,m_size*((m_CardID-1)*2),TRUE,2);
    }
    void Stop()
    {
        CGStopSnapEx(m_hcg);
    }
    void Snap(int mNumber)
    {
    //    if(m_Refrash)return;
        if(!bInit)
            return ;
        HANDLE handle = NULL;
        BYTE *pStaticBuffer=NULL;
        if(CG_SUCCESS(CGStaticMemLock(m_size*(mNumber+(m_CardID-1)*2),m_size,&handle,(VOID **)&pStaticBuffer)))
        {
            printf("wai get data \n");
            if(CG_SUCCESS(CGDataTransform(pImage,pStaticBuffer,m_Width,m_Height,24,false)))
            {
                printf("get data \n");
                m_Refrash=true;
            }
        }
        CGStaticMemUnlock(handle);
    }
static int CALLBACK SnapCallbackEx(SNAP_INFO *pInfo)
{
    DaHengVideo* pClass = (DaHengVideo*)(pInfo->pParam);
    pClass->Snap(pInfo->nNumber);
    printf("staic get \n");
    return 1;
}

private:
    int m_CardID;
    int m_PortID;
    int m_Width;
    int m_Height;
    int m_size;
    HCG m_hcg;

    int m_OSC28M;
    BYTE* pImage;

private:
    int m_Brightness,m_Contrast,m_Hue,m_Saturation;
    int m_inputX,m_inputY,m_inputW,m_inputH;
    bool m_Refrash;
    bool bInit;
};




#endif
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值