2 * AtmoDynData.cpp: class for holding all variable data - which may be
3 * passed between function calls, into threads instead of the use
6 * See the README.txt file for copyright information and how to reach the author(s).
11 #include "AtmoDynData.h"
13 #if defined(_ATMO_VLC_PLUGIN_)
14 CAtmoDynData::CAtmoDynData(vlc_object_t *p_atmo_filter, CAtmoConfig *pAtmoConfig) {
15 this->p_atmo_filter = p_atmo_filter;
16 this->m_pAtmoConfig = pAtmoConfig;
17 this->m_pAtmoConnection = NULL;
18 this->m_pCurrentEffectThread = NULL;
20 this->m_pLivePacketQueue = NULL;
21 this->m_pLiveInput = NULL;
22 this->m_LivePictureSource = lpsExtern;
23 vlc_mutex_init( &m_lock );
26 CAtmoDynData::CAtmoDynData(HINSTANCE hInst, CAtmoConfig *pAtmoConfig, CAtmoDisplays *pAtmoDisplays) {
27 this->m_pAtmoConfig = pAtmoConfig;
28 this->m_pAtmoDisplays = pAtmoDisplays;
29 this->m_pAtmoConnection = NULL;
30 this->m_pCurrentEffectThread = NULL;
31 this->m_hInst = hInst;
33 this->m_pLivePacketQueue = NULL;
34 this->m_pLiveInput = NULL;
35 this->m_LivePictureSource = lpsScreenCapture;
36 InitializeCriticalSection( &m_RemoteCallCriticalSection );
40 CAtmoDynData::~CAtmoDynData(void)
42 #if defined(_ATMO_VLC_PLUGIN_)
43 vlc_mutex_destroy( &m_lock );
45 DeleteCriticalSection(&m_RemoteCallCriticalSection);
49 void CAtmoDynData::LockCriticalSection() {
50 #if defined(_ATMO_VLC_PLUGIN_)
51 vlc_mutex_lock( &m_lock );
53 EnterCriticalSection(&m_RemoteCallCriticalSection);
57 void CAtmoDynData::UnLockCriticalSection() {
58 #if defined(_ATMO_VLC_PLUGIN_)
59 vlc_mutex_unlock( &m_lock );
61 LeaveCriticalSection(&m_RemoteCallCriticalSection);
65 void CAtmoDynData::CalculateDefaultZones()
71 CAtmoZoneDefinition *zoneDef;
76 m_pAtmoConfig->UpdateZoneDefinitionCount();
79 num_cols_top = m_pAtmoConfig->getZonesTopCount();
80 num_cols_bottom = m_pAtmoConfig->getZonesBottomCount();
81 num_rows = m_pAtmoConfig->getZonesLRCount();
83 for(int zone=0; zone < m_pAtmoConfig->getZoneCount(); zone++)
85 zoneDef = m_pAtmoConfig->getZoneDefinition(zone);
91 // the zones will be counted starting from top left - in clockwise order around the display
92 // the summary channel will be the last one (in the center)
94 // top zones from left to right
95 for(int c=0;c<num_cols_top;c++)
97 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
99 int l = (c * CAP_WIDTH)/num_cols_top;
100 int r = ((c+1) * CAP_WIDTH)/num_cols_top;
101 zoneDef->FillGradientFromTop( ATMO_MAX( l - CAP_ZONE_OVERLAP, 0) , ATMO_MIN( r + CAP_ZONE_OVERLAP, CAP_WIDTH ) );
104 // right zones from top to bottom
105 for(int r=0;r<num_rows;r++)
107 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
109 int t = (r * CAP_HEIGHT)/num_rows;
110 int b = ((r+1) * CAP_HEIGHT)/num_rows;
111 zoneDef->FillGradientFromRight( ATMO_MAX( t - CAP_ZONE_OVERLAP, 0) , ATMO_MIN( b + CAP_ZONE_OVERLAP, CAP_HEIGHT) );
114 // bottom zones from RIGHT to LEFT!
115 for(int c=(num_cols_bottom-1);c>=0;c--)
117 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
119 int l = (c * CAP_WIDTH)/num_cols_bottom;
120 int r = ((c+1) * CAP_WIDTH)/num_cols_bottom;
121 zoneDef->FillGradientFromBottom( ATMO_MAX( l - CAP_ZONE_OVERLAP, 0 ), ATMO_MIN( r + CAP_ZONE_OVERLAP, CAP_WIDTH ) );
124 // left zones from bottom to top!
125 for(int r=(num_rows-1);r>=0;r--)
127 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
130 int t = (r * CAP_HEIGHT)/num_rows;
131 int b = ((r+1) * CAP_HEIGHT)/num_rows;
132 zoneDef->FillGradientFromLeft( ATMO_MAX( t - CAP_ZONE_OVERLAP, 0 ), ATMO_MIN( b + CAP_ZONE_OVERLAP, CAP_HEIGHT ) );
135 if(m_pAtmoConfig->getZoneSummary())
137 // and last the summary zone if requested!
138 zoneDef = m_pAtmoConfig->getZoneDefinition(i++);
145 #if defined(_ATMO_VLC_PLUGIN_)
146 void CAtmoDynData::ReloadZoneDefinitionBitmaps()
148 // only as dummy for VLC Module - to avoid to if def out all calls to this function
153 #if !defined(_ATMO_VLC_PLUGIN_)
155 void CAtmoDynData::setWorkDir(const char *dir)
157 strcpy( m_WorkDir, dir );
160 char *CAtmoDynData::getWorkDir()
165 void CAtmoDynData::ReloadZoneDefinitionBitmaps()
168 // suchlogik für die Bitmaps ...
169 // <WorkDir>\hardware\numchannels\zone..0..n.bmp
170 // <WorkDir>\hardware\zone..0..n.bmp
171 // <WorkDir>\zone..0..n.bmp
172 // Automatik Berechnung...
173 LockCriticalSection();
174 if(!m_pAtmoConnection || !m_pAtmoConfig) {
175 UnLockCriticalSection();
179 m_pAtmoConfig->UpdateZoneDefinitionCount();
181 CalculateDefaultZones();
184 char psz_filename[MAX_PATH];
185 CAtmoZoneDefinition *zoneDef;
187 sprintf(psz_filename,"%s%s",
189 m_pAtmoConnection->getDevicePath()
191 CreateDirectory( psz_filename, NULL );
193 sprintf(psz_filename,"%s%s\\%dx%dx%d",
195 m_pAtmoConnection->getDevicePath(),
196 m_pAtmoConfig->getZonesTopCount(),
197 m_pAtmoConfig->getZonesLRCount(),
198 m_pAtmoConfig->getZonesBottomCount()
201 CreateDirectory(psz_filename, NULL );
203 // try to load device depended zone definition bitmaps
204 for(int zone=0; zone < m_pAtmoConfig->getZoneCount(); zone++) {
205 zoneDef = m_pAtmoConfig->getZoneDefinition(zone);
206 if(!zoneDef) continue;
208 sprintf(psz_filename,"%s%s\\%dx%dx%d\\zone_%d.bmp",
210 m_pAtmoConnection->getDevicePath(),
211 m_pAtmoConfig->getZonesTopCount(),
212 m_pAtmoConfig->getZonesLRCount(),
213 m_pAtmoConfig->getZonesBottomCount(),
216 i = zoneDef->LoadGradientFromBitmap( psz_filename );
217 if(i == ATMO_LOAD_GRADIENT_OK) continue;
218 if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
219 MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);
221 sprintf(psz_filename,"%s%s\\zone_%d.bmp",
223 m_pAtmoConnection->getDevicePath(),
226 i = zoneDef->LoadGradientFromBitmap( psz_filename );
227 if(i == ATMO_LOAD_GRADIENT_OK) continue;
228 if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
229 MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);
231 sprintf(psz_filename,"%szone_%d.bmp",
235 i = zoneDef->LoadGradientFromBitmap( psz_filename );
236 if(i == ATMO_LOAD_GRADIENT_OK) continue;
237 if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
238 MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);
241 UnLockCriticalSection();