[PD-cvs] pd/src s_audio_asio.cpp,1.1.4.16,1.1.4.17
Tim Blechmann
timblech at users.sourceforge.net
Tue Nov 30 10:57:01 CET 2004
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30787
Modified Files:
Tag: devel_0_38
s_audio_asio.cpp
Log Message:
bugfixes and cleanup
Index: s_audio_asio.cpp
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/s_audio_asio.cpp,v
retrieving revision 1.1.4.16
retrieving revision 1.1.4.17
diff -C2 -d -r1.1.4.16 -r1.1.4.17
*** s_audio_asio.cpp 25 Nov 2004 23:13:24 -0000 1.1.4.16
--- s_audio_asio.cpp 30 Nov 2004 09:56:59 -0000 1.1.4.17
***************
*** 111,115 ****
/* function to get sample width of data according to ASIOSampleType */
! static int asio_samplewidth(ASIOSampleType format);
--- 111,115 ----
/* function to get sample width of data according to ASIOSampleType */
! static int asio_get_samplewidth(ASIOSampleType format);
***************
*** 118,122 ****
* it's only for silence when stopping the driver.... (please find a better solution)
*/
! static int *asio_out_samplewidth = NULL;
--- 118,122 ----
* it's only for silence when stopping the driver.... (please find a better solution)
*/
! static int *asio_samplewidth = NULL;
***************
*** 299,303 ****
/* todo: buffer size hardcoded to asio hardware */
! asio_bufsize = asio_maxbufsize;
#ifdef CALLBACK_SCHEDULER
--- 299,303 ----
/* todo: buffer size hardcoded to asio hardware */
! asio_bufsize = asio_prefbufsize;
#ifdef CALLBACK_SCHEDULER
***************
*** 395,400 ****
asio_converter = (converter_t **)getbytes(channels * sizeof (converter_t *));
! asio_out_samplewidth = (int *)getbytes(sys_outchannels * sizeof (int));
!
for (i = 0; i != sys_outchannels + sys_inchannels; ++i)
{
--- 395,401 ----
asio_converter = (converter_t **)getbytes(channels * sizeof (converter_t *));
! asio_samplewidth = (int *)getbytes(sys_outchannels +
! sys_inchannels * sizeof (int));
!
for (i = 0; i != sys_outchannels + sys_inchannels; ++i)
{
***************
*** 406,415 ****
post("ASIO: channel %d type %d", i, asio_channelinfo[i].type);
#endif
!
if (i < sys_outchannels)
- {
asio_converter[i] = asio_converter_send(asio_channelinfo[i].type);
- asio_out_samplewidth[i] = asio_samplewidth(asio_channelinfo[i].type);
- }
else
asio_converter[i] = asio_converter_receive(asio_channelinfo[i].type);
--- 407,414 ----
post("ASIO: channel %d type %d", i, asio_channelinfo[i].type);
#endif
! asio_samplewidth[i] = asio_get_samplewidth(asio_channelinfo[i].type);
!
if (i < sys_outchannels)
asio_converter[i] = asio_converter_send(asio_channelinfo[i].type);
else
asio_converter[i] = asio_converter_receive(asio_channelinfo[i].type);
***************
*** 514,521 ****
#else
// direct method - clear both hardware buffers
! if(asio_bufferinfo && asio_out_samplewidth)
{
for(i = 0; i < sys_outchannels; ++i) {
! long bytes = asio_bufsize*asio_out_samplewidth[i];
memset(asio_bufferinfo[i].buffers[0],0,bytes);
memset(asio_bufferinfo[i].buffers[1],0,bytes);
--- 513,520 ----
#else
// direct method - clear both hardware buffers
! if(asio_bufferinfo && asio_samplewidth)
{
for(i = 0; i < sys_outchannels; ++i) {
! long bytes = asio_bufsize*asio_samplewidth[i];
memset(asio_bufferinfo[i].buffers[0],0,bytes);
memset(asio_bufferinfo[i].buffers[1],0,bytes);
***************
*** 567,574 ****
}
! if(asio_out_samplewidth)
{
! freebytes(asio_out_samplewidth, sys_outchannels * sizeof (int));
! asio_out_samplewidth = NULL;
}
--- 566,573 ----
}
! if(asio_samplewidth)
{
! freebytes(asio_samplewidth, (sys_outchannels + sys_inchannels) * sizeof (int));
! asio_samplewidth = NULL;
}
***************
*** 924,928 ****
}
! static int asio_samplewidth(ASIOSampleType format)
{
switch (format)
--- 923,927 ----
}
! static int asio_get_samplewidth(ASIOSampleType format)
{
switch (format)
***************
*** 1277,1280 ****
--- 1276,1281 ----
}
+ extern "C" pthread_cond_t dsp_callback;
+
static ASIOTime *asio_bufferSwitchTimeInfo_cb(ASIOTime *params, long db_idx,
ASIOBool directprocess)
***************
*** 1286,1301 ****
sys_lock();
!
for (int j = 0; j != asio_ticks_per_callback; j++)
{
/* get sounds from input channels */
for (long i = 0; i < sys_outchannels + sys_inchannels; i++)
{
- t_sample * sp = sys_soundin;
if(asio_converter[i])
if (asio_bufferinfo[i].isInput == ASIOTrue)
{
! asio_converter[i](asio_bufferinfo[i].buffers[db_idx],
sp, sys_dacblocksize);
sp += sys_dacblocksize;
--- 1287,1303 ----
sys_lock();
!
for (int j = 0; j != asio_ticks_per_callback; j++)
{
+ t_sample * sp = sys_soundin;
/* get sounds from input channels */
for (long i = 0; i < sys_outchannels + sys_inchannels; i++)
{
if(asio_converter[i])
if (asio_bufferinfo[i].isInput == ASIOTrue)
{
! asio_converter[i]((char*)asio_bufferinfo[i].buffers[db_idx] +
! asio_samplewidth[i] * j *sys_dacblocksize,
sp, sys_dacblocksize);
sp += sys_dacblocksize;
***************
*** 1307,1340 ****
sched_tick(sys_time + sys_time_per_dsp_tick);
/* send sound to hardware */
for (long i = 0; i < sys_outchannels + sys_inchannels; i++)
{
! t_sample * sp = sys_soundout;
!
! /* clip */
! t_float lo = -1.f;
! t_float hi = 1.f;
! t_int clipargs[6];
! clipargs[1] = clipargs[2] = (t_int)sp;
! clipargs[3] = (t_int)&lo;
! clipargs[4] = (t_int)&hi;
! clipargs[5] = (t_int)sys_dacblocksize;
! clipblock(clipargs);
!
! /* send */
! if(asio_converter[i])
! if (asio_bufferinfo[i].isInput != ASIOTrue)
! {
! asio_converter[i](sp, asio_bufferinfo[i].buffers[db_idx],
sys_dacblocksize);
! sp += sys_dacblocksize;
! }
}
}
- sys_unlock();
if(asio_useoutputready)
ASIOOutputReady();
return 0L; /* time info!!! */
}
--- 1309,1344 ----
sched_tick(sys_time + sys_time_per_dsp_tick);
+ sp = sys_soundout;
/* send sound to hardware */
for (long i = 0; i < sys_outchannels + sys_inchannels; i++)
{
! if (asio_bufferinfo[i].isInput != ASIOTrue)
! {
! /* clip */
! t_float lo = -1.f;
! t_float hi = 1.f;
! t_int clipargs[6];
! clipargs[1] = clipargs[2] = (t_int)sp;
! clipargs[3] = (t_int)&lo;
! clipargs[4] = (t_int)&hi;
! clipargs[5] = (t_int)sys_dacblocksize;
! clipblock(clipargs);
!
! /* send */
! if(asio_converter[i])
! asio_converter[i](sp, (char*)asio_bufferinfo[i].buffers[db_idx]
! + asio_samplewidth[i] * j *sys_dacblocksize ,
sys_dacblocksize);
! zeroblock(sp,sys_dacblocksize);
! sp += sys_dacblocksize;
! }
}
}
if(asio_useoutputready)
ASIOOutputReady();
+ sys_unlock();
+
return 0L; /* time info!!! */
}
More information about the Pd-cvs
mailing list