- Timestamp:
- Mar 9, 2009 12:55:29 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/aps-direct/pjmedia/src/pjmedia-audiodev/audiodev.c
r2489 r2492 116 116 } aud_subsys; 117 117 118 /* API: get capability name/info */ 119 PJ_DEF(const char*) pjmedia_aud_dev_cap_name(pjmedia_aud_dev_cap cap, 120 const char **p_desc) 121 { 122 const char *desc; 123 unsigned i; 124 125 if (p_desc==NULL) p_desc = &desc; 126 127 for (i=0; i<PJ_ARRAY_SIZE(cap_infos); ++i) { 128 if ((1 << i)==cap) 129 break; 130 } 131 132 if (i==32) { 133 *p_desc = "??"; 134 return "??"; 135 } 136 137 *p_desc = cap_infos[i].info; 138 return cap_infos[i].name; 139 } 140 141 static pj_status_t get_cap_pointer(const pjmedia_aud_param *param, 142 pjmedia_aud_dev_cap cap, 143 void **ptr, 144 unsigned *size) 145 { 146 #define FIELD_INFO(name) *ptr = (void*)¶m->name; \ 147 *size = sizeof(param->name) 148 149 switch (cap) { 150 case PJMEDIA_AUD_DEV_CAP_EXT_FORMAT: 151 FIELD_INFO(ext_fmt); 152 break; 153 case PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY: 154 FIELD_INFO(input_latency_ms); 155 break; 156 case PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY: 157 FIELD_INFO(output_latency_ms); 158 break; 159 case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING: 160 FIELD_INFO(input_vol); 161 break; 162 case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING: 163 FIELD_INFO(output_vol); 164 break; 165 case PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE: 166 FIELD_INFO(input_route); 167 break; 168 case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 169 FIELD_INFO(output_route); 170 break; 171 case PJMEDIA_AUD_DEV_CAP_EC: 172 FIELD_INFO(ec_enabled); 173 break; 174 case PJMEDIA_AUD_DEV_CAP_EC_TAIL: 175 FIELD_INFO(ec_tail_ms); 176 break; 177 case PJMEDIA_AUD_DEV_CAP_VAD: 178 FIELD_INFO(ext_fmt.vad); 179 break; 180 case PJMEDIA_AUD_DEV_CAP_CNG: 181 FIELD_INFO(cng_enabled); 182 break; 183 case PJMEDIA_AUD_DEV_CAP_PLC: 184 FIELD_INFO(plc_enabled); 185 break; 186 default: 187 return PJMEDIA_EAUD_INVCAP; 188 } 189 190 #undef FIELD_INFO 191 192 return PJ_SUCCESS; 193 } 194 195 /* API: set cap value to param */ 196 PJ_DEF(pj_status_t) pjmedia_aud_param_set_cap( pjmedia_aud_param *param, 197 pjmedia_aud_dev_cap cap, 198 const void *pval) 199 { 200 void *cap_ptr; 201 unsigned cap_size; 202 pj_status_t status; 203 204 status = get_cap_pointer(param, cap, &cap_ptr, &cap_size); 205 if (status != PJ_SUCCESS) 206 return status; 207 208 pj_memcpy(cap_ptr, pval, cap_size); 209 param->flags |= cap; 210 211 return PJ_SUCCESS; 212 } 213 214 /* API: get cap value from param */ 215 PJ_DEF(pj_status_t) pjmedia_aud_param_get_cap( const pjmedia_aud_param *param, 216 pjmedia_aud_dev_cap cap, 217 void *pval) 218 { 219 void *cap_ptr; 220 unsigned cap_size; 221 pj_status_t status; 222 223 status = get_cap_pointer(param, cap, &cap_ptr, &cap_size); 224 if (status != PJ_SUCCESS) 225 return status; 226 227 if ((param->flags & cap) == 0) { 228 pj_bzero(cap_ptr, cap_size); 229 return PJMEDIA_EAUD_INVCAP; 230 } 231 232 pj_memcpy(pval, cap_ptr, cap_size); 233 return PJ_SUCCESS; 234 } 118 235 119 236 /* Internal: init driver */ … … 292 409 aud_subsys.pf = NULL; 293 410 return PJ_SUCCESS; 294 }295 296 /* API: get capability name/info */297 PJ_DEF(const char*) pjmedia_aud_dev_cap_name(pjmedia_aud_dev_cap cap,298 const char **p_desc)299 {300 const char *desc;301 unsigned i;302 303 if (p_desc==NULL) p_desc = &desc;304 305 for (i=0; i<PJ_ARRAY_SIZE(cap_infos); ++i) {306 if ((1 << i)==cap)307 break;308 }309 310 if (i==32) {311 *p_desc = "??";312 return "??";313 }314 315 *p_desc = cap_infos[i].info;316 return cap_infos[i].name;317 411 } 318 412
Note: See TracChangeset
for help on using the changeset viewer.