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).
15 #include "AtmoDynData.h"
17 #if defined(_ATMO_VLC_PLUGIN_)
18 CAtmoDynData::CAtmoDynData(vlc_object_t *p_atmo_filter, CAtmoConfig *pAtmoConfig) {
19 this->p_atmo_filter = p_atmo_filter;
20 this->m_pAtmoConfig = pAtmoConfig;
21 this->m_pAtmoConnection = NULL;
22 this->m_pCurrentEffectThread = NULL;
24 this->m_pLivePacketQueue = NULL;
25 this->m_pLiveInput = NULL;
26 this->m_LivePictureSource = lpsExtern;
27 vlc_mutex_init( &m_lock );
30 CAtmoDynData::CAtmoDynData(HINSTANCE hInst, CAtmoConfig *pAtmoConfig, CAtmoDisplays *pAtmoDisplays) {
31 this->m_pAtmoConfig = pAtmoConfig;
32 this->m_pAtmoDisplays = pAtmoDisplays;
33 this->m_pAtmoConnection = NULL;
34 this->m_pCurrentEffectThread = NULL;
35 this->m_hInst = hInst;
37 this->m_pLivePacketQueue = NULL;
38 this->m_pLiveInput = NULL;
39 this->m_LivePictureSource = lpsScreenCapture;
40 InitializeCriticalSection( &m_RemoteCallCriticalSection );
44 CAtmoDynData::~CAtmoDynData(void)
46 #if defined(_ATMO_VLC_PLUGIN_)
47 vlc_mutex_destroy( &m_lock );
49 DeleteCriticalSection(&m_RemoteCallCriticalSection);
53 void CAtmoDynData::LockCriticalSection() {
54 #if defined(_ATMO_VLC_PLUGIN_)
55 vlc_mutex_lock( &m_lock );
57 EnterCriticalSection(&m_RemoteCallCriticalSection);
61 void CAtmoDynData::UnLockCriticalSection() {
62 #if defined(_ATMO_VLC_PLUGIN_)
63 vlc_mutex_unlock( &m_lock );
65 LeaveCriticalSection(&m_RemoteCallCriticalSection);
69 void CAtmoDynData::CalculateDefaultZones()
75 CAtmoZoneDefinition *zoneDef;
80 m_pAtmoConfig->UpdateZoneDefinitionCount();
83 num_cols_top = m_pAtmoConfig->getZonesTopCount();
84 num_cols_bottom = m_pAtmoConfig->getZonesBottomCount();
85 num_rows = m_pAtmoConfig->getZonesLRCount();
87 for(int zone=0; zone < m_pAtmoConfig->getZoneCount(); zone++)
89 zoneDef = m_pAtmoConfig->getZoneDefinition(zone);
95 // the zones will be counted starting from top left - in clockwise order around the display
96 // the summary channel will be the last one (in the center)
98 // top zones from left to right
99 for(int c=0;c<num_cols_top;c++)
101 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
103 int l = (c * CAP_WIDTH)/num_cols_top;
104 int r = ((c+1) * CAP_WIDTH)/num_cols_top;
105 zoneDef->FillGradientFromTop( ATMO_MAX( l - CAP_ZONE_OVERLAP, 0) , ATMO_MIN( r + CAP_ZONE_OVERLAP, CAP_WIDTH ) );
108 // right zones from top to bottom
109 for(int r=0;r<num_rows;r++)
111 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
113 int t = (r * CAP_HEIGHT)/num_rows;
114 int b = ((r+1) * CAP_HEIGHT)/num_rows;
115 zoneDef->FillGradientFromRight( ATMO_MAX( t - CAP_ZONE_OVERLAP, 0) , ATMO_MIN( b + CAP_ZONE_OVERLAP, CAP_HEIGHT) );
118 // bottom zones from RIGHT to LEFT!
119 for(int c=(num_cols_bottom-1);c>=0;c--)
121 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
123 int l = (c * CAP_WIDTH)/num_cols_bottom;
124 int r = ((c+1) * CAP_WIDTH)/num_cols_bottom;
125 zoneDef->FillGradientFromBottom( ATMO_MAX( l - CAP_ZONE_OVERLAP, 0 ), ATMO_MIN( r + CAP_ZONE_OVERLAP, CAP_WIDTH ) );
128 // left zones from bottom to top!
129 for(int r=(num_rows-1);r>=0;r--)
131 zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
134 int t = (r * CAP_HEIGHT)/num_rows;
135 int b = ((r+1) * CAP_HEIGHT)/num_rows;
136 zoneDef->FillGradientFromLeft( ATMO_MAX( t - CAP_ZONE_OVERLAP, 0 ), ATMO_MIN( b + CAP_ZONE_OVERLAP, CAP_HEIGHT ) );
139 if(m_pAtmoConfig->getZoneSummary())
141 // and last the summary zone if requested!
142 zoneDef = m_pAtmoConfig->getZoneDefinition(i++);
149 #if defined(_ATMO_VLC_PLUGIN_)
150 void CAtmoDynData::ReloadZoneDefinitionBitmaps()
152 // only as dummy for VLC Module - to avoid to if def out all calls to this function
157 #if !defined(_ATMO_VLC_PLUGIN_)
159 void CAtmoDynData::setWorkDir(const char *dir)
161 strcpy( m_WorkDir, dir );
164 char *CAtmoDynData::getWorkDir()
169 void CAtmoDynData::ReloadZoneDefinitionBitmaps()
172 // suchlogik für die Bitmaps ...
173 // <WorkDir>\hardware\numchannels\zone..0..n.bmp
174 // <WorkDir>\hardware\zone..0..n.bmp
175 // <WorkDir>\zone..0..n.bmp
176 // Automatik Berechnung...
177 LockCriticalSection();
178 if(!m_pAtmoConnection || !m_pAtmoConfig) {
179 UnLockCriticalSection();
183 m_pAtmoConfig->UpdateZoneDefinitionCount();
185 CalculateDefaultZones();
188 char psz_filename[MAX_PATH];
189 CAtmoZoneDefinition *zoneDef;
191 sprintf(psz_filename,"%s%s",
193 m_pAtmoConnection->getDevicePath()
195 CreateDirectory( psz_filename, NULL );
197 sprintf(psz_filename,"%s%s\\%dx%dx%d",
199 m_pAtmoConnection->getDevicePath(),
200 m_pAtmoConfig->getZonesTopCount(),
201 m_pAtmoConfig->getZonesLRCount(),
202 m_pAtmoConfig->getZonesBottomCount()
205 CreateDirectory(psz_filename, NULL );
207 // try to load device depended zone definition bitmaps
208 for(int zone=0; zone < m_pAtmoConfig->getZoneCount(); zone++) {
209 zoneDef = m_pAtmoConfig->getZoneDefinition(zone);
210 if(!zoneDef) continue;
212 sprintf(psz_filename,"%s%s\\%dx%dx%d\\zone_%d.bmp",
214 m_pAtmoConnection->getDevicePath(),
215 m_pAtmoConfig->getZonesTopCount(),
216 m_pAtmoConfig->getZonesLRCount(),
217 m_pAtmoConfig->getZonesBottomCount(),
220 i = zoneDef->LoadGradientFromBitmap( psz_filename );
221 if(i == ATMO_LOAD_GRADIENT_OK) continue;
222 if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
223 MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);
225 sprintf(psz_filename,"%s%s\\zone_%d.bmp",
227 m_pAtmoConnection->getDevicePath(),
230 i = zoneDef->LoadGradientFromBitmap( psz_filename );
231 if(i == ATMO_LOAD_GRADIENT_OK) continue;
232 if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
233 MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);
235 sprintf(psz_filename,"%szone_%d.bmp",
239 i = zoneDef->LoadGradientFromBitmap( psz_filename );
240 if(i == ATMO_LOAD_GRADIENT_OK) continue;
241 if((i == ATMO_LOAD_GRADIENT_FAILED_SIZE) || (i == ATMO_LOAD_GRADIENT_FAILED_HEADER))
242 MessageBox(0,psz_filename,"Failed to load, Check Format, Check Size.",MB_ICONERROR);
245 UnLockCriticalSection();