Changeset 3542:4a10d68e4c70 in roaraudio for roard/streams.c


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

support to set channel map

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/streams.c

    r3539 r3542  
    318318     roardsp_chanlist_init(ss->chanmap.in,  ROAR_STREAM(ss)->info.channels, ROARDSP_CHANLIST_MAP_ROARAUDIO); 
    319319     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); 
     320     roardsp_chanmap_calc(&(ss->chanmap), ROARDSP_CHANMAP_MAP, 0); // MAP and INVMAP are the same when in==out 
    321321    break; 
    322322#ifndef ROAR_WITHOUT_DCOMP_MIDI 
     
    415415} 
    416416 
     417int streams_get_ssdir  (int id) { 
     418 struct roar_stream_server * ss; 
     419 
     420 _CHECK_SID(id); 
     421 
     422 if ( (ss = g_streams[id]) == NULL ) 
     423  return -1; 
     424 
     425 switch (ROAR_STREAM(ss)->dir) { 
     426  case ROAR_DIR_PLAY: 
     427  case ROAR_DIR_MIDI_IN: 
     428  case ROAR_DIR_LIGHT_IN: 
     429  case ROAR_DIR_RAW_IN: 
     430  case ROAR_DIR_COMPLEX_IN: 
     431    return STREAM_DIR_IN; 
     432   break; 
     433  case ROAR_DIR_RECORD: 
     434  case ROAR_DIR_MONITOR: 
     435  case ROAR_DIR_OUTPUT: 
     436  case ROAR_DIR_MIDI_OUT: 
     437  case ROAR_DIR_LIGHT_OUT: 
     438  case ROAR_DIR_RAW_OUT: 
     439  case ROAR_DIR_COMPLEX_OUT: 
     440    return STREAM_DIR_OUT; 
     441   break; 
     442  case ROAR_DIR_MIXING: 
     443    return STREAM_DIR_NONE; 
     444   break; 
     445  case ROAR_DIR_FILTER: 
     446  case ROAR_DIR_BIDIR: 
     447    return STREAM_DIR_BIDIR; 
     448   break; 
     449  case ROAR_DIR_THRU: 
     450    return streams_get_ssdir(ROAR_STREAM(ss)->pos_rel_id); 
     451   break; 
     452 } 
     453 
     454 return -1; 
     455} 
     456 
    417457#define _err() streams_delete(id); return -1; 
    418458int streams_new_virtual (int parent, struct roar_stream_server ** stream) { 
     
    895935 
    896936 return driver_set_volume(id, &(ss->mixer)); 
     937} 
     938 
     939int streams_set_map      (int id, char * map, size_t len) { 
     940 struct roar_stream_server * ss; 
     941 int ssdir; 
     942 
     943 _CHECK_SID(id); 
     944 
     945 if ( (ss = g_streams[id]) == NULL ) 
     946  return -1; 
     947 
     948 ssdir = streams_get_ssdir(id); 
     949 if ( ssdir != STREAM_DIR_IN && ssdir != STREAM_DIR_OUT ) 
     950  return -1; 
     951 
     952 if ( map != NULL ) { 
     953  if ( ROAR_STREAM(ss)->info.channels != len ) 
     954   return -1; 
     955 
     956  memcpy(ss->chanmap.in, map, len); 
     957 } 
     958 
     959 switch (ssdir) { 
     960  case STREAM_DIR_IN: 
     961    roardsp_chanmap_calc(&(ss->chanmap), ROARDSP_CHANMAP_MAP, 0); 
     962   break; 
     963  case STREAM_DIR_OUT: 
     964    roardsp_chanmap_calc(&(ss->chanmap), ROARDSP_CHANMAP_INVMAP, 0); 
     965   break; 
     966 } 
     967 
     968 return 0; 
    897969} 
    898970 
Note: See TracChangeset for help on using the changeset viewer.