diff options
Diffstat (limited to 'src/devices/sound/mas3507d.cpp')
-rw-r--r-- | src/devices/sound/mas3507d.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/src/devices/sound/mas3507d.cpp b/src/devices/sound/mas3507d.cpp index 9fa4eeadbc9..a5b7a7917d2 100644 --- a/src/devices/sound/mas3507d.cpp +++ b/src/devices/sound/mas3507d.cpp @@ -290,7 +290,7 @@ void mas3507d_device::mem_write(int bank, uint32_t adr, uint32_t val) case 0x0032f: logerror("MAS3507D: OutputConfig = %05x\n", val); break; case 0x107f8: logerror("MAS3507D: left->left gain = %05x (%d dB, %f%%)\n", val, gain_to_db(val), gain_to_percentage(val)); - stream->set_output_gain(0, gain_to_percentage(val)); + set_output_gain(0, gain_to_percentage(val)); break; case 0x107f9: logerror("MAS3507D: left->right gain = %05x (%d dB, %f%%)\n", val, gain_to_db(val), gain_to_percentage(val)); @@ -300,7 +300,7 @@ void mas3507d_device::mem_write(int bank, uint32_t adr, uint32_t val) break; case 0x107fb: logerror("MAS3507D: right->right gain = %05x (%d dB, %f%%)\n", val, gain_to_db(val), gain_to_percentage(val)); - stream->set_output_gain(1, gain_to_percentage(val)); + set_output_gain(1, gain_to_percentage(val)); break; default: logerror("MAS3507D: %d:%04x = %05x\n", bank, adr, val); break; } @@ -359,11 +359,8 @@ void mas3507d_device::fill_buffer() } } -void mas3507d_device::append_buffer(stream_sample_t **outputs, int &pos, int scount) +void mas3507d_device::append_buffer(std::vector<write_stream_view> &outputs, int &pos, int scount) { - if(!sample_count) - return; - buffered_frame_count = scount; int s1 = scount - pos; @@ -372,14 +369,13 @@ void mas3507d_device::append_buffer(stream_sample_t **outputs, int &pos, int sco if(mp3_info.channels == 1) { for(int i=0; i<s1; i++) { - stream_sample_t v = samples[i]; - outputs[0][i+pos] = v; - outputs[1][i+pos] = v; + outputs[0].put_int(i+pos, samples[i], 32768); + outputs[1].put_int(i+pos, samples[i], 32768); } } else { for(int i=0; i<s1; i++) { - outputs[0][i+pos] = samples[i*2]; - outputs[1][i+pos] = samples[i*2+1]; + outputs[0].put_int(i+pos, samples[i*2], 32768); + outputs[1].put_int(i+pos, samples[i*2+1], 32768); } } @@ -400,8 +396,9 @@ void mas3507d_device::append_buffer(stream_sample_t **outputs, int &pos, int sco total_frame_count += s1; } -void mas3507d_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int csamples) +void mas3507d_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) { + int csamples = outputs[0].samples(); int pos = 0; append_buffer(outputs, pos, csamples); @@ -419,10 +416,8 @@ void mas3507d_device::sound_stream_update(sound_stream &stream, stream_sample_t total_frame_count = 0; buffered_frame_count = 0; - for(int i=pos; i != csamples; i++) { - outputs[0][i] = 0; - outputs[1][i] = 0; - } + outputs[0].fill(0, pos); + outputs[1].fill(0, pos); return; } append_buffer(outputs, pos, csamples); |