Changeset 3539:1fd530767d7b in roaraudio


Ignore:
Timestamp:
02/20/10 00:48:43 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

support to read channel map from server

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • libroar/stream.c

    r3517 r3539  
    482482} 
    483483 
     484int roar_stream_get_chanmap (struct roar_connection * con, struct roar_stream * s, char * map, size_t * len) { 
     485 struct roar_message m; 
     486 uint16_t * data = (uint16_t *) m.data; 
     487 
     488 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p, map=%p, len=%p) = ?", con, s, map, len); 
     489 
     490 if ( con == NULL || s == NULL || map == NULL || len == NULL ) 
     491  return -1; 
     492 
     493 if ( *len == 0 ) 
     494  return -1; 
     495 
     496 memset(&m, 0, sizeof(m)); 
     497 
     498 m.cmd     = ROAR_CMD_GET_STREAM_PARA; 
     499 m.stream  = s->id; 
     500 m.datalen = 2*2; 
     501 
     502 data[0] = 0; // Version and reserved 
     503 data[1] = ROAR_STREAM_PARA_CHANMAP; 
     504 
     505 data[0] = ROAR_HOST2NET16(data[0]); 
     506 data[1] = ROAR_HOST2NET16(data[1]); 
     507 
     508 if ( roar_req(con, &m, NULL) == -1 ) 
     509  return -1; 
     510 
     511 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     512 
     513 if ( m.cmd != ROAR_CMD_OK ) 
     514  return -1; 
     515 
     516 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     517 
     518 if ( m.datalen < 4 ) 
     519  return -1; 
     520 
     521 data[0] = ROAR_NET2HOST16(data[0]); 
     522 data[1] = ROAR_NET2HOST16(data[1]); 
     523 
     524 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     525 
     526 if ( data[0] != 0 || data[1] != ROAR_STREAM_PARA_CHANMAP ) 
     527  return -1; 
     528 
     529 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     530 
     531 m.datalen -= 4; 
     532 
     533 if ( m.datalen > *len ) 
     534  return -1; 
     535 
     536 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     537 
     538 memcpy(map, &(m.data[4]), m.datalen); 
     539 
     540 *len = m.datalen; 
     541 
     542 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = 0", con, s, s->id, map, len); 
     543 return 0; 
     544} 
     545 
     546int roar_stream_set_chanmap (struct roar_connection * con, struct roar_stream * s, char * map, size_t   len); 
     547 
     548 
    484549int roar_stream_set_flags (struct roar_connection * con, struct roar_stream * s, int flags, int reset) { 
    485550 struct roar_message m; 
  • roarclients/Makefile

    r3343 r3539  
    4747        $L 
    4848roarctl: roarctl.o 
    49         $L $(lib_m) 
     49        $L $(LIBROARDSP) $(lib_m) 
    5050roarmon: roarmon.o 
    5151        $L 
  • roarclients/roarctl.c

    r3531 r3539  
    2828#include <roaraudio.h> 
    2929#include <roaraudio/units.h> 
     30#include <libroardsp/libroardsp.h> 
    3031 
    3132#if defined(ROAR_HAVE_SETGID) && defined(ROAR_HAVE_SETUID) 
     
    298299 int num; 
    299300 int id[ROAR_STREAMS_MAX]; 
     301 char chanmap[ROAR_MAX_CHANNELS]; 
    300302 struct roar_stream s; 
    301303 struct roar_stream_info info; 
    302  char flags[1024]; 
    303  char name[1024]; 
     304 char buffer[1024]; 
     305 char * flags = buffer; 
     306 char * name  = buffer; 
    304307 char * infotext; 
     308 size_t len; 
    305309 
    306310 
     
    420424  } 
    421425 
     426  if ( g_verbose ) { 
     427   len = ROAR_MAX_CHANNELS; 
     428   if ( roar_stream_get_chanmap(con, &s, chanmap, &len) == -1 ) { 
     429    fprintf(stderr, "Error: can not get stream channel map\n"); 
     430   } else { 
     431    if ( roardsp_chanlist2str(chanmap, len, buffer, 1024) == -1 ) { 
     432     fprintf(stderr, "Error: can not convert channel map into string\n"); 
     433    } else { 
     434     printf("Channel Map           : %s\n", buffer); 
     435    } 
     436   } 
     437  } 
     438 
    422439  if ( s.dir != ROAR_DIR_THRU ) { 
    423440   display_mixer(con, id[i]); 
  • roard/req.c

    r3530 r3539  
    636636   break; 
    637637 
     638  case ROAR_STREAM_PARA_CHANMAP: 
     639    if ( streams_get(mes->stream, &ss) == -1 ) { 
     640     ROAR_WARN("req_on_get_stream_para(*): request on non existing (or other error?) stream %i", mes->stream); 
     641     return -1; 
     642    } 
     643 
     644    s = ROAR_STREAM(ss); 
     645 
     646    memcpy(&(mes->data[4]), ss->chanmap.in, s->info.channels); 
     647    mes->datalen = 2*2 + s->info.channels; 
     648 
     649    d[0] = ROAR_HOST2NET16(d[0]); 
     650    d[1] = ROAR_HOST2NET16(d[1]); 
     651   break; 
     652 
    638653  default: 
    639654    ROAR_WARN("req_on_get_stream_para(*): unsupported command: %i", d[1]); 
  • roard/streams.c

    r3517 r3539  
    316316   case ROAR_SUBSYS_WAVEFORM: 
    317317     streams_set_mixer_stream(id, g_waveform_mixer.stream); 
     318     roardsp_chanlist_init(ss->chanmap.in,  ROAR_STREAM(ss)->info.channels, ROARDSP_CHANLIST_MAP_ROARAUDIO); 
     319     roardsp_chanlist_init(ss->chanmap.out, ROAR_STREAM(ss)->info.channels, ROARDSP_CHANLIST_MAP_ROARAUDIO); 
     320     roardsp_chanmap_calc(&(ss->chanmap), ROARDSP_CHANMAP_MAP, 0); 
    318321    break; 
    319322#ifndef ROAR_WITHOUT_DCOMP_MIDI 
Note: See TracChangeset for help on using the changeset viewer.