add last backwards-compatible version

This commit is contained in:
2021-12-14 00:33:46 -07:00
parent 68b10d413b
commit b0dd3f07f3
335 changed files with 4746 additions and 19627 deletions

View File

@@ -1,13 +1,9 @@
#include "foobar2000.h"
#include "output.h"
#include "audio_chunk_impl.h"
#include "dsp.h"
#include "resampler.h"
pfc::string8 output_entry::get_device_name( const GUID & deviceID ) {
pfc::string8 temp;
if (!get_device_name(deviceID, temp)) temp = "[unknown device]";
return temp;
return std::move(temp);
}
namespace {
@@ -50,25 +46,8 @@ output_entry::ptr output_entry::g_find( const GUID & outputID ) {
}
bool output::is_progressing_() {
output_v4::ptr v4;
if ( v4 &= this ) return v4->is_progressing();
return true;
}
size_t output::update_v2_() {
output_v4::ptr v4;
if ( v4 &= this ) return v4->update_v2();
bool bReady = false;
this->update(bReady);
return bReady ? SIZE_MAX : 0;
}
pfc::eventHandle_t output::get_trigger_event_() {
output_v4::ptr v4;
if ( v4 &= this ) return v4->get_trigger_event();
return pfc::eventInvalid;
}
void output_impl::flush() {
m_incoming_ptr = 0;
@@ -80,11 +59,7 @@ void output_impl::flush_changing_track() {
m_incoming.set_size(0);
on_flush_changing_track();
}
void output_impl::update(bool & p_ready) {
p_ready = update_v2() > 0;
}
size_t output_impl::update_v2() {
on_update();
if (m_incoming_spec != m_active_spec && m_incoming_ptr < m_incoming.get_size()) {
if (get_latency_samples() == 0) {
@@ -93,8 +68,7 @@ size_t output_impl::update_v2() {
} else {
force_play();
}
}
size_t retCanWriteSamples = 0;
}
if (m_incoming_spec == m_active_spec && m_incoming_ptr < m_incoming.get_size()) {
t_size cw = can_write_samples() * m_incoming_spec.m_channels;
t_size delta = pfc::min_t(m_incoming.get_size() - m_incoming_ptr,cw);
@@ -102,13 +76,9 @@ size_t output_impl::update_v2() {
write(audio_chunk_temp_impl(m_incoming.get_ptr()+m_incoming_ptr,delta / m_incoming_spec.m_channels,m_incoming_spec.m_sample_rate,m_incoming_spec.m_channels,m_incoming_spec.m_channel_config));
m_incoming_ptr += delta;
}
retCanWriteSamples = (cw - delta) / m_incoming_spec.m_channels;
} else if ( m_incoming_ptr == m_incoming.get_size() ) {
retCanWriteSamples = SIZE_MAX;
}
return retCanWriteSamples;
}
p_ready = (m_incoming_ptr == m_incoming.get_size());
}
double output_impl::get_latency() {
double ret = 0;
if (m_incoming_spec.is_valid()) {
@@ -117,7 +87,7 @@ double output_impl::get_latency() {
if (m_active_spec.is_valid()) {
ret += audio_math::samples_to_time( get_latency_samples() , m_active_spec.m_sample_rate );
}
return ret;
return ret;
}
void output_impl::process_samples(const audio_chunk & p_chunk) {
pfc::dynamic_assert(m_incoming_ptr == m_incoming.get_size());
@@ -131,50 +101,18 @@ void output_impl::process_samples(const audio_chunk & p_chunk) {
}
void output_v3::get_injected_dsps( dsp_chain_config & dsps ) {
#ifdef FOOBAR2000_HAVE_DSP
dsps.remove_all();
#if 0 // DEPRECATED
unsigned rate = this->get_forced_sample_rate();
if (rate != 0) {
#if PFC_DEBUG
FB2K_console_formatter() << "output_v3::get_injected_dsps() : requesting resampling to " << rate << " Hz";
#endif
dsp_preset_impl temp;
if (resampler_entry::g_create_preset( temp, 0, rate, 0 )) {
dsps.insert_item( temp, dsps.get_count() );
} else {
#if PFC_DEBUG
FB2K_console_formatter() << "output_v3::get_injected_dsps() : resampler could not be created";
#endif
}
}
#endif
#endif // FOOBAR2000_HAVE_DSP
}
size_t output_v4::update_v2() {
bool bReady = false;
update(bReady);
return bReady ? SIZE_MAX : 0;
}
uint32_t output_entry::get_config_flags_compat() {
uint32_t ret = get_config_flags();
if ((ret & (flag_low_latency | flag_high_latency)) == 0) {
// output predating flag_high_latency + flag_low_latency
// if it's old foo_out_upnp, report high latency, otherwise low latency.
static const GUID guid_foo_out_upnp = { 0x9900b4f6, 0x8431, 0x4b0a, { 0x95, 0x56, 0xa7, 0xfc, 0xb9, 0x5b, 0x74, 0x3 } };
if (this->get_guid() == guid_foo_out_upnp) ret |= flag_high_latency;
else ret |= flag_low_latency;
}
return ret;
}
bool output_entry::is_high_latency() {
return (this->get_config_flags_compat() & flag_high_latency) != 0;
}
bool output_entry::is_low_latency() {
return (this->get_config_flags_compat() & flag_low_latency) != 0;
}
// {EEEB07DE-C2C8-44c2-985C-C85856D96DA1}
const GUID output_id_null =