Changeset 2463


Ignore:
Timestamp:
Feb 18, 2009 8:14:15 PM (11 years ago)
Author:
bennylp
Message:

Added audiotest and initial work on audio demo sample

Location:
pjproject/branches/projects/aps-direct
Files:
3 added
7 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/aps-direct/pjmedia/build/pjmedia_audiodev.dsp

    r2459 r2463  
    9494# Begin Source File 
    9595 
     96SOURCE="..\src\pjmedia-audiodev\audiotest.c" 
     97# End Source File 
     98# Begin Source File 
     99 
    96100SOURCE="..\src\pjmedia-audiodev\pa_dev.c" 
    97101# End Source File 
     
    112116SOURCE="..\include\pjmedia-audiodev\audiodev_imp.h" 
    113117# End Source File 
     118# Begin Source File 
     119 
     120SOURCE="..\include\pjmedia-audiodev\audiotest.h" 
     121# End Source File 
    114122# End Group 
    115123# End Target 
  • pjproject/branches/projects/aps-direct/pjmedia/include/pjmedia-audiodev/audiodev.h

    r2459 r2463  
    226226     * The underlying driver name  
    227227     */ 
    228     char driver[64]; 
     228    char driver[128]; 
    229229 
    230230    /**  
     
    409409 */ 
    410410PJ_DECL(pj_status_t) pjmedia_aud_subsys_init(pj_pool_factory *pf); 
     411 
     412 
     413/** 
     414 * Get the pool factory registered to the audio subsystem. 
     415 * 
     416 * @return              The pool factory. 
     417 */ 
     418PJ_DECL(pj_pool_factory*) pjmedia_aud_subsys_get_pool_factory(void); 
    411419 
    412420 
  • pjproject/branches/projects/aps-direct/pjmedia/src/pjmedia-audiodev/audiodev.c

    r2459 r2463  
    3030 * At driver level, device ID is a 16bit unsigned integer index. 
    3131 */ 
    32 #define MAKE_DEV_ID(f_id, index)   (((f_id & 0xFFFF) << 16) & (index & 0xFFFF)) 
     32#define MAKE_DEV_ID(f_id, index)   (((f_id & 0xFFFF) << 16) | (index & 0xFFFF)) 
    3333#define GET_INDEX(dev_id)          ((dev_id) & 0xFFFF) 
    3434#define GET_FID(dev_id)            ((dev_id) >> 16) 
     
    4040pjmedia_aud_dev_factory* pjmedia_wmme_factory(pj_pool_factory *pf); 
    4141 
    42  
    43 /* Array of factories */ 
    44 static struct factory 
    45 { 
    46     pjmedia_aud_dev_factory*   (*create)(pj_pool_factory*); 
    47     pjmedia_aud_dev_factory     *f; 
    48  
    49 } factories[] =  
    50 { 
    51     /* WMME */ 
     42#define MAX_DRIVERS     16 
     43 
     44/* The audio subsystem */ 
     45static struct aud_subsys 
     46{ 
     47    pj_pool_factory *pf; 
     48    unsigned         factory_cnt; 
     49 
     50    struct factory 
    5251    { 
    53         &pjmedia_wmme_factory 
    54     }, 
    55     /* PortAudio: */ 
    56     { 
    57         &pjmedia_pa_factory 
    58     }, 
    59 }; 
    60 static unsigned factory_cnt; 
     52        pjmedia_aud_dev_factory*   (*create)(pj_pool_factory*); 
     53        pjmedia_aud_dev_factory     *f; 
     54 
     55    } factories[MAX_DRIVERS]; 
     56 
     57} aud_subsys; 
     58 
    6159 
    6260 
     
    6765    pj_status_t status = PJ_ENOMEM; 
    6866 
    69     factory_cnt = 0; 
    70  
    71     for (i=0; i<PJ_ARRAY_SIZE(factories); ++i) { 
    72         factories[i].f = (*factories[i].create)(pf); 
    73         if (!factories[i].f) 
    74             continue; 
    75  
    76         status = factories[i].f->op->init(factories[i].f); 
     67    aud_subsys.pf = pf; 
     68    aud_subsys.factory_cnt = 0; 
     69 
     70    aud_subsys.factories[aud_subsys.factory_cnt++].create = &pjmedia_pa_factory; 
     71    aud_subsys.factories[aud_subsys.factory_cnt++].create = &pjmedia_wmme_factory; 
     72 
     73    for (i=0; i<aud_subsys.factory_cnt; ++i) { 
     74        pjmedia_aud_dev_factory *f; 
     75 
     76        f = (*aud_subsys.factories[i].create)(pf); 
     77        if (!f) 
     78            continue; 
     79 
     80        status = f->op->init(f); 
    7781        if (status != PJ_SUCCESS) { 
    78             factories[i].f->op->destroy(factories[i].f); 
    79             factories[i].f = NULL; 
     82            f->op->destroy(f); 
     83            continue; 
    8084        } 
    8185 
    82         factories[i].f->internal.id = i; 
    83         ++factory_cnt; 
     86        aud_subsys.factories[i].f = f; 
     87        aud_subsys.factories[i].f->internal.id = i; 
    8488    } 
    8589 
    86     return factory_cnt ? PJ_SUCCESS : status; 
     90    return aud_subsys.factory_cnt ? PJ_SUCCESS : status; 
     91} 
     92 
     93/* API: get the pool factory registered to the audio subsystem. */ 
     94PJ_DEF(pj_pool_factory*) pjmedia_aud_subsys_get_pool_factory(void) 
     95{ 
     96    return aud_subsys.pf; 
    8797} 
    8898 
     
    92102    unsigned i; 
    93103 
    94     for (i=0; i<PJ_ARRAY_SIZE(factories); ++i) { 
    95         if (!factories[i].f) 
    96             continue; 
    97  
    98         factories[i].f->op->destroy(factories[i].f); 
    99         factories[i].f = NULL; 
     104    for (i=0; i<aud_subsys.factory_cnt; ++i) { 
     105        pjmedia_aud_dev_factory *f = aud_subsys.factories[i].f; 
     106 
     107        if (!f) 
     108            continue; 
     109 
     110        f->op->destroy(f); 
     111        aud_subsys.factories[i].f = NULL; 
    100112    } 
    101113 
     
    108120    unsigned i, count = 0; 
    109121 
    110     for (i=0; i<PJ_ARRAY_SIZE(factories); ++i) { 
    111         if (!factories[i].f) 
    112             continue; 
    113  
    114         count += factories[i].f->op->get_dev_count(factories[i].f); 
     122    for (i=0; i<aud_subsys.factory_cnt; ++i) { 
     123        pjmedia_aud_dev_factory *f = aud_subsys.factories[i].f; 
     124 
     125        if (!f) 
     126            continue; 
     127 
     128        count += f->op->get_dev_count(f); 
    115129    } 
    116130 
     
    124138    unsigned i, count = 0; 
    125139 
    126     for (i=0; i<PJ_ARRAY_SIZE(factories) && count < max_count; ++i) { 
     140    for (i=0; i<aud_subsys.factory_cnt && count < max_count; ++i) { 
     141        pjmedia_aud_dev_factory *f = aud_subsys.factories[i].f; 
    127142        unsigned j, fcount; 
    128143 
    129         if (!factories[i].f) 
    130             continue; 
    131  
    132         fcount = factories[i].f->op->get_dev_count(factories[i].f); 
     144        if (!f) 
     145            continue; 
     146 
     147        fcount = f->op->get_dev_count(f); 
    133148        for (j=0; j<fcount && count<max_count; ++j) { 
    134149            ids[count++] = MAKE_DEV_ID(i, j); 
     
    144159                                             pjmedia_aud_dev_info *info) 
    145160{ 
     161    pjmedia_aud_dev_factory *f; 
    146162    int f_id, index; 
    147163 
     
    152168    index = GET_INDEX(id); 
    153169 
    154     if (f_id < 0 || f_id >= PJ_ARRAY_SIZE(factories)) 
    155         return PJMEDIA_EAUD_INVDEV; 
    156  
    157     if (factories[f_id].f == NULL) 
    158         return PJMEDIA_EAUD_INVDEV; 
    159  
    160     return factories[f_id].f->op->get_dev_info(factories[f_id].f, 
    161                                               index, info); 
     170    if (f_id < 0 || f_id >= (int)aud_subsys.factory_cnt) 
     171        return PJMEDIA_EAUD_INVDEV; 
     172 
     173    f = aud_subsys.factories[f_id].f; 
     174    if (f == NULL) 
     175        return PJMEDIA_EAUD_INVDEV; 
     176 
     177    return f->op->get_dev_info(f, index, info); 
    162178} 
    163179 
     
    168184                                                  pjmedia_aud_dev_param *param) 
    169185{ 
     186    pjmedia_aud_dev_factory *f; 
    170187    int f_id, index; 
    171188    pj_status_t status; 
     
    177194    index = GET_INDEX(id); 
    178195 
    179     if (f_id < 0 || f_id >= PJ_ARRAY_SIZE(factories)) 
    180         return PJMEDIA_EAUD_INVDEV; 
    181  
    182     if (factories[f_id].f == NULL) 
    183         return PJMEDIA_EAUD_INVDEV; 
    184  
    185     status = factories[f_id].f->op->default_param(factories[f_id].f, 
    186                                                   index, param); 
     196    if (f_id < 0 || f_id >= (int)aud_subsys.factory_cnt) 
     197        return PJMEDIA_EAUD_INVDEV; 
     198 
     199    f = aud_subsys.factories[f_id].f; 
     200    if (f == NULL) 
     201        return PJMEDIA_EAUD_INVDEV; 
     202 
     203    status = f->op->default_param(f, index, param); 
    187204    if (status != PJ_SUCCESS) 
    188205        return status; 
     
    204221                                              pjmedia_aud_stream **p_aud_strm) 
    205222{ 
     223    pjmedia_aud_dev_factory *f; 
    206224    pjmedia_aud_dev_param param; 
    207225    int f_id; 
     
    222240        f_id = GET_FID(param.play_id); 
    223241 
    224     if (f_id < 0 || f_id >= PJ_ARRAY_SIZE(factories)) 
     242    if (f_id < 0 || f_id >= (int)aud_subsys.factory_cnt) 
    225243        return PJMEDIA_EAUD_INVDEV; 
    226244     
     
    229247    param.play_id = GET_INDEX(param.play_id); 
    230248 
    231     if (factories[f_id].f == NULL) 
    232         return PJMEDIA_EAUD_INVDEV; 
    233  
    234     status = factories[f_id].f->op->create_stream(factories[f_id].f, 
    235                                                   &param, rec_cb, play_cb, 
    236                                                   user_data, p_aud_strm); 
     249    f = aud_subsys.factories[f_id].f; 
     250    if (f == NULL) 
     251        return PJMEDIA_EAUD_INVDEV; 
     252 
     253    status = f->op->create_stream(f, &param, rec_cb, play_cb, 
     254                                  user_data, p_aud_strm); 
    237255    if (status != PJ_SUCCESS) 
    238256        return status; 
    239257 
    240     (*p_aud_strm)->factory = factories[f_id].f; 
     258    (*p_aud_strm)->factory = f; 
    241259    return PJ_SUCCESS; 
    242260} 
  • pjproject/branches/projects/aps-direct/pjproject.dsw

    r2458 r2463  
    474474    Project_Dep_Name libsrtp 
    475475    End Project Dependency 
     476    Begin Project Dependency 
     477    Project_Dep_Name pjmedia_audiodev 
     478    End Project Dependency 
    476479}}} 
    477480 
  • pjproject/branches/projects/aps-direct/pjsip-apps/build/sample_debug.dsp

    r1765 r2463  
    9191 
    9292SOURCE=..\src\samples\debug.c 
    93  
    94 !IF  "$(CFG)" == "sample_debug - Win32 Release" 
    95  
    96 !ELSEIF  "$(CFG)" == "sample_debug - Win32 Debug" 
    97  
    98 !ENDIF  
    99  
    10093# End Source File 
    10194# End Group 
  • pjproject/branches/projects/aps-direct/pjsip-apps/build/samples.dsp

    r2178 r2463  
    9191# Begin Source File 
    9292 
     93SOURCE=..\src\samples\auddemo.c 
     94# End Source File 
     95# Begin Source File 
     96 
    9397SOURCE=..\src\samples\confbench.c 
    9498# End Source File 
  • pjproject/branches/projects/aps-direct/pjsip-apps/src/samples/debug.c

    r2394 r2463  
    2929 *  #include "playfile.c" 
    3030 */ 
    31 #include "aectest.c" 
     31#include "auddemo.c" 
    3232 
Note: See TracChangeset for help on using the changeset viewer.