Changeset 2299

Show
Ignore:
Timestamp:
03/18/99 09:08:38 (15 years ago)
Author:
ucacoxh
Message:

- Port selection mods to fit in with audio interface changes.

Location:
rat/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • rat/trunk/auddev_oss.c

    r2237 r2299  
    5555#include "util.h" 
    5656 
     57 
     58/* Aren't these defined in soundcard.h ? */ 
     59#define AUDIO_SPEAKER    0 
     60#define AUDIO_HEADPHONE  1 
     61#define AUDIO_LINE_OUT   4 
     62#define AUDIO_MICROPHONE 1 
     63#define AUDIO_LINE_IN    2 
     64#define AUDIO_CD         4 
     65 
     66/* Info to match port id's to port name's */ 
     67static const audio_port_details out_ports[] = { 
     68        {AUDIO_SPEAKER,   AUDIO_PORT_SPEAKER} 
     69}; 
     70 
     71#define NUM_OUT_PORTS (sizeof(out_ports)/(sizeof(out_ports[0]))) 
     72 
     73static const audio_port_details in_ports[] = { 
     74        {AUDIO_MICROPHONE, AUDIO_PORT_MICROPHONE}, 
     75        {AUDIO_LINE_IN,    AUDIO_PORT_LINEIN}, 
     76        {AUDIO_CD,         AUDIO_PORT_CD} 
     77}; 
     78 
     79#define NUM_IN_PORTS (sizeof(in_ports)/(sizeof(in_ports[0]))) 
     80 
    5781int     iport     = AUDIO_MICROPHONE; 
    5882int     bytes_per_block; 
     
    382406 
    383407void 
    384 oss_audio_set_oport(audio_desc_t ad, int port) 
     408oss_audio_oport_set(audio_desc_t ad, audio_port_t port) 
    385409{ 
    386410        /* There appears to be no-way to select this with OSS... */ 
     
    390414} 
    391415 
    392 int 
    393 oss_audio_get_oport(audio_desc_t ad) 
     416audio_port_t 
     417oss_audio_oport_get(audio_desc_t ad) 
    394418{ 
    395419        /* There appears to be no-way to select this with OSS... */ 
    396420        UNUSED(ad); assert(audio_fd[ad] > 0); 
    397         return AUDIO_HEADPHONE; 
    398 } 
    399  
    400 int 
    401 oss_audio_next_oport(audio_desc_t ad) 
    402 { 
    403         /* There appears to be no-way to select this with OSS... */ 
    404         UNUSED(ad); assert(audio_fd[ad] > 0); 
    405         return AUDIO_HEADPHONE; 
    406 } 
    407  
    408 void 
    409 oss_audio_set_iport(audio_desc_t ad, int port) 
    410 { 
    411         int recmask; 
     421        return out_ports[0]->port; 
     422} 
     423 
     424int  
     425oss_audio_oport_count(audio_desc_t ad) 
     426{ 
     427        UNUSED(ad); 
     428        return (int)NUM_OUT_PORTS; 
     429} 
     430 
     431const audio_port_details_t* 
     432oss_audio_oport_details(audio_desc_t ad, int idx) 
     433{ 
     434        UNUSED(ad); 
     435        if (idx >= 0 && idx < NUM_OUT_PORTS) { 
     436                return &out_ports[idx]; 
     437        } 
     438        return NULL; 
     439} 
     440 
     441void 
     442oss_audio_iport_set(audio_desc_t ad, audio_port_t port) 
     443{ 
     444        int recmask, portmask; 
    412445        int recsrc; 
    413446        int gain; 
     
    419452                return; 
    420453        } 
    421         switch (port) { 
    422         case AUDIO_MICROPHONE :  
    423                 if (recmask & SOUND_MASK_MIC) { 
    424                         recsrc = SOUND_MASK_MIC; 
    425                         if ((ioctl(audio_fd[ad], MIXER_WRITE(SOUND_MIXER_RECSRC), &recsrc) == -1) && !(recsrc & SOUND_MASK_MIC)) { 
    426                                 debug_msg("WARNING: Unable to select recording source!\n"); 
    427                                 return; 
    428                         } 
    429                         gain = oss_audio_get_igain(ad); 
    430                         iport = port; 
    431                         oss_audio_set_igain(ad, gain); 
    432                 } else { 
    433                         debug_msg("Audio device doesn't support recording from microphone\n"); 
    434                 } 
    435                 break; 
    436         case AUDIO_LINE_IN :  
    437                 if (recmask & SOUND_MASK_LINE) { 
    438                         recsrc = SOUND_MASK_LINE; 
    439                         if ((ioctl(audio_fd[ad], MIXER_WRITE(SOUND_MIXER_RECSRC), &recsrc) == -1) && !(recsrc & SOUND_MASK_LINE)){ 
    440                                 debug_msg("WARNING: Unable to select recording source!\n"); 
    441                                 return; 
    442                         } 
    443                         gain = oss_audio_get_igain(ad); 
    444                         iport = port; 
    445                         oss_audio_set_igain(ad, gain); 
    446                 } else { 
    447                         debug_msg("Audio device doesn't support recording from line-input\n"); 
    448                 } 
    449                 break; 
    450         case AUDIO_CD: 
    451                 if (recmask & SOUND_MASK_CD) { 
    452                         recsrc = SOUND_MASK_CD; 
    453                         if ((ioctl(audio_fd[ad], MIXER_WRITE(SOUND_MIXER_RECSRC), &recsrc) == -1) && !(recsrc & SOUND_MASK_LINE)){ 
    454                                 debug_msg("WARNING: Unable to select recording source!\n"); 
    455                                 return; 
    456                         } 
    457                         gain = oss_audio_get_igain(ad); 
    458                         iport = port; 
    459                         oss_audio_set_igain(ad, gain); 
    460                 } else { 
    461                         debug_msg("Audio device doesn't support recording from CD\n"); 
    462                 } 
    463                 break; 
    464         default :  
    465                 debug_msg("audio_set_port: unknown port!\n"); 
    466                 abort(); 
    467         }; 
    468         return; 
    469 } 
    470  
    471 int 
    472 oss_audio_get_iport(audio_desc_t ad) 
     454 
     455        switch (port) { 
     456        case AUDIO_MICROPHONE: recsrc = SOUND_MASK_MIC;  break; 
     457        case AUDIO_LINE_IN:    recsrc = SOUND_MASK_LINE; break; 
     458        case AUDIO_CD:         recsrc = SOUND_MASK_CD;   break; 
     459        default: 
     460                debug_msg("Port not recognized\n"); 
     461                return; 
     462        } 
     463 
     464        /* Can we select chosen port ? */ 
     465        if (recmask & recsrc) { 
     466                portmask = recsrc; 
     467                if ((ioctl(audio_fd[ad], MIXER_WRITE(SOUND_MIXER_RECSRC), &recsrc) == -1) && !(recsrc & portmask)) { 
     468                        debug_msg("WARNING: Unable to select recording source!\n"); 
     469                        return; 
     470                } 
     471                gain = oss_audio_get_igain(ad); 
     472                iport = port; 
     473                oss_audio_set_igain(ad, gain); 
     474        } else { 
     475                debug_msg("Audio device doesn't support recording from port %d\n", port); 
     476        } 
     477} 
     478 
     479audio_port_t 
     480oss_audio_iport_get(audio_desc_t ad) 
    473481{ 
    474482        UNUSED(ad); assert(audio_fd[ad] > 0); 
     
    477485 
    478486int 
    479 oss_audio_next_iport(audio_desc_t ad) 
    480 { 
    481         UNUSED(ad); assert(audio_fd[ad] > 0); 
    482  
    483         switch (iport) { 
    484         case AUDIO_MICROPHONE :  
    485                 oss_audio_set_iport(ad, AUDIO_LINE_IN); 
    486                 break; 
    487         case AUDIO_LINE_IN :  
    488                 oss_audio_set_iport(ad, AUDIO_CD); 
    489                 break; 
    490         case AUDIO_CD :  
    491                 oss_audio_set_iport(ad, AUDIO_MICROPHONE); 
    492                 break; 
    493         default :  
    494                 debug_msg("Unknown audio source!\n"); 
    495         } 
    496  
    497         return iport; 
     487oss_audio_iport_count(audio_desc_t ad) 
     488{ 
     489        UNUSED(ad); 
     490        return (int)NUM_IN_PORTS; 
     491} 
     492 
     493const audio_port_details_t* 
     494oss_audio_iport_details(audio_desc_t ad, int idx) 
     495{ 
     496        UNUSED(ad); 
     497        if (idx >= 0 && idx < NUM_IN_PORTS) { 
     498                return &in_ports[idx]; 
     499        } 
     500        return NULL; 
    498501} 
    499502 
  • rat/trunk/auddev_oss.h

    r2237 r2299  
    5757void oss_audio_non_block  (audio_desc_t ad); 
    5858void oss_audio_block      (audio_desc_t ad); 
    59 void oss_audio_set_oport  (audio_desc_t ad, int port); 
    60 int  oss_audio_get_oport  (audio_desc_t ad); 
    61 int  oss_audio_next_oport (audio_desc_t ad); 
    62 void oss_audio_set_iport  (audio_desc_t ad, int port); 
    63 int  oss_audio_get_iport  (audio_desc_t ad); 
    64 int  oss_audio_next_iport (audio_desc_t ad); 
     59 
     60void         oss_audio_oport_set   (audio_desc_t ad, audio_port_t port); 
     61audio_port_t oss_audio_oport_get   (audio_desc_t ad); 
     62int          oss_audio_oport_count (audio_desc_t ad); 
     63const audio_port_details_t* 
     64             oss_audio_oport_details (audio_desc_t ad, int idx); 
     65 
     66void         oss_audio_iport_set   (audio_desc_t ad, audio_port_t port); 
     67audio_port_t oss_audio_iport_get   (audio_desc_t ad); 
     68int          oss_audio_iport_count (audio_desc_t ad); 
     69const audio_port_details_t* 
     70             oss_audio_iport_details (audio_desc_t ad, int idx); 
     71 
    6572int  oss_audio_is_ready  (audio_desc_t ad); 
    6673void oss_audio_wait_for  (audio_desc_t ad, int delay_ms);