44 static const float m3db = 0.7071067811865476f;
45 static const float m6db = 0.5;
46 static const float m7db = 0.44721359549996;
63 typedef void* (*callback)();
68 for (std::map<void*,void*>::iterator i=pool.begin(),e=pool.end();
71 for (std::list<void*>::iterator i=freelist.begin(),e=freelist.end();
76 void *acquire(
void *who)
78 std::map<void*,void*>::iterator i(pool.find(who));
82 if (!freelist.empty())
83 return pool.insert(std::make_pair(who,
pop_back(freelist)))
86 return pool.insert(std::make_pair(who,construct()))
90 void release(
void *who)
92 std::map<void*,void*>::iterator i(pool.find(who));
93 if (i != pool.end()) {
94 freelist.push_back(i->second);
108 l(s),
r(s),c(s),ls(s),rs(s),lfe(s), rls(s), rrs(s) { }
109 void resize(
unsigned int s)
111 l.resize(s);
r.resize(s); lfe.resize(s);
112 ls.resize(s); rs.resize(s); c.resize(s);
113 rls.resize(s); rrs.resize(s);
117 l.clear();
r.clear(); lfe.clear();
118 ls.clear(); rs.clear(); c.clear();
119 rls.clear(); rrs.clear();
121 std::vector<float>
l,
r,c,ls,
rs,lfe,cs,lcs,rcs,
147 surround_mode(smode),
150 LOG(VB_AUDIO, LOG_DEBUG,
151 QString(
"FreeSurround::FreeSurround rate %1 moviemode %2")
152 .arg(srate).arg(moviemode));
184 LOG(VB_AUDIO, LOG_DEBUG,
185 QString(
"FreeSurround::FreeSurround channel_select %1")
188 LOG(VB_AUDIO, LOG_DEBUG, QString(
"FreeSurround::FreeSurround done"));
204 center_width(center_width),
205 dimension(dimension),
206 coeff_a(0.8165),coeff_b(0.5774),
216 LOG(VB_AUDIO, LOG_DEBUG, QString(
"FreeSurround::~FreeSurround"));
220 bp.release((
void*)1);
223 LOG(VB_AUDIO, LOG_DEBUG, QString(
"FreeSurround::~FreeSurround done"));
232 float *
samples = (
float *)buffer;
236 float *lt = &inputs[0][ic];
237 float *rt = &inputs[1][ic];
251 for (i = 0; i < numFrames && ic < bs; i++,ic++)
262 *lt++ = *rt++ = *samples++;
273 for (i = 0; i < numFrames && ic < bs; i++,ic++)
275 float lt = *samples++;
276 float rt = *samples++;
281 bufs->
ls[ic] = (rt-lt) * 0.5;
282 bufs->
rs[ic] = (lt-rt) * 0.5;
287 for (i = 0; i < numFrames && ic < bs; i++,ic++)
289 float lt = *samples++;
290 float rt = *samples++;
312 for (i = 0; i < numFrames && ic < bs; i++,ic++)
314 float lt = *samples++;
315 float rt = *samples++;
316 float c = *samples++;
317 float ls = *samples++;
318 float rs = *samples++;
331 for (i = 0; i < numFrames && ic < bs; i++,ic++)
334 float lt = *samples++;
335 float rt = *samples++;
336 float c = *samples++;
337 float lfe = *samples++;
338 float cs = *samples++;
339 float ls = *samples++;
340 float rs = *samples++;
384 LOG(VB_AUDIO | VB_TIMESTAMP, LOG_DEBUG,
385 QString(
"FreeSurround::putFrames %1 #ch %2 used %3 generated %4")
386 .arg(numFrames).arg(numChannels).arg(i).arg(
out_count));
395 if (maxFrames > oc) maxFrames = oc;
397 float *output = (
float *)buffer;
400 float *
l = &
bufs->
l[outindex];
401 float *c = &
bufs->
c[outindex];
402 float *
r = &
bufs->
r[outindex];
403 float *ls = &
bufs->
ls[outindex];
404 float *rs = &
bufs->
rs[outindex];
405 float *lfe = &
bufs->
lfe[outindex];
406 float *rls = &
bufs->
rls[outindex];
407 float *rrs = &
bufs->
rrs[outindex];
408 for (i = 0; i < maxFrames; i++)
424 outindex += maxFrames;
431 float *
l = &outputs[0][outindex];
432 float *c = &outputs[1][outindex];
433 float *
r = &outputs[2][outindex];
434 float *ls = &outputs[3][outindex];
435 float *rs = &outputs[4][outindex];
436 float *lfe = &outputs[5][outindex];
437 for (i = 0; i < maxFrames; i++)
447 outindex += maxFrames;
451 float *
l = &
bufs->
l[outindex];
452 float *c = &
bufs->
c[outindex];
453 float *
r = &
bufs->
r[outindex];
454 float *ls = &
bufs->
ls[outindex];
455 float *rs = &
bufs->
rs[outindex];
456 float *lfe = &
bufs->
lfe[outindex];
457 for (i = 0; i < maxFrames; i++)
467 outindex += maxFrames;
471 LOG(VB_AUDIO | VB_TIMESTAMP, LOG_DEBUG,
472 QString(
"FreeSurround::receiveFrames %1").arg(maxFrames));