Ignore:
Timestamp:
Mar 9, 2009 12:55:29 PM (15 years ago)
Author:
bennylp
Message:

PJMEDIA/PJMEDIA-AUDIODEV update:

  • pjmedia.h: re-added inclusion of <sound.h> since we have compat

layer now

  • audiodev.h:
    • added input_vol and output_vol in pjmedia_aud_param, and

implement it on WMME dev

  • added pjmedia_aud_dev_cap_name() to see cap name
  • added pjmedia_aud_param_set_cap() and pjmedia_aud_param_get_cap() to set and get specific capability in param
  • conference.h: exported PJMEDIA_CONF_BRIDGE_SIGNATURE and

PJMEDIA_CONF_SWITCH_SIGNATURE since these are needed by PJSUA-LIB

  • WMME: bug due to addition of input_vol and output_vol in param:

volumes are set in flags in default_param(), but the
fields are not set. This would cause audio volume to be set to
zero for example.

  • WMME: some refactoring, removed duplicate settings in param
  • WMME: bug: setting set in set_cap() is not saved to param, so

get_param() will return wrong setting

  • APS: update because of s/out_route/output_route/ in param
  • APS: same bug as WMME due to addition of input_vol and output_vol in

param: flags are set in param but the fields are not

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/aps-direct/pjmedia/src/pjmedia-audiodev/audiodev.c

    r2489 r2492  
    116116} aud_subsys; 
    117117 
     118/* API: get capability name/info */ 
     119PJ_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 
     141static 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*)&param->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 */ 
     196PJ_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 */ 
     215PJ_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} 
    118235 
    119236/* Internal: init driver */ 
     
    292409    aud_subsys.pf = NULL; 
    293410    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; 
    317411} 
    318412 
Note: See TracChangeset for help on using the changeset viewer.