@@ -130,6 +130,8 @@ CU_REGISTER_DEBUG_PINS(video_timing, video_dma_buffer, video_irq, video_dma_comp
130
130
131
131
// ======================
132
132
133
+ #define GENERATING_LIST 1
134
+ //#define PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS 1
133
135
#if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
134
136
// we want some sort of assertion even in release builds
135
137
#ifndef NDEBUG
@@ -260,7 +262,7 @@ static struct {
260
262
// locks (i.e. we are saving an extra lock in the latch case by not placing in a separate struct)
261
263
full_scanline_buffer_t * generated_ascending_scanline_id_list ;
262
264
full_scanline_buffer_t * generated_ascending_scanline_id_list_tail ;
263
- #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
265
+ #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
264
266
full_scanline_buffer_t * generating_list ;
265
267
#endif
266
268
} scanline ;
@@ -383,6 +385,7 @@ inline static full_scanline_buffer_t *list_remove_head_ascending(full_scanline_b
383
385
full_scanline_buffer_t * fsb = * phead ;
384
386
385
387
if (fsb ) {
388
+ scanline_assert (* ptail );
386
389
* phead = fsb -> next ;
387
390
388
391
if (!fsb -> next ) {
@@ -797,8 +800,9 @@ void __video_most_time_critical_func(prepare_for_active_scanline_irqs_enabled)()
797
800
shared_state .scanline .current_scanline_buffer = NULL ;
798
801
#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS
799
802
} else if (fsb -> core .link_after && !-- fsb -> core .link_after ) {
800
- assert (fsb -> core .link );
803
+ scanline_assert (fsb -> core .link );
801
804
spin_lock_unsafe_blocking (shared_state .in_use .lock );
805
+ scanline_assert (fsb -> core .link );
802
806
DEBUG_PINS_SET (video_link , 1 );
803
807
full_scanline_buffer_t * fsb2 = (full_scanline_buffer_t * )fsb -> core .link ;
804
808
fsb -> core .link = NULL ; // the linkee scanline is now tracked on its own, so shouldn't be freed with the linker
@@ -1066,7 +1070,7 @@ extern scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_s
1066
1070
if (fsb ) {
1067
1071
save = spin_lock_blocking (shared_state .scanline .lock );
1068
1072
DEBUG_PINS_SET (video_timing , 1 );
1069
- #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
1073
+ #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
1070
1074
list_prepend (& shared_state .scanline .generating_list , fsb );
1071
1075
#endif
1072
1076
// todo improve this algorithm... how far ahead should we be
@@ -1093,7 +1097,7 @@ extern scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_s
1093
1097
DEBUG_PINS_CLR (video_link , 1 );
1094
1098
DEBUG_PINS_CLR (video_generation , 1 );
1095
1099
#if PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS
1096
- fsb -> core .link_after = 0 ;
1100
+ if ( fsb ) fsb -> core .link_after = 0 ;
1097
1101
#endif
1098
1102
return (scanvideo_scanline_buffer_t * ) fsb ;
1099
1103
}
@@ -1129,7 +1133,7 @@ scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline
1129
1133
{
1130
1134
save = spin_lock_blocking (shared_state .scanline .lock );
1131
1135
DEBUG_PINS_SET (video_timing , 1 );
1132
- #ifdef ENABLE_SCANLINE_ASSERTIONS
1136
+ #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
1133
1137
list_prepend (& shared_state .scanline .generating_list , fsb );
1134
1138
list_prepend (& shared_state .scanline .generating_list , fsb2 );
1135
1139
#endif
@@ -1202,7 +1206,7 @@ scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline
1202
1206
}
1203
1207
save = spin_lock_blocking (shared_state .scanline .lock );
1204
1208
DEBUG_PINS_SET (video_timing , 1 );
1205
- #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
1209
+ #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
1206
1210
list_prepend (& shared_state .scanline .generating_list , fsb );
1207
1211
#endif
1208
1212
// todo improve this algorithm... how far ahead should we be
@@ -1233,7 +1237,7 @@ scanvideo_scanline_buffer_t *__video_time_critical_func(scanvideo_begin_scanline
1233
1237
1234
1238
DEBUG_PINS_CLR (video_link , 1 );
1235
1239
DEBUG_PINS_CLR (video_generation , 1 );
1236
- fsb -> core .link_after = 0 ;
1240
+ if ( fsb ) fsb -> core .link_after = 0 ;
1237
1241
return (scanvideo_scanline_buffer_t * ) fsb ;
1238
1242
}
1239
1243
#endif
@@ -1243,7 +1247,7 @@ extern void __video_time_critical_func(scanvideo_end_scanline_generation)(
1243
1247
DEBUG_PINS_SET (video_generation , 2 );
1244
1248
full_scanline_buffer_t * fsb = (full_scanline_buffer_t * ) scanline_buffer ;
1245
1249
uint32_t save = spin_lock_blocking (shared_state .scanline .lock );
1246
- #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS
1250
+ #if PICO_SCANVIDEO_ENABLE_SCANLINE_ASSERTIONS && GENERATING_LIST
1247
1251
list_remove (& shared_state .scanline .generating_list , fsb );
1248
1252
#endif
1249
1253
list_insert_ascending (& shared_state .scanline .generated_ascending_scanline_id_list ,
0 commit comments