Changeset 2541:becbe03a9088 in roaraudio for plugins
- Timestamp:
- 09/02/09 04:08:33 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/roard/protocol-esound.c
r2539 r2541 62 62 {ESD_PROTO_STREAM_FILT, ESD_NAME_MAX + 2 * _INTSIZE, _NAME("STREAM_FILT"), emul_esd_on_stream}, 63 63 {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}, 65 65 {ESD_PROTO_SUBSCRIBE, 0 , _NAME("SUBSCRIBE"), _UNIMPLEMNTED_IN_ESD}, 66 66 {ESD_PROTO_UNSUBSCRIBE, 0 , _NAME("UNSUBSCRIBE"), _UNIMPLEMNTED_IN_ESD}, … … 404 404 } 405 405 406 int 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 406 514 #endif 407 515 #endif
Note: See TracChangeset
for help on using the changeset viewer.