⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmotools.cpp

📁 VLC Player Source Code
💻 CPP
字号:
/* * AtmoTools.cpp: Collection of tool and helperfunction * * See the README.txt file for copyright information and how to reach the author(s). * * $Id$ */#include "AtmoTools.h"#include "AtmoLiveView.h"#include "AtmoSerialConnection.h"#if !defined(_ATMO_VLC_PLUGIN_)#   include "AtmoColorChanger.h"#   include "AtmoLeftRightColorChanger.h"#   include "AtmoDummyConnection.h"#   include "AtmoDmxSerialConnection.h"#endifCAtmoTools::CAtmoTools(void){}CAtmoTools::~CAtmoTools(void){}void CAtmoTools::ShowShutdownColor(CAtmoDynData *pDynData){    pDynData->LockCriticalSection();    CAtmoConnection *atmoConnection = pDynData->getAtmoConnection();    CAtmoConfig *atmoConfig = pDynData->getAtmoConfig();    if((atmoConnection != NULL) && (atmoConfig!=NULL)) {       int r[ATMO_NUM_CHANNELS],g[ATMO_NUM_CHANNELS],b[ATMO_NUM_CHANNELS],i;       // set a special color? on shutdown of the software? mostly may use black or so ...       // if this function ist disabled ... atmo will continuing to show the last color...       if(atmoConnection->isOpen() == ATMO_TRUE) {	        if(atmoConfig->isSetShutdownColor() == 1) {		        for(i=0;i<ATMO_NUM_CHANNELS;i++) {			        r[i] = atmoConfig->getShutdownColor_Red();			        g[i] = atmoConfig->getShutdownColor_Green();			        b[i] = atmoConfig->getShutdownColor_Blue();		        }                atmoConnection->SendData(ATMO_NUM_CHANNELS,r,g,b);	        }       }	}    pDynData->UnLockCriticalSection();}EffectMode CAtmoTools::SwitchEffect(CAtmoDynData *pDynData, EffectMode newEffectMode){    // may need a critical section??    if(pDynData == NULL) {       return emUndefined;    }    pDynData->LockCriticalSection();    CAtmoConfig *atmoConfig = pDynData->getAtmoConfig();    if(atmoConfig == NULL) {       pDynData->UnLockCriticalSection();       return emUndefined;    }    CAtmoConnection *atmoConnection = pDynData->getAtmoConnection();    EffectMode oldEffectMode = atmoConfig->getEffectMode();    CThread *currentEffect = pDynData->getEffectThread();    // stop and delete/cleanup current Effect Thread...    pDynData->setEffectThread(NULL);    if(currentEffect!=NULL) {       currentEffect->Terminate();       delete currentEffect;       currentEffect = NULL;    }    if((atmoConnection!=NULL) && (atmoConnection->isOpen()==ATMO_TRUE)) {        // neuen EffectThread nur mit aktiver Connection starten...        switch(newEffectMode) {            case emDisabled:                break;            case emStaticColor:                    // get values from config - and put them to all channels?                    int r[ATMO_NUM_CHANNELS],g[ATMO_NUM_CHANNELS],b[ATMO_NUM_CHANNELS];                    for(int i=0;i<ATMO_NUM_CHANNELS;i++) {                        r[i] = (atmoConfig->getStaticColor_Red()   * atmoConfig->getWhiteAdjustment_Red())/255;                        g[i] = (atmoConfig->getStaticColor_Green() * atmoConfig->getWhiteAdjustment_Green())/255;                        b[i] = (atmoConfig->getStaticColor_Blue()  * atmoConfig->getWhiteAdjustment_Blue())/255;                    }                    atmoConnection->SendData(ATMO_NUM_CHANNELS,r,g,b);                break;            case emLivePicture:                currentEffect = new CAtmoLiveView(pDynData);                break;#if !defined(_ATMO_VLC_PLUGIN_)            case emColorChange:                currentEffect = new CAtmoColorChanger(atmoConnection, atmoConfig);                break;#endif#if !defined(_ATMO_VLC_PLUGIN_)            case emLrColorChange:                currentEffect = new CAtmoLeftRightColorChanger(atmoConnection, atmoConfig);                break;#endif        }    }    atmoConfig->setEffectMode(newEffectMode);    pDynData->setEffectThread(currentEffect);    if(currentEffect!=NULL)       currentEffect->Run();    pDynData->UnLockCriticalSection();    return oldEffectMode;}ATMO_BOOL CAtmoTools::RecreateConnection(CAtmoDynData *pDynData){    pDynData->LockCriticalSection();    CAtmoConnection *current = pDynData->getAtmoConnection();    AtmoConnectionType act = pDynData->getAtmoConfig()->getConnectionType();    pDynData->setAtmoConnection(NULL);    if(current != NULL) {       current->CloseConnection();       delete current;    }    switch(act) {           case actSerialPort: {               CAtmoSerialConnection *tempConnection = new CAtmoSerialConnection(pDynData->getAtmoConfig());               if(tempConnection->OpenConnection() == ATMO_FALSE) {#if !defined(_ATMO_VLC_PLUGIN_)                  char errorMsgBuf[200];                  sprintf(errorMsgBuf,"Failed to open serial port com%d with errorcode: %d (0x%x)",                            pDynData->getAtmoConfig()->getComport(),                            tempConnection->getLastError(),                            tempConnection->getLastError()                        );                  MessageBox(0,errorMsgBuf,"Error",MB_ICONERROR | MB_OK);#endif                  delete tempConnection;                  pDynData->UnLockCriticalSection();                  return ATMO_FALSE;               }               pDynData->setAtmoConnection(tempConnection);               CAtmoTools::SetChannelAssignment(pDynData,                           pDynData->getAtmoConfig()->getCurrentChannelAssignment());               pDynData->UnLockCriticalSection();               return ATMO_TRUE;           }#if !defined(_ATMO_VLC_PLUGIN_)           case actDummy: {               CAtmoDummyConnection *tempConnection = new CAtmoDummyConnection(pDynData->getHinstance(),                                                                               pDynData->getAtmoConfig());               if(tempConnection->OpenConnection() == ATMO_FALSE) {                  delete tempConnection;                  pDynData->UnLockCriticalSection();                  return ATMO_FALSE;               }               pDynData->setAtmoConnection(tempConnection);               CAtmoTools::SetChannelAssignment(pDynData, pDynData->getAtmoConfig()->getCurrentChannelAssignment());               pDynData->UnLockCriticalSection();               return ATMO_TRUE;           }           case actDMX: {               // create here your DMX connections... instead of the dummy....               CAtmoDmxSerialConnection *tempConnection = new CAtmoDmxSerialConnection(pDynData->getAtmoConfig());               if(tempConnection->OpenConnection() == ATMO_FALSE) {                  delete tempConnection;                  pDynData->UnLockCriticalSection();                  return ATMO_FALSE;               }               pDynData->setAtmoConnection(tempConnection);               CAtmoTools::SetChannelAssignment(pDynData, pDynData->getAtmoConfig()->getCurrentChannelAssignment());               pDynData->UnLockCriticalSection();               return ATMO_TRUE;           }#endif           default: {               pDynData->UnLockCriticalSection();               return ATMO_FALSE;           }    }}tColorPacket CAtmoTools::WhiteCalibration(CAtmoConfig *pAtmoConfig, tColorPacket ColorPacket){    int w_adj_red   = pAtmoConfig->getWhiteAdjustment_Red();    int w_adj_green = pAtmoConfig->getWhiteAdjustment_Green();    int w_adj_blue  = pAtmoConfig->getWhiteAdjustment_Blue();    for (int i = 0; i < ATMO_NUM_CHANNELS; i++)  {        ColorPacket.channel[i].r = (unsigned char)(((int)w_adj_red   * (int)ColorPacket.channel[i].r)   / 255);        ColorPacket.channel[i].g = (unsigned char)(((int)w_adj_green * (int)ColorPacket.channel[i].g) / 255);        ColorPacket.channel[i].b = (unsigned char)(((int)w_adj_blue  * (int)ColorPacket.channel[i].b)  / 255);    }    return ColorPacket;}tColorPacket CAtmoTools::ApplyGamma(CAtmoConfig *pAtmoConfig, tColorPacket ColorPacket){  return ColorPacket;}int CAtmoTools::SetChannelAssignment(CAtmoDynData *pDynData, int index){    CAtmoConfig *pAtmoConfig = pDynData->getAtmoConfig();    CAtmoConnection *pAtmoConnection = pDynData->getAtmoConnection();    int oldIndex = pAtmoConfig->getCurrentChannelAssignment();    tChannelAssignment *ca = pAtmoConfig->getChannelAssignment(index);    if((ca!=NULL) && (pAtmoConnection!=NULL)) {        pAtmoConnection->SetChannelAssignment(ca);        pAtmoConfig->setCurrentChannelAssignment(index);    }    return oldIndex;}#if !defined(_ATMO_VLC_PLUGIN_)void CAtmoTools::SaveBitmap(HDC hdc,HBITMAP hBmp,char *fileName) {     BITMAPINFO bmpInfo;     BITMAPFILEHEADER  bmpFileHeader;     ZeroMemory(&bmpInfo, sizeof(BITMAPINFO));     bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);     GetDIBits(hdc,hBmp,0,0,NULL,&bmpInfo,DIB_RGB_COLORS);     if(bmpInfo.bmiHeader.biSizeImage<=0)        bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth * abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8;     void *pBuf = malloc(bmpInfo.bmiHeader.biSizeImage);     bmpInfo.bmiHeader.biCompression=BI_RGB;     GetDIBits(hdc,hBmp,0,bmpInfo.bmiHeader.biHeight,pBuf, &bmpInfo, DIB_RGB_COLORS);     bmpFileHeader.bfReserved1=0;     bmpFileHeader.bfReserved2=0;     bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage;#ifdef _ATMO_VLC_PLUGIN_     bmpFileHeader.bfType = VLC_TWOCC('M','B');#else     bmpFileHeader.bfType = MakeWord('M','B');#endif     bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);     FILE *fp = NULL;     fp = fopen(fileName,"wb");     fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp);     fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);     fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp);     fclose(fp);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -