]> git.sesse.net Git - vlc/blob - modules/video_filter/atmo/AtmoDynData.cpp
atmo: fix most warnings, convert to Unicode, kill useless functions
[vlc] / modules / video_filter / atmo / AtmoDynData.cpp
1 /*
2  * AtmoDynData.cpp: class for holding all variable data - which may be
3  * passed between function calls, into threads instead of the use
4  * of global variables
5  *
6  * See the README.txt file for copyright information and how to reach the author(s).
7  *
8  * $Id$
9  */
10
11 #ifdef HAVE_CONFIG_H
12 # include "config.h"
13 #endif
14
15 #include "AtmoDynData.h"
16
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;
23
24     this->m_pLivePacketQueue = NULL;
25     this->m_pLiveInput = NULL;
26     this->m_LivePictureSource = lpsExtern;
27     vlc_mutex_init( &m_lock );
28 }
29 #else
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;
36
37     this->m_pLivePacketQueue = NULL;
38     this->m_pLiveInput = NULL;
39     this->m_LivePictureSource = lpsScreenCapture;
40     InitializeCriticalSection( &m_RemoteCallCriticalSection );
41 }
42 #endif
43
44 CAtmoDynData::~CAtmoDynData(void)
45 {
46 #if defined(_ATMO_VLC_PLUGIN_)
47     vlc_mutex_destroy( &m_lock );
48 #else
49     DeleteCriticalSection(&m_RemoteCallCriticalSection);
50 #endif
51 }
52
53 void CAtmoDynData::LockCriticalSection() {
54 #if defined(_ATMO_VLC_PLUGIN_)
55     vlc_mutex_lock( &m_lock );
56 #else
57     EnterCriticalSection(&m_RemoteCallCriticalSection);
58 #endif
59 }
60
61 void CAtmoDynData::UnLockCriticalSection() {
62 #if defined(_ATMO_VLC_PLUGIN_)
63     vlc_mutex_unlock( &m_lock );
64 #else
65     LeaveCriticalSection(&m_RemoteCallCriticalSection);
66 #endif
67 }
68
69 void CAtmoDynData::CalculateDefaultZones()
70 {
71   int i;
72   int num_cols_top;
73   int num_cols_bottom;
74   int num_rows;
75   CAtmoZoneDefinition *zoneDef;
76
77   if(!m_pAtmoConfig)
78      return;
79
80   m_pAtmoConfig->UpdateZoneDefinitionCount();
81
82
83   num_cols_top    = m_pAtmoConfig->getZonesTopCount();
84   num_cols_bottom = m_pAtmoConfig->getZonesBottomCount();
85   num_rows        = m_pAtmoConfig->getZonesLRCount();
86
87   for(int zone=0; zone < m_pAtmoConfig->getZoneCount(); zone++)
88   {
89      zoneDef = m_pAtmoConfig->getZoneDefinition(zone);
90      if(zoneDef)
91         zoneDef->Fill(0);
92   }
93
94
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)
97   i = 0;
98   // top zones from left to right
99   for(int c=0;c<num_cols_top;c++)
100   {
101        zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
102        if(zoneDef) {
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 ) );
106        }
107   }
108   // right zones from top to bottom
109   for(int r=0;r<num_rows;r++)
110   {
111        zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
112        if(zoneDef) {
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) );
116        }
117   }
118   //  bottom zones from  RIGHT to LEFT!
119   for(int c=(num_cols_bottom-1);c>=0;c--)
120   {
121        zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
122        if(zoneDef) {
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 ) );
126        }
127   }
128   // left zones from bottom to top!
129   for(int r=(num_rows-1);r>=0;r--)
130   {
131        zoneDef = m_pAtmoConfig->getZoneDefinition(i); i++;
132        if(zoneDef)
133        {
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 ) );
137        }
138   }
139   if(m_pAtmoConfig->getZoneSummary())
140   {
141      // and last the summary zone if requested!
142      zoneDef = m_pAtmoConfig->getZoneDefinition(i++);
143      if(zoneDef)
144         zoneDef->Fill(255);
145   }
146 }
147
148
149 #if defined(_ATMO_VLC_PLUGIN_)
150 void CAtmoDynData::ReloadZoneDefinitionBitmaps()
151 {
152  // only as dummy for VLC Module - to avoid to if def out all calls to this function
153 }
154 #endif
155
156
157 #if !defined(_ATMO_VLC_PLUGIN_)
158
159 void CAtmoDynData::setWorkDir(const char *dir)
160 {
161     strcpy( m_WorkDir, dir );
162 }
163
164 char *CAtmoDynData::getWorkDir()
165 {
166     return m_WorkDir;
167 }
168
169 void CAtmoDynData::ReloadZoneDefinitionBitmaps()
170 {
171   int i;
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();
180       return;
181   }
182
183   m_pAtmoConfig->UpdateZoneDefinitionCount();
184
185   CalculateDefaultZones();
186
187
188   char psz_filename[MAX_PATH];
189   CAtmoZoneDefinition *zoneDef;
190
191   sprintf(psz_filename,"%s%s",
192                         m_WorkDir,
193                         m_pAtmoConnection->getDevicePath()
194                 );
195   CreateDirectory( psz_filename, NULL );
196
197   sprintf(psz_filename,"%s%s\\%dx%dx%d",
198                         m_WorkDir,
199                         m_pAtmoConnection->getDevicePath(),
200                         m_pAtmoConfig->getZonesTopCount(),
201                         m_pAtmoConfig->getZonesLRCount(),
202                         m_pAtmoConfig->getZonesBottomCount()
203
204                );
205   CreateDirectory(psz_filename, NULL );
206
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;
211
212       sprintf(psz_filename,"%s%s\\%dx%dx%d\\zone_%d.bmp",
213                         m_WorkDir,
214                         m_pAtmoConnection->getDevicePath(),
215                         m_pAtmoConfig->getZonesTopCount(),
216                         m_pAtmoConfig->getZonesLRCount(),
217                         m_pAtmoConfig->getZonesBottomCount(),
218                         zone
219                 );
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);
224
225       sprintf(psz_filename,"%s%s\\zone_%d.bmp",
226                         m_WorkDir,
227                         m_pAtmoConnection->getDevicePath(),
228                         zone
229                 );
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);
234
235       sprintf(psz_filename,"%szone_%d.bmp",
236                         m_WorkDir,
237                         zone
238                 );
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);
243   }
244
245   UnLockCriticalSection();
246 }
247
248 #endif
249
250
251