Ignore:
Timestamp:
May 5, 2010 4:23:27 AM (13 years ago)
Author:
ming
Message:

Implemented ticket #1065: audiodev register/unregister feature

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-audiodev/audiodev.c

    r3102 r3159  
    9898#define MAX_DEVS        64 
    9999 
    100 /* typedef for factory creation function */ 
    101 typedef pjmedia_aud_dev_factory*  (*create_func_ptr)(pj_pool_factory*); 
    102100 
    103101/* driver structure */ 
    104102struct driver 
    105103{ 
    106     create_func_ptr          create;    /* Creation function.               */ 
    107     pjmedia_aud_dev_factory *f;         /* Factory instance.                */ 
     104    /* Creation function */ 
     105    pjmedia_aud_dev_factory_create_func_ptr create; 
     106    /* Factory instance */ 
     107    pjmedia_aud_dev_factory *f; 
    108108    char                     name[32];  /* Driver name                      */ 
    109109    unsigned                 dev_cnt;   /* Number of devices                */ 
     
    409409 
    410410    return aud_subsys.dev_cnt ? PJ_SUCCESS : status; 
     411} 
     412 
     413/* API: register an audio device factory to the audio subsystem. */ 
     414PJ_DEF(pj_status_t) 
     415pjmedia_aud_register_factory(pjmedia_aud_dev_factory_create_func_ptr adf) 
     416{ 
     417    pj_status_t status; 
     418 
     419    if (aud_subsys.init_count == 0) 
     420        return PJMEDIA_EAUD_INIT; 
     421 
     422    aud_subsys.drv[aud_subsys.drv_cnt].create = adf; 
     423    status = init_driver(aud_subsys.drv_cnt); 
     424    if (status == PJ_SUCCESS) { 
     425        aud_subsys.drv_cnt++; 
     426    } else { 
     427        deinit_driver(aud_subsys.drv_cnt); 
     428    } 
     429 
     430    return status; 
     431} 
     432 
     433/* API: unregister an audio device factory from the audio subsystem. */ 
     434PJ_DEF(pj_status_t) 
     435pjmedia_aud_unregister_factory(pjmedia_aud_dev_factory_create_func_ptr adf) 
     436{ 
     437    unsigned i, j; 
     438 
     439    if (aud_subsys.init_count == 0) 
     440        return PJMEDIA_EAUD_INIT; 
     441 
     442    for (i=0; i<aud_subsys.drv_cnt; ++i) { 
     443        struct driver *drv = &aud_subsys.drv[i]; 
     444 
     445        if (drv->create == adf) { 
     446            for (j = drv->start_idx; j < drv->start_idx + drv->dev_cnt; j++) 
     447            { 
     448                aud_subsys.dev_list[j] = PJMEDIA_AUD_INVALID_DEV; 
     449            } 
     450 
     451            deinit_driver(i); 
     452            pj_bzero(drv, sizeof(*drv)); 
     453            return PJ_SUCCESS; 
     454        } 
     455    } 
     456 
     457    return PJMEDIA_EAUD_ERR; 
    411458} 
    412459 
Note: See TracChangeset for help on using the changeset viewer.