Changeset 2541:becbe03a9088 in roaraudio for plugins/roard


Ignore:
Timestamp:
09/02/09 04:08:33 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

wrote emul_esd_on_all_info()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • plugins/roard/protocol-esound.c

    r2539 r2541  
    6262 {ESD_PROTO_STREAM_FILT,  ESD_NAME_MAX + 2 * _INTSIZE, _NAME("STREAM_FILT"),  emul_esd_on_stream}, 
    6363 {ESD_PROTO_SERVER_INFO,                     _INTSIZE, _NAME("SERVER_INFO"),  emul_esd_on_server_info}, 
    64  {ESD_PROTO_ALL_INFO,                        _INTSIZE, _NAME("ALL_INFO"),     NULL}, 
     64 {ESD_PROTO_ALL_INFO,                        _INTSIZE, _NAME("ALL_INFO"),     emul_esd_on_all_info}, 
    6565 {ESD_PROTO_SUBSCRIBE,    0                          , _NAME("SUBSCRIBE"),    _UNIMPLEMNTED_IN_ESD}, 
    6666 {ESD_PROTO_UNSUBSCRIBE,  0                          , _NAME("UNSUBSCRIBE"),  _UNIMPLEMNTED_IN_ESD}, 
     
    404404} 
    405405 
     406int emul_esd_on_all_info   (int client, struct emul_esd_command * cmd, void * data, struct roar_vio_calls * vio) { 
     407 struct roar_stream_server *   ss; 
     408 struct roar_audio_info    * info; 
     409 struct roar_client        *    c; 
     410 char name[ESD_NAME_MAX]; 
     411 char * sname; 
     412 int id, rate, left, right, format; 
     413 int i; 
     414 
     415 if ( emul_esd_on_server_info(client, cmd, data, vio) == -1 ) 
     416  return -1; 
     417 
     418 for (i = 0; i < (ROAR_STREAMS_MAX+2); i++) { 
     419  memset(name, 0, sizeof(name)); 
     420 
     421  id   = rate  = format = 0; 
     422  left = right = 0; 
     423 
     424  if ( i >= ROAR_STREAMS_MAX ) { 
     425   id = -1; 
     426  } else { 
     427   if ( streams_get(i, &ss) == -1 ) 
     428    continue; 
     429 
     430   if ( streams_get_dir(i) != ROAR_DIR_PLAY ) 
     431    continue; 
     432 
     433   info = &(ROAR_STREAM(ss)->info); 
     434 
     435   id = i; 
     436   rate = info->rate; 
     437 
     438   format |= ESD_PLAY; 
     439 
     440   switch (info->bits) { 
     441    case  8: format |= ESD_BITS8;  break; 
     442    case 16: format |= ESD_BITS16; break; 
     443   } 
     444 
     445   switch (info->channels) { 
     446    case  1: 
     447      if ( ss->mixer.mixer[0] == ss->mixer.scale ) { 
     448       left = right = 256; 
     449      } else { 
     450       left = right = ss->mixer.mixer[0] / 256; 
     451      } 
     452      format |= ESD_MONO; 
     453     break; 
     454    case  2: 
     455      if ( ss->mixer.mixer[0] == ss->mixer.scale ) { 
     456       left = 256; 
     457      } else { 
     458       left = ss->mixer.mixer[0] / 256; 
     459      } 
     460 
     461      if ( ss->mixer.mixer[1] == ss->mixer.scale ) { 
     462       right = 256; 
     463      } else { 
     464       right = ss->mixer.mixer[1] / 256; 
     465      } 
     466 
     467      format |= ESD_STEREO; 
     468     break; 
     469    default: 
     470      left = right = 0; 
     471   } 
     472 
     473   sname = streams_get_name(id); 
     474 
     475   if ( sname == NULL || sname[0] == 0 ) { 
     476    if ( clients_get(streams_get_client(id), &c) != -1 ) { 
     477     sname = c->name; 
     478    } 
     479   } 
     480 
     481   if ( sname == NULL || sname[0] == 0 ) 
     482    sname = "(unknown)"; 
     483 
     484   strncpy(name, sname, sizeof(name) > ROAR_BUFFER_NAME ? ROAR_BUFFER_NAME : sizeof(name)); 
     485   name[sizeof(name)-1] = 0; 
     486 
     487  } 
     488 
     489  id = _ROAR2ESD(id); 
     490 
     491  if ( emul_esd_int_write(client, id, vio) == -1 ) 
     492   return -1; 
     493  if ( roar_vio_write(vio, name, sizeof(name)) != sizeof(name) ) 
     494   return -1; 
     495  if ( emul_esd_int_write(client, rate, vio) == -1 ) 
     496   return -1; 
     497  if ( emul_esd_int_write(client, left, vio) == -1 ) 
     498   return -1; 
     499  if ( emul_esd_int_write(client, right, vio) == -1 ) 
     500   return -1; 
     501  if ( emul_esd_int_write(client, format, vio) == -1 ) 
     502   return -1; 
     503 
     504  if ( i == ROAR_STREAMS_MAX+1) { 
     505   // write 'length'... 
     506   if ( emul_esd_int_write(client, id, vio) == -1 ) 
     507    return -1; 
     508  } 
     509 } 
     510 
     511 return 0; 
     512} 
     513 
    406514#endif 
    407515#endif 
Note: See TracChangeset for help on using the changeset viewer.