Changeset 3956


Ignore:
Timestamp:
Feb 21, 2012 8:31:26 AM (12 years ago)
Author:
nanang
Message:

Fix #1453:

  • Add and manage pool instance in default codec param in video codec framework.
  • API change: pool param is removed from pjmedia_vid_codec_mgr_set_default_param().
Location:
pjproject/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/include/pjmedia/vid_codec.h

    r3901 r3956  
    620620PJ_DECL(pj_status_t)  
    621621pjmedia_vid_codec_mgr_set_default_param(pjmedia_vid_codec_mgr *mgr, 
    622                                         pj_pool_t *pool, 
    623622                                        const pjmedia_vid_codec_info *info, 
    624623                                        const pjmedia_vid_codec_param *param); 
  • pjproject/trunk/pjmedia/src/pjmedia/vid_codec.c

    r3901 r3956  
    3434 
    3535 
     36/* Definition of default codecs parameters */ 
     37typedef struct pjmedia_vid_codec_default_param 
     38{ 
     39    pj_pool_t                   *pool; 
     40    pjmedia_vid_codec_param     *param; 
     41} pjmedia_vid_codec_default_param; 
     42 
     43 
    3644/* 
    3745 * Codec manager maintains array of these structs for each supported 
     
    4452    pjmedia_codec_priority           prio;      /**< Priority.              */ 
    4553    pjmedia_vid_codec_factory       *factory;   /**< The factory.           */ 
    46     pjmedia_vid_codec_param        *def_param; /**< Default codecs  
     54    pjmedia_vid_codec_default_param *def_param; /**< Default codecs  
    4755                                                     parameters.            */ 
    4856} pjmedia_vid_codec_desc; 
     
    5260struct pjmedia_vid_codec_mgr 
    5361{ 
     62    /** Pool factory instance. */ 
     63    pj_pool_factory             *pf; 
     64 
    5465    /** Codec manager mutex. */ 
    5566    pj_mutex_t                  *mutex; 
     
    117128 
    118129    mgr = PJ_POOL_ZALLOC_T(pool, pjmedia_vid_codec_mgr); 
     130    mgr->pf = pool->factory; 
    119131    pj_list_init (&mgr->factory_list); 
    120132    mgr->codec_cnt = 0; 
     
    612624    /* If we found the codec and its default param is set, return it */ 
    613625    if (codec_desc && codec_desc->def_param) { 
    614         pj_memcpy(param, codec_desc->def_param,  
     626        pj_memcpy(param, codec_desc->def_param->param,  
    615627                  sizeof(pjmedia_vid_codec_param)); 
    616628 
     
    652664PJ_DEF(pj_status_t) pjmedia_vid_codec_mgr_set_default_param(  
    653665                                            pjmedia_vid_codec_mgr *mgr, 
    654                                             pj_pool_t *pool, 
    655666                                            const pjmedia_vid_codec_info *info, 
    656667                                            const pjmedia_vid_codec_param *param ) 
     
    659670    pjmedia_codec_id codec_id; 
    660671    pjmedia_vid_codec_desc *codec_desc = NULL; 
    661     pjmedia_vid_codec_param *p; 
     672    pj_pool_t *pool, *old_pool = NULL; 
     673    pjmedia_vid_codec_default_param *p; 
    662674 
    663675    PJ_ASSERT_RETURN(info, PJ_EINVAL); 
     
    687699    /* If codec param is previously set */ 
    688700    if (codec_desc->def_param) { 
     701        pj_assert(codec_desc->def_param->pool); 
     702        old_pool = codec_desc->def_param->pool; 
    689703        codec_desc->def_param = NULL; 
    690704    } 
     
    695709    if (NULL == param) { 
    696710        pj_mutex_unlock(mgr->mutex); 
     711        if (old_pool) 
     712            pj_pool_release(old_pool); 
    697713        return PJ_SUCCESS; 
    698714    } 
    699715 
     716    /* Create new default codec param instance */ 
     717    pool = pj_pool_create(mgr->pf, (char*)codec_id, 256, 256, NULL); 
     718    codec_desc->def_param = PJ_POOL_ZALLOC_T(pool, 
     719                                             pjmedia_vid_codec_default_param); 
     720    p = codec_desc->def_param; 
     721    p->pool = pool; 
     722 
    700723    /* Update codec default param */ 
    701     p = pjmedia_vid_codec_param_clone(pool, param); 
     724    p->param = pjmedia_vid_codec_param_clone(pool, param); 
    702725    if (!p) 
    703726        return PJ_EINVAL; 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_vid.c

    r3940 r3956  
    333333    } 
    334334 
    335     status = pjmedia_vid_codec_mgr_set_default_param(NULL, pjsua_var.pool, 
    336                                                      info[0], param); 
     335    status = pjmedia_vid_codec_mgr_set_default_param(NULL, info[0], param); 
    337336    return status; 
    338337} 
Note: See TracChangeset for help on using the changeset viewer.