Changeset 3591:5519fe5c1e85 in roaraudio


Ignore:
Timestamp:
02/28/10 05:55:55 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

updated ESD driver

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TODO

    r3589 r3591  
    1616 * (0.3 W/H/-) Get into Debian 
    1717 * (0.3 W/N/-) Clean and update libroarpulse 
    18  * (0.3 W/h/-) Cleanup driver: DMX, ESD, Roar 
     18 * (0.3 W/h/-) Cleanup driver: DMX, Roar 
    1919 * (0.3 W/N/-) Implement ALSA support 
    2020 * (0.3 W/L/-) Implement support for ICY Meta Data 
  • roard/driver.c

    r3589 r3591  
    3131#ifdef ROAR_HAVE_ESD 
    3232 { "esd", "EsounD audio driver", "localhost, remote.host.dom", DRV_FLAG_NONE, ROAR_SUBSYS_WAVEFORM, 
    33    NULL, driver_esd_close, driver_esd_open_vio}, 
     33   NULL, NULL, driver_esd_open_vio}, 
    3434#endif 
    3535 { "roar", "RoarAudio driver", "localhost, remote.host.dom", DRV_FLAG_NONE, 
  • roard/driver_esd.c

    r3517 r3591  
    22 
    33/* 
    4  *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008 
     4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2010 
    55 * 
    66 *  This file is part of roard a part of RoarAudio, 
     
    3333*/ 
    3434 
    35 int driver_esd_open_sysio(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info) { 
     35int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh, struct roar_stream_server * sstream) { 
    3636 esd_format_t format = ESD_STREAM | ESD_PLAY; 
    3737 char name[80] = "roard"; 
    38  int * di = malloc(sizeof(int)*2); 
    3938 
    40  if ( di == NULL ) 
     39 if ( fh != -1 ) 
    4140  return -1; 
    4241 
    43  *inst = (DRIVER_USERDATA_T)di; 
     42 if ( info->bits >= 16 ) { 
     43  info->bits  = 16; 
     44  format     |= ESD_BITS16; 
     45  info->codec = ROAR_CODEC_PCM_S; 
     46 } else if ( info->bits < 16 ) { 
     47  info->bits  =  8; 
     48  format     |= ESD_BITS8; 
     49  info->codec = ROAR_CODEC_PCM_U; 
     50 } 
    4451 
    45  format |= info->bits     == 16 ? ESD_BITS16 : ESD_BITS8; 
    46  format |= info->channels ==  2 ? ESD_STEREO : ESD_MONO; 
     52 if ( info->channels >= 2 ) { 
     53  info->channels  = 2; 
     54  format         |= ESD_STEREO; 
     55 } else { 
     56  info->channels  = 1; 
     57  format         |= ESD_MONO; 
     58 } 
    4759 
    48  di[1] = info->bits == 8; 
     60 fh = esd_play_stream_fallback(format, info->rate, device, name); 
    4961 
    50  di[0] = esd_play_stream_fallback(format, info->rate, device, name); 
     62 shutdown(fh, SHUT_RD); 
    5163 
    52  shutdown(di[0], SHUT_RD); 
    53  
    54  if ( di[0] == -1 ) { 
    55   free(di); 
    56   *inst = NULL; 
    57   return -1; 
    58  } 
     64 roar_vio_set_fh(inst, fh); 
    5965 
    6066 return 0; 
    6167} 
    6268 
    63 int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh, struct roar_stream_server * sstream) { 
    64  
    65  if ( fh != -1 ) 
    66   return -1; 
    67  
    68  inst->read     = driver_esd_read; 
    69  inst->write    = driver_esd_write; 
    70  inst->nonblock = driver_esd_nonblock; 
    71  inst->sync     = driver_esd_sync; 
    72  
    73  return driver_esd_open_sysio(&(inst->inst), device, info); 
    74 } 
    75  
    76 int driver_esd_close(DRIVER_USERDATA_T   inst) { 
    77  int fh; 
    78  
    79  inst = ((struct roar_vio_calls *)inst)->inst; 
    80  
    81  fh = *(int*)inst; 
    82  
    83  free((void*)inst); 
    84  
    85  return esd_close(fh); 
    86 } 
    87  
    88 ssize_t driver_esd_write(struct roar_vio_calls * inst, void * buf, size_t len) { 
    89  int * di = (int*)((struct roar_vio_calls *)inst)->inst; 
    90  
    91  if ( di[1] ) 
    92   roar_conv_codec_s2u8(buf, buf, len); 
    93  
    94  return write(di[0], buf, len); 
    95 } 
    96  
    97 ssize_t driver_esd_read(struct roar_vio_calls * inst, void * buf, size_t len) { 
    98  return read(*(int*)((struct roar_vio_calls *)inst)->inst, buf, len); 
    99 } 
    100  
    101 int driver_esd_nonblock(struct roar_vio_calls * vio, int state) { 
    102  return roar_socket_nonblock(*(int*)vio->inst, state); 
    103 } 
    104  
    105 int driver_esd_sync    (struct roar_vio_calls * vio) { 
    106  return ROAR_FDATASYNC(*(int*)vio->inst); 
    107 } 
    10869 
    10970#endif 
  • roard/include/driver_esd.h

    r3517 r3591  
    2727#define _DRIVER_ESD_H_ 
    2828 
    29 int driver_esd_open_sysio(DRIVER_USERDATA_T * inst,   char * device, struct roar_audio_info * info); 
    3029int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh, struct roar_stream_server * sstream); 
    31 int driver_esd_close(DRIVER_USERDATA_T   inst); 
    32 int driver_esd_pause(DRIVER_USERDATA_T   inst, int newstate); 
    33 ssize_t driver_esd_write(struct roar_vio_calls * inst, void * buf, size_t len); 
    34 ssize_t driver_esd_read(struct roar_vio_calls  * inst, void * buf, size_t len); 
    35 int driver_esd_nonblock(struct roar_vio_calls * vio, int state); 
    36 int driver_esd_sync    (struct roar_vio_calls * vio); 
    37 int driver_esd_flush(DRIVER_USERDATA_T   inst); 
    3830 
    3931#endif 
Note: See TracChangeset for help on using the changeset viewer.