Changeset 3036

Show
Ignore:
Timestamp:
01/05/00 14:37:46 (15 years ago)
Author:
ucacoxh
Message:

- Fixed settings not storing audioChannelParameters
- Robustified channel settings, i.e. if we fail to set channel encoder

parameters revert to None (vanilla).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • rat/trunk/settings.c

    r3034 r3036  
    364364void settings_load_early(session_t *sp) 
    365365{ 
    366         char                            *name, *primary_codec, *port; 
     366        char                            *name, *param, *primary_codec, *port; 
    367367        int                              freq, chan; 
    368         uint32_t                          i, n; 
     368        uint32_t                         i, n, success; 
    369369        const cc_details_t              *ccd; 
    370370        const audio_device_details_t    *add = NULL; 
     
    423423        audio_set_igain(sp->audio_device, setting_load_int("audioInputGain",  75)); 
    424424        tx_igain_update(sp->tb); 
    425  
    426         name = setting_load_str("audioChannelCoding", "None"); 
    427         n    = channel_get_coder_count(); 
    428         for (i = 0; i < n; i++ ) { 
    429                 ccd = channel_get_coder_details(i); 
    430                 if (strcmp(ccd->name, name) == 0) { 
    431                         if (sp->channel_coder) { 
    432                                 channel_encoder_destroy(&sp->channel_coder); 
    433                         } 
    434                         channel_encoder_create(ccd->descriptor, &sp->channel_coder); 
    435                         break; 
    436                 } 
    437         } 
    438  
    439425        setting_load_int("audioInputMute", 1); 
    440426        setting_load_int("audioOutputMute", 1); 
    441427 
    442         channel_encoder_set_parameters(sp->channel_coder, setting_load_str("audioChannelParameters", "None")); 
     428        name  = setting_load_str("audioChannelCoding", "None"); 
     429        param = setting_load_str("audioChannelParameters", "None"); 
     430 
     431        do { 
     432                n    = channel_get_coder_count(); 
     433                for (i = 0; i < n; i++ ) { 
     434                        ccd = channel_get_coder_details(i); 
     435                        if (strcmp(ccd->name, name) == 0) { 
     436                                if (sp->channel_coder) { 
     437                                        channel_encoder_destroy(&sp->channel_coder); 
     438                                } 
     439                                channel_encoder_create(ccd->descriptor, &sp->channel_coder); 
     440                                break; 
     441                        } 
     442                } 
     443                success = channel_encoder_set_parameters(sp->channel_coder, param); 
     444                if (success == 0) { 
     445                        /* Could not set parameters for channel coder, fall back to "None" */ 
     446                        name = "None"; 
     447                        param = ""; 
     448                } 
     449        } while (success == 0); 
     450 
    443451        channel_encoder_set_units_per_packet(sp->channel_coder, (uint16_t) setting_load_int("audioUnits", 1)); 
    444452 
     
    605613        pri_id   = codec_get_by_payload(sp->encodings[0]); 
    606614        pri_cf   = codec_get_format(pri_id); 
    607         cc_len   = 2 * (CODEC_LONG_NAME_LEN + 4) + 1; 
     615        cc_len   = 3 * (CODEC_LONG_NAME_LEN + 4) + 1; 
    608616        cc_param = (char*) xmalloc(cc_len); 
    609617        channel_encoder_get_parameters(sp->channel_coder, cc_param, cc_len); 
     
    683691                setting_save_str("audioChannelCoding", ccd->name); 
    684692        } 
    685         setting_save_str("audioChannelCoding",     ccd->name); 
     693        setting_save_str("AudioChannelParameters", cc_param); 
    686694        setting_save_str("audioRepair",            repair->name); 
    687695        setting_save_str("audioAutoConvert",       converter->name);