@@ -134,47 +134,27 @@ schedule_sequence make_temporal_dither_schedule(int n_planes,
134134 if (n_temporal_planes >= n_planes) {
135135 throw std::range_error (" n_temporal_planes can't exceed n_planes" );
136136 }
137- if (n_temporal_planes != 2 && n_temporal_planes != 4 ) {
138- // the code can generate a schedule for 8 temporal planes, but it
139- // flickers intolerably
140- throw std::range_error (" n_temporal_planes must be 0, 1, 2, or 4" );
141- }
142137
143138 int n_real_planes = n_planes - n_temporal_planes;
144139
145- schedule base_sched;
146- for (int j = 0 ; j < n_real_planes; j++) {
147- base_sched.emplace_back (
148- 9 - j, (1 << (n_temporal_planes + n_real_planes - j - 1 )) /
149- n_temporal_planes);
150- }
151-
152140 schedule_sequence result;
153141
154- auto add_sched = [&result, &base_sched](int plane, int count) {
155- auto sched = base_sched;
142+ auto add_sched = [&result, n_real_planes,
143+ n_temporal_planes](int i, int plane, int count) {
144+ schedule sched;
145+ for (int j = 0 ; j < n_real_planes; j++) {
146+ int k = 1 << (n_temporal_planes + n_real_planes - j - 1 );
147+ sched.emplace_back (9 - j, (k + i) / n_temporal_planes);
148+ }
156149 sched.emplace_back (9 - plane, count);
157150 result.emplace_back (sched);
158151 };
159152
160153 for (int i = 0 ; i < n_temporal_planes; i++) {
161- add_sched (n_real_planes + i, 1 << (n_temporal_planes - i - 1 ));
162- }
163- #if 0
164- std::vector<uint32_t> counts(10, 0);
165- for (auto s : result) {
166- for(auto t: s) {
167- counts[t.shift] += t.active_time;
168- }
169- }
170- for (auto s : counts) {
171- printf("%d ", s);
154+ add_sched (i, n_real_planes + i, 1 << (n_temporal_planes - i - 1 ));
172155 }
173- printf("\n");
174- #endif
175156
176157 return rescale_schedule (result, pixels_across);
177- ;
178158}
179159
180160struct matrix_geometry {
0 commit comments