summaryrefslogtreecommitdiff
path: root/apps/radio/radioart.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/radio/radioart.c')
-rw-r--r--apps/radio/radioart.c56
1 files changed, 18 insertions, 38 deletions
diff --git a/apps/radio/radioart.c b/apps/radio/radioart.c
index 07fab814dd..53ed863b3b 100644
--- a/apps/radio/radioart.c
+++ b/apps/radio/radioart.c
@@ -41,10 +41,9 @@ struct radioart {
41 char name[MAX_FMPRESET_LEN+1]; 41 char name[MAX_FMPRESET_LEN+1];
42}; 42};
43 43
44static char* buf;
44static struct radioart radioart[MAX_RADIOART_IMAGES]; 45static struct radioart radioart[MAX_RADIOART_IMAGES];
45#ifdef HAVE_RECORDING 46
46static bool allow_buffer_access = true; /* If we are recording dont touch the buffers! */
47#endif
48static int find_oldest_image(void) 47static int find_oldest_image(void)
49{ 48{
50 int i; 49 int i;
@@ -101,12 +100,10 @@ int radio_get_art_hid(struct dim *requested_dim)
101 int preset = radio_current_preset(); 100 int preset = radio_current_preset();
102 int free_idx = -1; 101 int free_idx = -1;
103 const char* preset_name; 102 const char* preset_name;
104 if (radio_scan_mode() || preset < 0) 103
105 return -1; 104 if (!buf || radio_scan_mode() || preset < 0)
106#ifdef HAVE_RECORDING
107 if (!allow_buffer_access)
108 return -1; 105 return -1;
109#endif 106
110 preset_name = radio_get_preset_name(preset); 107 preset_name = radio_get_preset_name(preset);
111 for (int i=0; i<MAX_RADIOART_IMAGES; i++) 108 for (int i=0; i<MAX_RADIOART_IMAGES; i++)
112 { 109 {
@@ -137,55 +134,38 @@ int radio_get_art_hid(struct dim *requested_dim)
137 134
138 return -1; 135 return -1;
139} 136}
140static void playback_restarting_handler(void *data) 137
138static void buffer_reset_handler(void *data)
141{ 139{
142 (void)data; 140 buf = NULL;
143 int i; 141 for(int i=0;i<MAX_RADIOART_IMAGES;i++)
144 for(i=0;i<MAX_RADIOART_IMAGES;i++)
145 { 142 {
146 if (radioart[i].handle >= 0) 143 if (radioart[i].handle >= 0)
147 bufclose(radioart[i].handle); 144 bufclose(radioart[i].handle);
148 radioart[i].handle = -1; 145 radioart[i].handle = -1;
149 radioart[i].name[0] = '\0'; 146 radioart[i].name[0] = '\0';
150 } 147 }
151} 148
152#ifdef HAVE_RECORDING
153static void recording_started_handler(void *data)
154{
155 (void)data;
156 allow_buffer_access = false;
157 playback_restarting_handler(NULL);
158}
159static void recording_stopped_handler(void *data)
160{
161 (void)data; 149 (void)data;
162 allow_buffer_access = true;
163} 150}
164#endif
165 151
166void radioart_init(bool entering_screen) 152void radioart_init(bool entering_screen)
167{ 153{
168 int i;
169 if (entering_screen) 154 if (entering_screen)
170 { 155 {
171 for(i=0;i<MAX_RADIOART_IMAGES;i++)
172 {
173 radioart[i].handle = -1;
174 radioart[i].name[0] = '\0';
175 }
176 add_event(PLAYBACK_EVENT_START_PLAYBACK, true, playback_restarting_handler);
177
178 /* grab control over buffering */ 156 /* grab control over buffering */
179 char* buf;
180 size_t bufsize; 157 size_t bufsize;
181 buf = audio_get_buffer(false, &bufsize); 158 buf = audio_get_buffer(false, &bufsize);
182 buffering_reset(buf, bufsize); 159 buffering_reset(buf, bufsize);
160 /* one-shot */
161 add_event(BUFFER_EVENT_BUFFER_RESET, true, buffer_reset_handler);
183 } 162 }
184 else 163 else /* init at startup */
185 { 164 {
186#if defined(HAVE_RECORDING) 165 for(int i=0;i<MAX_RADIOART_IMAGES;i++)
187 add_event(RECORDING_EVENT_START, false, recording_started_handler); 166 {
188 add_event(RECORDING_EVENT_STOP, false, recording_stopped_handler); 167 radioart[i].handle = -1;
189#endif 168 radioart[i].name[0] = '\0';
169 }
190 } 170 }
191} 171}