Changeset 2765
Legend:
- Unmodified
- Added
- Removed
-
rat/trunk/audio.c
r2744 r2765 289 289 if (sp->num_encodings > 1 && 290 290 !codec_audio_formats_compatible(curr_config->primary, codec_get_by_payload(sp->encodings[1]))) { 291 cc_details ccd; 292 int null_idx; 293 291 const cc_details_t *ccd; 294 292 channel_encoder_destroy(&sp->channel_coder); 295 296 null_idx = channel_get_null_coder(); 297 channel_get_coder_details(null_idx, &ccd); 298 299 channel_encoder_create(ccd.descriptor, &sp->channel_coder); 293 ccd = channel_get_null_coder(); 294 channel_encoder_create(ccd->descriptor, &sp->channel_coder); 300 295 sp->num_encodings = 1; 301 296 } 302 sp->render_3d = curr_config->render_3d;297 sp->render_3d = curr_config->render_3d; 303 298 } else { 304 299 debug_msg("audio device reconfigure - nothing to do.\n"); -
rat/trunk/channel.c
r2648 r2765 29 29 30 30 typedef struct { 31 c har name[CC_NAME_LENGTH];31 cc_details_t details; 32 32 u_int8 pt; 33 33 u_int8 layers; … … 75 75 #define CC_LAYERED_PT 125 76 76 77 #define CC_IDX_TO_ID(x) (((x)+1) | 0x0e00) 78 #define CC_ID_TO_IDX(x) (((x)-1) & 0x000f) 79 77 80 static const channel_coder_t table[] = { 78 81 /* The vanilla coder goes first. Update channel_get_null_coder 79 82 * and channel_coder_get_by_payload if it moves. 80 83 */ 81 {"None", 82 CC_VANILLA_PT, 83 1, 84 vanilla_encoder_create, 85 vanilla_encoder_destroy, 86 NULL, /* No parameters to set ...*/ 87 NULL, /* ... or get. */ 88 vanilla_encoder_reset, 89 vanilla_encoder_encode, 90 NULL, 91 NULL, 92 NULL, 93 vanilla_decoder_decode, 94 vanilla_decoder_peek, 95 vanilla_decoder_describe 84 { 85 { 86 CC_IDX_TO_ID(0), 87 "None" 88 }, 89 CC_VANILLA_PT, 90 1, 91 vanilla_encoder_create, 92 vanilla_encoder_destroy, 93 NULL, /* No parameters to set ...*/ 94 NULL, /* ... or get. */ 95 vanilla_encoder_reset, 96 vanilla_encoder_encode, 97 NULL, 98 NULL, 99 NULL, 100 vanilla_decoder_decode, 101 vanilla_decoder_peek, 102 vanilla_decoder_describe 96 103 }, 97 {"Redundancy", 98 CC_REDUNDANCY_PT, 99 1, 100 redundancy_encoder_create, 101 redundancy_encoder_destroy, 102 redundancy_encoder_set_parameters, 103 redundancy_encoder_get_parameters, 104 redundancy_encoder_reset, 105 redundancy_encoder_encode, 106 NULL, 107 NULL, 108 NULL, 109 redundancy_decoder_decode, 110 redundancy_decoder_peek, 111 redundancy_decoder_describe 104 { 105 { 106 CC_IDX_TO_ID(1), 107 "Redundancy" 108 }, 109 CC_REDUNDANCY_PT, 110 1, 111 redundancy_encoder_create, 112 redundancy_encoder_destroy, 113 redundancy_encoder_set_parameters, 114 redundancy_encoder_get_parameters, 115 redundancy_encoder_reset, 116 redundancy_encoder_encode, 117 NULL, 118 NULL, 119 NULL, 120 redundancy_decoder_decode, 121 redundancy_decoder_peek, 122 redundancy_decoder_describe 112 123 }, 113 {"Layering", 114 CC_LAYERED_PT, 115 LAY_MAX_LAYERS, 116 layered_encoder_create, 117 layered_encoder_destroy, 118 layered_encoder_set_parameters, 119 layered_encoder_get_parameters, 120 layered_encoder_reset, 121 layered_encoder_encode, 122 NULL, 123 NULL, 124 NULL, 125 layered_decoder_decode, 126 layered_decoder_peek, 127 layered_decoder_describe 128 }, 124 { 125 { 126 CC_IDX_TO_ID(2), 127 "Layering" 128 }, 129 CC_LAYERED_PT, 130 LAY_MAX_LAYERS, 131 layered_encoder_create, 132 layered_encoder_destroy, 133 layered_encoder_set_parameters, 134 layered_encoder_get_parameters, 135 layered_encoder_reset, 136 layered_encoder_encode, 137 NULL, 138 NULL, 139 NULL, 140 layered_decoder_decode, 141 layered_decoder_peek, 142 layered_decoder_describe 143 } 129 144 }; 130 145 131 #define CC_IDX_TO_ID(x) (((x)+1) | 0x0e00)132 #define CC_ID_TO_IDX(x) (((x)-1) & 0x000f)133 134 146 #define CC_NUM_CODERS (sizeof(table)/sizeof(table[0])) 135 147 136 int 148 u_int32 137 149 channel_get_coder_count() 138 150 { … … 140 152 } 141 153 142 int 143 channel_get_coder_details(int idx, cc_details *ccd) 144 { 145 if (idx >= 0 && 146 idx < channel_get_coder_count()) { 147 ccd->descriptor = CC_IDX_TO_ID(idx); 148 strcpy(ccd->name, table[idx].name); 149 return TRUE; 150 } 151 return FALSE; 152 } 153 154 int 155 channel_get_coder_identity(channel_state_t *cs, cc_details *ccd) 156 { 157 assert(cs != NULL); 158 assert(ccd != NULL); 159 ccd->descriptor = CC_IDX_TO_ID(cs->coder); 160 strcpy(ccd->name, table[cs->coder].name); 161 return TRUE; 162 } 163 164 int 154 const cc_details_t* 155 channel_get_coder_details(u_int32 idx) 156 { 157 if (idx < CC_NUM_CODERS) { 158 return &table[idx].details; 159 } 160 return NULL; 161 } 162 163 const cc_details_t* 164 channel_get_coder_identity(channel_state_t *cs) 165 { 166 assert(cs->coder < CC_NUM_CODERS); 167 return &table[cs->coder].details; 168 } 169 170 const cc_details_t* 165 171 channel_get_null_coder(void) 166 172 { 167 return 0;173 return &table[0].details; 168 174 } 169 175 -
rat/trunk/channel.h
r2648 r2765 24 24 */ 25 25 26 intchannel_get_coder_count (void);27 int channel_get_coder_details (int idx, cc_details *ccd);28 intchannel_get_null_coder (void);26 u_int32 channel_get_coder_count (void); 27 const cc_details_t* channel_get_coder_details (u_int32 idx); 28 const cc_details_t* channel_get_null_coder (void); 29 29 30 30 /* channel_get_coder_identity fills coder name and descriptor into ccd */ 31 int channel_get_coder_identity(struct s_channel_state *cs, cc_details *ccd);31 const cc_details_t* channel_get_coder_identity(struct s_channel_state *cs); 32 32 33 33 /* Don't use these two functions directly use macros channel_encoder_{create, destory, reset}, -
rat/trunk/channel_types.h
r2381 r2765 20 20 21 21 typedef struct { 22 cc_id_t descriptor;23 c harname[CC_NAME_LENGTH];24 } cc_details ;22 cc_id_t descriptor; 23 const char name[CC_NAME_LENGTH]; 24 } cc_details_t; 25 25 26 26 /* In and out unit types. On input channel encoder takes a playout buffer -
rat/trunk/mbus_engine.c
r2763 r2765 1124 1124 static void rx_audio_channel_coding(char *srce, char *args, session_t *sp) 1125 1125 { 1126 c c_detailsccd;1126 const cc_details_t *ccd; 1127 1127 char *coding, *sec_enc, *schan, *sfreq; 1128 int i, n, offset, layerenc; 1128 int offset, layerenc; 1129 u_int32 i, n; 1129 1130 u_int16 upp; 1130 1131 … … 1134 1135 if (mbus_parse_str(sp->mbus_engine, &coding)) { 1135 1136 mbus_decode_str(coding); 1136 1137 1137 upp = channel_encoder_get_units_per_packet(sp->channel_coder); 1138 1138 n = channel_get_coder_count(); 1139 1139 for(i = 0; i < n; i++) { 1140 c hannel_get_coder_details(i, &ccd);1141 if (strncasecmp(ccd .name, coding, 3) == 0) {1142 debug_msg("rx_audio_channel_coding: %d, %s\n", ccd.descriptor, &ccd.name);1143 switch(tolower(ccd .name[0])) {1140 ccd = channel_get_coder_details(i); 1141 if (strncasecmp(ccd->name, coding, 3) == 0) { 1142 debug_msg("rx_audio_channel_coding: 0x%08x, %s\n", ccd->descriptor, &ccd->name); 1143 switch(tolower(ccd->name[0])) { 1144 1144 case 'n': /* No channel coding */ 1145 1145 sp->num_encodings = 1; 1146 1146 sp->layers = 1; 1147 1147 channel_encoder_destroy(&sp->channel_coder); 1148 channel_encoder_create(ccd .descriptor, &sp->channel_coder);1148 channel_encoder_create(ccd->descriptor, &sp->channel_coder); 1149 1149 channel_encoder_set_units_per_packet(sp->channel_coder, upp); 1150 1150 break; … … 1155 1155 sp->layers = 1; 1156 1156 channel_encoder_destroy(&sp->channel_coder); 1157 channel_encoder_create(ccd .descriptor, &sp->channel_coder);1157 channel_encoder_create(ccd->descriptor, &sp->channel_coder); 1158 1158 channel_encoder_set_units_per_packet(sp->channel_coder, upp); 1159 1159 set_red_parameters(sp, sec_enc, offset); … … 1169 1169 mbus_decode_str(sfreq); 1170 1170 channel_encoder_destroy(&sp->channel_coder); 1171 channel_encoder_create(ccd .descriptor, &sp->channel_coder);1171 channel_encoder_create(ccd->descriptor, &sp->channel_coder); 1172 1172 channel_encoder_set_units_per_packet(sp->channel_coder, upp); 1173 1173 set_layered_parameters(sp, sec_enc, schan, sfreq, layerenc); … … 1181 1181 mbus_parse_done(sp->mbus_engine); 1182 1182 #ifdef DEBUG 1183 c hannel_get_coder_identity(sp->channel_coder, &ccd);1184 debug_msg("***** %s\n", ccd .name);1183 ccd = channel_get_coder_identity(sp->channel_coder); 1184 debug_msg("***** %s\n", ccd->name); 1185 1185 #endif /* DEBUG */ 1186 1186 ui_update_channel(sp); -
rat/trunk/session.c
r2756 r2765 71 71 u_int32 i, j, n_codecs, n_channels; 72 72 codec_id_t cid; 73 const codec_format_t *cf; 73 const codec_format_t *cf = NULL; 74 const cc_details_t *ccd = NULL; 74 75 cc_id_t ccid; 75 cc_details ccd; 76 76 77 u_char pt; 77 78 … … 85 86 ccid = channel_coder_get_by_payload(pt); 86 87 for(j = 0; j < n_channels; j++) { 87 if ((int)j == channel_get_null_coder()) { 88 ccd = channel_get_coder_details(j); 89 if (ccd == channel_get_null_coder()) { 88 90 continue; 89 91 } 90 channel_get_coder_details(j, &ccd); 91 if (ccd.descriptor == ccid) { 92 debug_msg("clash with %s %s payload (%d)\n", cf->long_name, ccd.name, pt); 92 if (ccd->descriptor == ccid) { 93 debug_msg("clash with %s %s payload (%d)\n", cf->long_name, ccd->name, pt); 93 94 return FALSE; 94 95 } … … 104 105 session_init(session_t *sp) 105 106 { 106 codec_id_t cid;107 const codec_format_t *cf;108 const converter_details_t *conv ;109 c c_details ccd;110 u_int8 i;107 codec_id_t cid; 108 const codec_format_t *cf = NULL; 109 const converter_details_t *conv = NULL; 110 const cc_details_t *ccd = NULL; 111 u_int8 i; 111 112 112 113 memset(sp, 0, sizeof(session_t)); … … 122 123 sp->num_encodings = 1; /* Number of encodings applied */ 123 124 124 c hannel_get_coder_details(channel_get_null_coder(), &ccd);125 channel_encoder_create(ccd .descriptor, &sp->channel_coder);125 ccd = channel_get_null_coder(); 126 channel_encoder_create(ccd->descriptor, &sp->channel_coder); 126 127 127 128 conv = converter_get_details(0); … … 552 553 if ((strcmp(argv[i], "-f") == 0) && (argc > i+1)) { 553 554 codec_id_t primary_cid, secondary_cid; 554 c c_detailsccd;555 const cc_details_t *ccd; 555 556 const char *primary_name, *secondary_name; 556 557 u_int16 upp, num_channel_coders, idx; … … 581 582 */ 582 583 upp = channel_encoder_get_units_per_packet(sp[s]->channel_coder); 583 num_channel_coders = channel_get_coder_count(); 584 for (idx = 0; idx < num_channel_coders; idx++) { 585 channel_get_coder_details(idx, &ccd); 586 if (tolower(ccd.name[0]) == 'n') { 587 channel_encoder_destroy(&sp[s]->channel_coder); 588 channel_encoder_create(ccd.descriptor, &sp[s]->channel_coder); 589 channel_encoder_set_units_per_packet(sp[s]->channel_coder, upp); 590 sp[s]->num_encodings = 1; 591 } 592 } 593 continue; 584 ccd = channel_get_null_coder(); 585 channel_encoder_destroy(&sp[s]->channel_coder); 586 channel_encoder_create(ccd->descriptor, &sp[s]->channel_coder); 587 channel_encoder_set_units_per_packet(sp[s]->channel_coder, upp); 594 588 } 595 589 … … 612 606 num_channel_coders = channel_get_coder_count(); 613 607 for(idx = 0; idx < num_channel_coders; idx++) { 614 channel_get_coder_details(idx, &ccd); 615 if (tolower(ccd.name[0]) == 'r') { 608 ccd = channel_get_coder_details(idx); 609 /* Redundant channel coder is the only that begins with an 'r' */ 610 if (tolower(ccd->name[0]) == 'r') { 616 611 char *cmd; 617 612 channel_encoder_destroy(&sp[s]->channel_coder); 618 channel_encoder_create(ccd .descriptor, &sp[s]->channel_coder);613 channel_encoder_create(ccd->descriptor, &sp[s]->channel_coder); 619 614 channel_encoder_set_units_per_packet(sp[s]->channel_coder, upp); 620 615 cmd = (char*)xmalloc(2 * (CODEC_LONG_NAME_LEN + 4)); … … 632 627 } 633 628 } 634 635 629 } 636 630 } -
rat/trunk/settings.c
r2763 r2765 358 358 { 359 359 char *name, *primary_codec, *port; 360 int i, freq, chan, n; 361 cc_details ccd; 360 int freq, chan; 361 u_int32 i, n; 362 const cc_details_t *ccd; 362 363 const audio_device_details_t *add = NULL; 363 364 const audio_port_details_t *apd = NULL; … … 393 394 394 395 port = setting_load_str("audioOutputPort", "Headphone"); 395 for(i = 0; i < audio_get_oport_count(sp->audio_device); i++) { 396 n = audio_get_oport_count(sp->audio_device); 397 for(i = 0; i < n; i++) { 396 398 apd = audio_get_oport_details(sp->audio_device, i); 397 399 if (!strcasecmp(port, apd->name)) { … … 402 404 403 405 port = setting_load_str("audioInputPort", "Microphone"); 404 for(i = 0; i < audio_get_iport_count(sp->audio_device); i++) { 406 n = audio_get_iport_count(sp->audio_device); 407 for(i = 0; i < n; i++) { 405 408 apd = audio_get_iport_details(sp->audio_device, i); 406 409 if (!strcasecmp(port, apd->name)) { … … 417 420 n = channel_get_coder_count(); 418 421 for (i = 0; i < n; i++ ) { 419 c hannel_get_coder_details(i, &ccd);420 if (strcmp(ccd .name, name) == 0) {421 channel_encoder_create(ccd .descriptor, &sp->channel_coder);422 ccd = channel_get_coder_details(i); 423 if (strcmp(ccd->name, name) == 0) { 424 channel_encoder_create(ccd->descriptor, &sp->channel_coder); 422 425 break; 423 426 } … … 573 576 { 574 577 const codec_format_t *pri_cf; 575 const audio_port_details_t *iapd = NULL;576 const audio_port_details_t *oapd = NULL;577 const audio_format *af = NULL;578 const repair_details_t *repair = NULL;578 const audio_port_details_t *iapd = NULL; 579 const audio_port_details_t *oapd = NULL; 580 const audio_format *af = NULL; 581 const repair_details_t *repair = NULL; 579 582 const converter_details_t *converter = NULL; 580 const audio_device_details_t *add = NULL; 583 const audio_device_details_t *add = NULL; 584 const cc_details_t *ccd = NULL; 581 585 codec_id_t pri_id; 582 cc_details cd;586 583 587 int cc_len; 584 588 char *cc_param; … … 592 596 cc_param = (char*) xmalloc(cc_len); 593 597 channel_encoder_get_parameters(sp->channel_coder, cc_param, cc_len); 594 c hannel_get_coder_identity(sp->channel_coder, &cd);598 ccd = channel_get_coder_identity(sp->channel_coder); 595 599 596 600 n = converter_get_count(); … … 651 655 setting_save_str("audioPrimary", pri_cf->short_name); 652 656 /* If vanilla channel coder don't save audioChannelParameters - it's rubbish */ 653 if (strcmp(c d.name, "Vanilla") == 0) {657 if (strcmp(ccd->name, "Vanilla") == 0) { 654 658 setting_save_str("audioChannelParameters", cc_param); 655 } 656 else { 659 } else { 657 660 setting_save_str("audioChannelParameters", "None"); 658 661 } … … 660 663 661 664 setting_save_int("audioUnits", channel_encoder_get_units_per_packet(sp->channel_coder)); 662 /* Don't save the layered channel coder - you need to start it from the command663 line anyway*/664 if (strcmp(c d.name, "Layering") == 0) {665 /* Don't save the layered channel coder - you need to start it */ 666 /* from the command line anyway */ 667 if (strcmp(ccd->name, "Layering") == 0) { 665 668 setting_save_str("audioChannelCoding", "Vanilla"); 666 } 667 else setting_save_str("audioChannelCoding", cd.name); 668 setting_save_str("audioChannelCoding", cd.name); 669 } else { 670 setting_save_str("audioChannelCoding", ccd->name); 671 } 672 setting_save_str("audioChannelCoding", ccd->name); 669 673 setting_save_str("audioRepair", repair->name); 670 674 setting_save_str("audioAutoConvert", converter->name); -
rat/trunk/ui.c
r2763 r2765 498 498 ui_update_channel(session_t *sp) 499 499 { 500 c c_detailscd;501 char *mbes; 502 503 c hannel_get_coder_identity(sp->channel_coder, &cd);504 switch(tolower(c d.name[0])) {500 const cc_details_t *ccd; 501 char *mbes; 502 503 ccd = channel_get_coder_identity(sp->channel_coder); 504 switch(tolower(ccd->name[0])) { 505 505 case 'n': 506 506 mbes = mbus_encode_str("none");
