Changeset 1151:699db521c74a in roaraudio


Ignore:
Timestamp:
01/22/09 14:23:48 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got latency calc for oss driver working, need to cleanup some code

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio.h

    r1150 r1151  
    4747#define ROAR_VIO_CTL_GET_SSTREAM   0x00011002 
    4848 
    49 #define ROAR_VIO_CTL_GET_DELAY     0x00010011 
     49#define ROAR_VIO_CTL_GET_DELAY     0x00010011 /* return in bytes as the vio interface */ 
     50                                              /* does not know anything about streams */ 
    5051 
    5152// sys io: 
  • roard/driver_oss.c

    r1138 r1151  
    4545 roar_vio_init_calls(inst); 
    4646 inst->sync = driver_oss_sync; 
     47 inst->ctl  = driver_oss_ctl; 
    4748 
    4849 if (  fh == -1 ) { 
     
    203204} 
    204205 
     206int driver_oss_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 
     207 int d; 
     208 
     209 if ( vio == NULL ) 
     210  return -1; 
     211 
     212 if ( cmd != ROAR_VIO_CTL_GET_DELAY ) 
     213  return -1; 
     214 
     215 if ( ioctl(roar_vio_get_fh(vio), SNDCTL_DSP_GETODELAY, &d) == -1 ) 
     216  return -1; 
     217 
     218 ROAR_WARN("driver_oss_ctl(*): delay=%i byte", d); 
     219 
     220 *(uint_least32_t *)data = d; 
     221 
     222 return 0; 
     223} 
     224 
    205225#endif 
    206226//ll 
  • roard/include/driver_oss.h

    r1138 r1151  
    2929int driver_oss_close(DRIVER_USERDATA_T   inst); 
    3030int driver_oss_sync(struct roar_vio_calls * vio); 
     31int driver_oss_ctl(struct roar_vio_calls * vio, int cmd, void * data); 
    3132 
    3233#endif 
  • roard/req.c

    r1142 r1151  
    496496 d[7] = ss->delay/1000; 
    497497 
     498 ROAR_WARN("req_on_get_stream_para(*): delay=%i, send delay=%i", ss->delay, d[7]); 
     499 
    498500 for (i = 0; i < mes->datalen/2; i++) { 
    499501  d[i] = ROAR_HOST2NET16(d[i]); 
  • roard/streams.c

    r1148 r1151  
    339339int sreams_calc_delay    (int id) { 
    340340 struct roar_stream_server * ss; 
     341 struct roar_stream        * s; 
    341342 register uint_least32_t d = 0; 
    342343 uint_least32_t t[1]; 
    343  
    344  if ( (ss = g_streams[id]) == NULL ) 
     344 uint64_t       tmp; 
     345 
     346 if ( (s = ROAR_STREAM(ss = g_streams[id])) == NULL ) 
    345347  return -1; 
    346348 
     
    349351   d += *t; 
    350352 } 
     353 
     354 if ( ss->vio.ctl != NULL ) { 
     355  if ( roar_vio_ctl(&(ss->vio), ROAR_VIO_CTL_GET_DELAY, t) != -1 ) { // *t is in byte 
     356   ROAR_WARN("sreams_calc_delay(id=%i): VIO delay in byte: %i", id, *t); 
     357   tmp = *t; 
     358   tmp *= 1000000; // musec per sec 
     359   tmp /= s->info.rate * s->info.channels * (s->info.bits/8); 
     360   ROAR_WARN("sreams_calc_delay(id=%i): VIO delay in musec: %i", id, tmp); 
     361 
     362   d += tmp; 
     363  } 
     364 } 
     365 
     366    ROAR_WARN("sreams_calc_delay(id=%i): delay in musec: %i", id, d); 
    351367 
    352368 ss->delay = d; 
Note: See TracChangeset for help on using the changeset viewer.