1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 23:52:26 +00:00

Re-enabled working video output for the Electron for the day and consolidated the rough metric I'm using to pick a number of taps for the audio filter.

This commit is contained in:
Thomas Harte 2016-04-17 20:43:20 -04:00
parent 9ede284eb6
commit 499f7ace07
3 changed files with 12 additions and 7 deletions

View File

@ -66,7 +66,7 @@ void Machine::setup_output(float aspect_ratio)
"texValue >>= 4 - (int(icoordinate.x * 8) & 4);" "texValue >>= 4 - (int(icoordinate.x * 8) & 4);"
"return vec3( uvec3(texValue) & uvec3(4u, 2u, 1u));" "return vec3( uvec3(texValue) & uvec3(4u, 2u, 1u));"
"}"); "}");
_crt->set_output_device(Outputs::CRT::Television); _crt->set_output_device(Outputs::CRT::Monitor);
// TODO: as implied below, I've introduced a clock's latency into the graphics pipeline somehow. Investigate. // TODO: as implied below, I've introduced a clock's latency into the graphics pipeline somehow. Investigate.
_crt->set_visible_area(_crt->get_rect_for_area(first_graphics_line - 3, 256, (first_graphics_cycle+1) * crt_cycles_multiplier, 80 * crt_cycles_multiplier, 4.0f / 3.0f)); _crt->set_visible_area(_crt->get_rect_for_area(first_graphics_line - 3, 256, (first_graphics_cycle+1) * crt_cycles_multiplier, 80 * crt_cycles_multiplier, 4.0f / 3.0f));

View File

@ -60,7 +60,7 @@
- (BOOL)setSpeakerDelegate:(Outputs::Speaker::Delegate *)delegate sampleRate:(int)sampleRate { - (BOOL)setSpeakerDelegate:(Outputs::Speaker::Delegate *)delegate sampleRate:(int)sampleRate {
@synchronized(self) { @synchronized(self) {
_electron.get_speaker()->set_output_rate(sampleRate, 256); _electron.get_speaker()->set_output_rate(sampleRate, 256);
_electron.get_speaker()->set_output_quality(47); // _electron.get_speaker()->set_output_quality(47);
_electron.get_speaker()->set_delegate(delegate); _electron.get_speaker()->set_delegate(delegate);
return YES; return YES;
} }

View File

@ -35,11 +35,11 @@ class Speaker {
set_needs_updated_filter_coefficients(); set_needs_updated_filter_coefficients();
} }
void set_output_quality(int number_of_taps) // void set_output_quality(int number_of_taps)
{ // {
_number_of_taps = number_of_taps; // _number_of_taps = number_of_taps;
set_needs_updated_filter_coefficients(); // set_needs_updated_filter_coefficients();
} // }
void set_delegate(Delegate *delegate) void set_delegate(Delegate *delegate)
{ {
@ -130,6 +130,11 @@ template <class T> class Filter: public Speaker {
void update_filter_coefficients() void update_filter_coefficients()
{ {
// make a guess at a good number of taps
_number_of_taps = (_input_cycles_per_second + _output_cycles_per_second) / _output_cycles_per_second;
_number_of_taps *= 2;
_number_of_taps |= 1;
_coefficients_are_dirty = false; _coefficients_are_dirty = false;
_buffer_in_progress_pointer = 0; _buffer_in_progress_pointer = 0;