annotate foosdk/sdk/foobar2000/SDK/dsp_manager.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "foobar2000-sdk-pch.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "dsp_manager.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #ifdef FOOBAR2000_HAVE_DSP
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 void dsp_manager::close() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 m_chain.remove_all();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 m_config_changed = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 void dsp_manager::set_config( const dsp_chain_config & p_data )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 //dsp_chain_config::g_instantiate(m_dsp_list,p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 m_config.copy(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 m_config_changed = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 bool dsp_manager::need_track_change_mark() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 for ( auto i = this->m_chain.first(); i.is_valid(); ++ i ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 if ( i->m_dsp->need_track_change_mark() ) return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 void dsp_manager::dsp_run(t_dsp_chain::const_iterator p_iter,dsp_chunk_list * p_list,const dsp_track_t & cur_file,unsigned flags,double & latency,abort_callback & p_abort)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 p_list->remove_bad_chunks();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 TRACK_CODE("dsp::run",p_iter->m_dsp->run_abortable(p_list,cur_file,flags,p_abort));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 TRACK_CODE("dsp::get_latency",latency += p_iter->m_dsp->get_latency());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 double dsp_manager::run(dsp_chunk_list * p_list,const dsp_track_t & p_cur_file,unsigned p_flags,abort_callback & p_abort) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 TRACK_CALL_TEXT("dsp_manager::run");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 #if defined(_MSC_VER) && defined(_M_IX86)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 fpu_control_default l_fpu_control;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 double latency=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 bool done = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 t_dsp_chain::const_iterator flush_mark;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 if ((p_flags & dsp::END_OF_TRACK) && ! (p_flags & dsp::FLUSH)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 for(t_dsp_chain::const_iterator iter = m_chain.first(); iter.is_valid(); ++iter) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 if (iter->m_dsp->need_track_change_mark()) flush_mark = iter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 if (m_config_changed)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 t_dsp_chain newchain;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 bool recycle_available = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 for(t_size n=0;n<m_config.get_count();n++) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 service_ptr_t<dsp> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 const dsp_preset & preset = m_config.get_item(n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 const GUID owner = preset.get_owner();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 if (dsp_entry::g_dsp_exists(owner) || dsp_entry_hidden::g_dsp_exists(owner)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 t_dsp_chain::iterator iter = newchain.insert_last();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 iter->m_preset = m_config.get_item(n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 iter->m_recycle_flag = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 // Recycle existing DSPs in a special case when user has apparently only altered settings of one of DSPs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 if (newchain.get_count() == m_chain.get_count()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 t_size data_mismatch_count = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 t_size owner_mismatch_count = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 t_dsp_chain::iterator iter_src, iter_dst;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 iter_src = m_chain.first(); iter_dst = newchain.first();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 while(iter_src.is_valid() && iter_dst.is_valid()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 if (iter_src->m_preset.get_owner() != iter_dst->m_preset.get_owner()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 owner_mismatch_count++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 } else if (iter_src->m_preset != iter_dst->m_preset) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 data_mismatch_count++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 ++iter_src; ++iter_dst;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 recycle_available = (owner_mismatch_count == 0 && data_mismatch_count <= 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 recycle_available = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 if (recycle_available) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 t_dsp_chain::iterator iter_src, iter_dst;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 iter_src = m_chain.first(); iter_dst = newchain.first();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 while(iter_src.is_valid() && iter_dst.is_valid()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 if (iter_src->m_preset == iter_dst->m_preset) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 iter_src->m_recycle_flag = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 iter_dst->m_dsp = iter_src->m_dsp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 ++iter_src; ++iter_dst;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 for( auto & iter : newchain ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 if (iter.m_dsp.is_empty()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 if (!dsp_entry::g_instantiate(iter.m_dsp,iter.m_preset, m_creationFlags) && !dsp_entry_hidden::g_instantiate(iter.m_dsp, iter.m_preset)) uBugCheck();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 if (m_chain.get_count()>0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 bool flushflag = flush_mark.is_valid();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 for(t_dsp_chain::const_iterator iter = m_chain.first(); iter.is_valid(); ++iter) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 unsigned flags2 = p_flags;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 if (iter == flush_mark) flushflag = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 if (flushflag || !iter->m_recycle_flag) flags2|=dsp::FLUSH;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 dsp_run(iter,p_list,p_cur_file,flags2,latency,p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 done = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 m_chain = newchain;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 m_config_changed = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 if (!done)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 bool flushflag = flush_mark.is_valid();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 for(t_dsp_chain::const_iterator iter = m_chain.first(); iter.is_valid(); ++iter) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 unsigned flags2 = p_flags;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 if (iter == flush_mark) flushflag = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 if (flushflag) flags2|=dsp::FLUSH;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 dsp_run(iter,p_list,p_cur_file,flags2,latency,p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 done = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 p_list->remove_bad_chunks();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 return latency;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 } catch(...) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 p_list->remove_all();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 throw;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 void dsp_manager::flush()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 for(t_dsp_chain::const_iterator iter = m_chain.first(); iter.is_valid(); ++iter) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 TRACK_CODE("dsp::flush",iter->m_dsp->flush());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 bool dsp_manager::is_active() const {return m_config.get_count()>0;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 void dsp_config_manager::core_enable_dsp(const dsp_preset & preset, default_insert_t insertWhere ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 dsp_chain_config_impl cfg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 get_core_settings(cfg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 bool found = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 bool changed = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 t_size n,m = cfg.get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 for(n=0;n<m;n++) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 if (cfg.get_item(n).get_owner() == preset.get_owner()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 found = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 if (cfg.get_item(n) != preset) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 cfg.replace_item(preset,n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 changed = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 if (!found) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 if ( insertWhere == default_insert_last ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 cfg.add_item( preset );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 cfg.insert_item(preset,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 changed = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 if (changed) set_core_settings(cfg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 void dsp_config_manager::core_disable_dsp(const GUID & id) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 dsp_chain_config_impl cfg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 get_core_settings(cfg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 t_size n,m = cfg.get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 pfc::bit_array_bittable mask(m);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 bool changed = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 for(n=0;n<m;n++) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 bool axe = (cfg.get_item(n).get_owner() == id) ? true : false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 if (axe) changed = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 mask.set(n,axe);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 if (changed) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 cfg.remove_mask(mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 set_core_settings(cfg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 bool dsp_config_manager::core_query_dsp(const GUID & id, dsp_preset & out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 dsp_chain_config_impl cfg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 get_core_settings(cfg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 for(t_size n=0;n<cfg.get_count();n++) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 const dsp_preset & entry = cfg.get_item(n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 if (entry.get_owner() == id) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 out = entry; return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 #endif