Changeset 4960:60cdebcb83ef in roaraudio for libroarpulse/simple.c


Ignore:
Timestamp:
05/14/11 04:46:29 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

some updates for pulseaudio emulation, converted libroarpulse-simple fully to VS API

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroarpulse/simple.c

    r4708 r4960  
    4040#include <libroarpulse/libroarpulse.h> 
    4141 
     42#define _seterr() if ( error != NULL ) { *error = roar_pa_raerror2paerror(err); } 
     43 
    4244/** Create a new connection to the server */ 
    4345pa_simple* pa_simple_new( 
     
    5254    int *error                          /**< A pointer where the error code is stored when the routine returns NULL. It is OK to pass NULL here. */ 
    5355    ) { 
    54  struct roarpulse_simple * s; 
     56 struct roar_keyval kv[1]; 
     57 roar_vs_t * vss = NULL; 
    5558 struct roar_audio_info info; 
    5659 int roar_dir; 
    57  struct roar_meta meta; 
     60 int err = ROAR_ERROR_NONE; 
    5861 
    5962 if ( dir == PA_STREAM_PLAYBACK ) { 
     
    6972 } 
    7073 
    71  if ( (s = roar_mm_malloc(sizeof(struct roarpulse_simple))) == NULL ) 
    72   return NULL; 
    73  
    7474 server = roar_pa_find_server((char*)server); 
    7575 
    76  if ( roar_simple_connect(&(s->con), (char*)server, (char*)name) == -1 ) { 
    77   roar_mm_free(s); 
     76 vss = roar_vs_new(server, name, &err); 
     77 if ( vss == NULL ) { 
     78  _seterr(); 
    7879  return NULL; 
    7980 } 
    8081 
    81  if ( roar_vio_simple_new_stream_obj(&(s->vio), &(s->con), &(s->stream), 
    82                                      info.rate, info.channels, 
    83                                      info.bits, info.codec, roar_dir) == -1 ) { 
    84   roar_disconnect(&(s->con)); 
    85   roar_mm_free(s); 
     82 if ( roar_vs_stream(vss, &info, roar_dir, &err) == -1 ) { 
     83  roar_vs_close(vss, ROAR_VS_TRUE, NULL); 
     84  _seterr(); 
    8685  return NULL; 
    8786 } 
    8887 
    8988 if ( stream_name != NULL && stream_name[0] != 0 ) { 
    90   meta.value  = (char*)stream_name; 
    91   meta.key[0] = 0; 
    92   meta.type   = ROAR_META_TYPE_DESCRIPTION; 
     89  kv[0].key   = "DESCRIPTION"; 
     90  kv[1].value = (char*)stream_name; 
    9391 
    94   roar_stream_meta_set(&(s->con), &(s->stream), ROAR_META_MODE_SET, &meta); 
     92  roar_vs_meta(vss, kv, 1, NULL); 
    9593 } 
    9694 
    97  return (pa_simple*) s; 
     95 return (pa_simple*) vss; 
    9896} 
    9997 
    10098/** Close and free the connection to the server. The connection objects becomes invalid when this is called. */ 
    10199void pa_simple_free(pa_simple *s) { 
    102  struct roarpulse_simple * ss = (struct roarpulse_simple*) s; 
    103  
    104100 if ( s == NULL ) 
    105101  return; 
    106102 
    107  roar_vio_close(&(ss->vio)); 
    108  roar_disconnect(&(ss->con)); 
    109  
    110  roar_mm_free(s); 
     103 roar_vs_close((roar_vs_t*)s, ROAR_VS_FALSE, NULL); 
    111104} 
    112105 
    113106/** Write some data to the server */ 
    114107int pa_simple_write(pa_simple *s, const void*data, size_t length, int *error) { 
    115  struct roarpulse_simple * ss = (struct roarpulse_simple*) s; 
     108 int ret; 
     109 int err = ROAR_ERROR_NONE; 
    116110 
    117111 if ( s == NULL ) 
    118112  return -1; 
    119113 
    120  return roar_vio_write(&(ss->vio), (char*) data, length); 
     114 ret = roar_vs_write((roar_vs_t*)s, data, length, &err); 
     115 
     116 _seterr(); 
     117 
     118 return ret; 
    121119} 
    122120 
    123121/** Wait until all data already written is played by the daemon */ 
    124122int pa_simple_drain(pa_simple *s, int *error) { 
    125 // struct roarpulse_simple * ss = (struct roarpulse_simple*) s; 
     123 int ret; 
     124 int err = ROAR_ERROR_NONE; 
    126125 
    127126 if ( s == NULL ) 
    128127  return -1; 
    129128 
    130  pa_simple_flush(s, error); 
     129 ret = roar_vs_sync((roar_vs_t*)s, ROAR_VS_WAIT, &err); 
    131130 
    132  return -1; 
     131 _seterr(); 
     132 
     133 return ret; 
    133134} 
    134135 
    135136/** Read some data from the server */ 
    136137int pa_simple_read(pa_simple *s, void*data, size_t length, int *error) { 
    137  struct roarpulse_simple * ss = (struct roarpulse_simple*) s; 
     138 int ret; 
     139 int err = ROAR_ERROR_NONE; 
    138140 
    139141 if ( s == NULL ) 
    140142  return -1; 
    141143 
    142  return roar_vio_read(&(ss->vio), data, length); 
     144 ret = roar_vs_read((roar_vs_t*)s, data, length, &err); 
     145 
     146 _seterr(); 
     147 
     148 return ret; 
    143149} 
    144150 
    145151/** Return the playback latency. \since 0.5 */ 
    146152pa_usec_t pa_simple_get_latency(pa_simple *s, int *error) { 
    147  struct roarpulse_simple * ss = (struct roarpulse_simple*) s; 
     153 roar_mus_t ret; 
     154 int err = ROAR_ERROR_NONE; 
    148155 
    149156 if ( s == NULL ) 
    150157  return -1; 
    151158 
    152  return -1; 
     159 ret = roar_vs_latency((roar_vs_t*)s, ROAR_VS_BACKEND_DEFAULT, &err); 
     160 
     161 if ( ret < 0 ) 
     162  ret *= -1; 
     163 
     164 if ( ret == 0 && err != ROAR_ERROR_NONE ) { 
     165  _seterr(); 
     166  return -1; 
     167 } 
     168 
     169 return ret; 
    153170} 
    154171 
    155172/** Flush the playback buffer. \since 0.5 */ 
    156173int pa_simple_flush(pa_simple *s, int *error) { 
    157  struct roarpulse_simple * ss = (struct roarpulse_simple*) s; 
     174 int ret; 
     175 int err = ROAR_ERROR_NONE; 
    158176 
    159177 if ( s == NULL ) 
    160178  return -1; 
    161179 
    162  return roar_vio_sync(&(ss->vio)); 
     180 ret = roar_vs_sync((roar_vs_t*)s, ROAR_VS_NOWAIT, &err); 
     181 
     182 _seterr(); 
     183 
     184 return ret; 
    163185} 
    164186 
Note: See TracChangeset for help on using the changeset viewer.