Changeset 3593


Ignore:
Timestamp:
Jun 21, 2011 10:23:53 AM (13 years ago)
Author:
ming
Message:

Closed #1312. Add implementation for Mac OS X and iPhone OS.

Location:
pjproject/branches/projects/2.0-dev/pjmedia/src/pjmedia-videodev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/2.0-dev/pjmedia/src/pjmedia-videodev/ios_dev.m

    r3581 r3593  
    102102static pj_status_t ios_factory_init(pjmedia_vid_dev_factory *f); 
    103103static pj_status_t ios_factory_destroy(pjmedia_vid_dev_factory *f); 
     104static pj_status_t ios_factory_refresh(pjmedia_vid_dev_factory *f); 
    104105static unsigned    ios_factory_get_dev_count(pjmedia_vid_dev_factory *f); 
    105106static pj_status_t ios_factory_get_dev_info(pjmedia_vid_dev_factory *f, 
     
    139140    &ios_factory_get_dev_info, 
    140141    &ios_factory_default_param, 
    141     &ios_factory_create_stream 
     142    &ios_factory_create_stream, 
     143    &ios_factory_refresh 
    142144}; 
    143145 
     
    239241    pj_pool_release(pool); 
    240242 
     243    return PJ_SUCCESS; 
     244} 
     245 
     246/* API: refresh the list of devices */ 
     247static pj_status_t ios_factory_refresh(pjmedia_vid_dev_factory *f) 
     248{ 
     249    PJ_UNUSED_ARG(f); 
    241250    return PJ_SUCCESS; 
    242251} 
  • pjproject/branches/projects/2.0-dev/pjmedia/src/pjmedia-videodev/qt_dev.m

    r3581 r3593  
    5959    pjmedia_vid_dev_factory      base; 
    6060    pj_pool_t                   *pool; 
     61    pj_pool_t                   *dev_pool; 
    6162    pj_pool_factory             *pf; 
    6263 
     
    101102static pj_status_t qt_factory_init(pjmedia_vid_dev_factory *f); 
    102103static pj_status_t qt_factory_destroy(pjmedia_vid_dev_factory *f); 
     104static pj_status_t qt_factory_refresh(pjmedia_vid_dev_factory *f); 
    103105static unsigned    qt_factory_get_dev_count(pjmedia_vid_dev_factory *f); 
    104106static pj_status_t qt_factory_get_dev_info(pjmedia_vid_dev_factory *f, 
     
    136138    &qt_factory_get_dev_info, 
    137139    &qt_factory_default_param, 
    138     &qt_factory_create_stream 
     140    &qt_factory_create_stream, 
     141    &qt_factory_refresh 
    139142}; 
    140143 
     
    176179static pj_status_t qt_factory_init(pjmedia_vid_dev_factory *f) 
    177180{ 
     181    return qt_factory_refresh(f); 
     182} 
     183 
     184/* API: destroy factory */ 
     185static pj_status_t qt_factory_destroy(pjmedia_vid_dev_factory *f) 
     186{ 
     187    struct qt_factory *qf = (struct qt_factory*)f; 
     188    pj_pool_t *pool = qf->pool; 
     189 
     190    if (qf->dev_pool) 
     191        pj_pool_release(qf->dev_pool); 
     192    qf->pool = NULL; 
     193    if (pool) 
     194        pj_pool_release(pool); 
     195 
     196    return PJ_SUCCESS; 
     197} 
     198 
     199/* API: refresh the list of devices */ 
     200static pj_status_t qt_factory_refresh(pjmedia_vid_dev_factory *f) 
     201{ 
    178202    struct qt_factory *qf = (struct qt_factory*)f; 
    179203    struct qt_dev_info *qdi; 
     
    181205    NSAutoreleasePool *apool = [[NSAutoreleasePool alloc]init]; 
    182206    NSArray *dev_array; 
    183  
     207     
     208    if (qf->dev_pool) { 
     209        pj_pool_release(qf->dev_pool); 
     210        qf->dev_pool = NULL; 
     211    } 
     212     
    184213    dev_array = [QTCaptureDevice inputDevices]; 
    185214    for (i = 0; i < [dev_array count]; i++) { 
     
    194223    /* Initialize input and output devices here */ 
    195224    qf->dev_count = 0; 
     225    qf->dev_pool = pj_pool_create(qf->pf, "qt video", 500, 500, NULL); 
     226     
    196227    qf->dev_info = (struct qt_dev_info*) 
    197                    pj_pool_calloc(qf->pool, dev_count, 
    198                                   sizeof(struct qt_dev_info)); 
     228    pj_pool_calloc(qf->dev_pool, dev_count, 
     229                   sizeof(struct qt_dev_info)); 
    199230    for (i = 0; i < [dev_array count]; i++) { 
    200231        QTCaptureDevice *dev = [dev_array objectAtIndex:i]; 
     
    207238            pj_bzero(qdi, sizeof(*qdi)); 
    208239            [[dev localizedDisplayName] getCString:qdi->info.name 
    209                                         maxLength:sizeof(qdi->info.name) 
    210                                         encoding: 
    211                                         [NSString defaultCStringEncoding]]; 
     240                                        maxLength:sizeof(qdi->info.name) 
     241                                        encoding: 
     242                                        [NSString defaultCStringEncoding]]; 
    212243            [[dev uniqueID] getCString:qdi->dev_id 
    213                             maxLength:sizeof(qdi->dev_id) 
    214                             encoding:[NSString defaultCStringEncoding]]; 
     244                            maxLength:sizeof(qdi->dev_id) 
     245                            encoding:[NSString defaultCStringEncoding]]; 
    215246            strcpy(qdi->info.driver, "QT");          
    216247            qdi->info.dir = PJMEDIA_DIR_CAPTURE; 
    217248            qdi->info.has_callback = PJ_TRUE; 
    218  
     249             
    219250            qdi->info.fmt_cnt = 0; 
    220251            for (k = 0; k < [[dev formatDescriptions] count]; k++) { 
     
    231262            qdi->info.caps = PJMEDIA_VID_DEV_CAP_FORMAT; 
    232263            qdi->info.fmt = (pjmedia_format*) 
    233                             pj_pool_calloc(qf->pool, qdi->info.fmt_cnt, 
    234                                            sizeof(pjmedia_format)); 
     264            pj_pool_calloc(qf->dev_pool, qdi->info.fmt_cnt, 
     265                           sizeof(pjmedia_format)); 
    235266            for (j = k = 0; k < [[dev formatDescriptions] count]; k++) { 
    236267                unsigned l; 
     
    249280                } 
    250281            } 
    251  
     282             
    252283            PJ_LOG(4, (THIS_FILE, " dev_id %d: %s", i, qdi->info.name));     
    253284        } 
    254285    } 
    255  
     286     
    256287    [apool release]; 
    257288     
    258     PJ_LOG(4, (THIS_FILE, "qt video initialized with %d devices", 
     289    PJ_LOG(4, (THIS_FILE, "qt video has %d devices", 
    259290               qf->dev_count)); 
    260291     
    261     return PJ_SUCCESS; 
    262 } 
    263  
    264 /* API: destroy factory */ 
    265 static pj_status_t qt_factory_destroy(pjmedia_vid_dev_factory *f) 
    266 { 
    267     struct qt_factory *qf = (struct qt_factory*)f; 
    268     pj_pool_t *pool = qf->pool; 
    269  
    270     qf->pool = NULL; 
    271     pj_pool_release(pool); 
    272  
    273292    return PJ_SUCCESS; 
    274293} 
     
    384403    PJ_ASSERT_RETURN(param->fmt.type == PJMEDIA_TYPE_VIDEO && 
    385404                     param->fmt.detail_type == PJMEDIA_FORMAT_DETAIL_VIDEO && 
    386                      param->dir == PJMEDIA_DIR_RENDER, 
     405                     param->dir == PJMEDIA_DIR_CAPTURE, 
    387406                     PJ_EINVAL); 
    388407 
Note: See TracChangeset for help on using the changeset viewer.