Ignore:
Timestamp:
Feb 28, 2011 6:59:47 PM (13 years ago)
Author:
nanang
Message:

Re #1182:

  • Renamed vstreamutil.c to vid_steamutil.c just for filename format consistency reason.
  • Updated sample app simpleua.c and vid_streamutil.c to sync with updated API, e.g: strip session usage, two media ports exported video streams for each dir.
  • Added vid_streamutil.c capability to be able to stream video file (involving transcoding when video codec used in the file different to the video stream codec), also updated AVI player and ffmpeg codecs to be able to read and decode XVID/MPEG4 codec.
  • Fixed bug wrong media type check in stream.c and vid_stream.c in creating stream info from SDP.
  • Minor update: docs, logs, app samples makefiles.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/2.0-dev/pjmedia/src/test/vid_codec_test.c

    r3392 r3425  
    2121{ 
    2222    codec_port_data_t *port_data = (codec_port_data_t*)port->port_data.pdata; 
    23     pjmedia_vid_codec *codec = port_data->codec; 
    24     pjmedia_frame enc_frame; 
    2523    pj_status_t status; 
    2624 
    27     enc_frame.buf = port_data->enc_buf; 
    28     enc_frame.size = port_data->enc_buf_size; 
    29  
    3025#if !BYPASS_CODEC 
    31     status = codec->op->encode(codec, frame, enc_frame.size, &enc_frame); 
    32     if (status != PJ_SUCCESS) goto on_error; 
    33     status = codec->op->decode(codec, &enc_frame, frame->size, frame); 
    34     if (status != PJ_SUCCESS) goto on_error; 
     26    { 
     27        pjmedia_vid_codec *codec = port_data->codec; 
     28        pjmedia_frame enc_frame; 
     29 
     30        enc_frame.buf = port_data->enc_buf; 
     31        enc_frame.size = port_data->enc_buf_size; 
     32 
     33        status = codec->op->encode(codec, frame, enc_frame.size, &enc_frame); 
     34        if (status != PJ_SUCCESS) goto on_error; 
     35        status = codec->op->decode(codec, &enc_frame, frame->size, frame); 
     36        if (status != PJ_SUCCESS) goto on_error; 
     37    } 
    3538#endif 
    3639 
     
    8891                              pjmedia_format_id raw_fmt_id) 
    8992{ 
     93    const pj_str_t port_name = {"codec", 5}; 
    9094 
    9195    pjmedia_vid_codec *codec=NULL; 
     
    163167    } 
    164168 
     169    /* Prepare codec */ 
     170    { 
     171        pj_str_t codec_id_st; 
     172        unsigned info_cnt = 1; 
     173        const pjmedia_vid_codec_info *codec_info; 
     174 
     175        /* Lookup codec */ 
     176        pj_cstr(&codec_id_st, codec_id); 
     177        status = pjmedia_vid_codec_mgr_find_codecs_by_id(NULL, &codec_id_st,  
     178                                                         &info_cnt,  
     179                                                         &codec_info, NULL); 
     180        if (status != PJ_SUCCESS) { 
     181            rc = 245; goto on_return; 
     182        } 
     183        status = pjmedia_vid_codec_mgr_get_default_param(NULL, codec_info, 
     184                                                         &codec_param); 
     185        if (status != PJ_SUCCESS) { 
     186            rc = 246; goto on_return; 
     187        } 
     188 
     189#if !BYPASS_CODEC 
     190 
     191        /* Open codec */ 
     192        status = pjmedia_vid_codec_mgr_alloc_codec(NULL, codec_info, 
     193                                                   &codec); 
     194        if (status != PJ_SUCCESS) { 
     195            rc = 250; goto on_return; 
     196        } 
     197 
     198        status = codec->op->init(codec, pool); 
     199        if (status != PJ_SUCCESS) { 
     200            rc = 251; goto on_return; 
     201        } 
     202 
     203        codec_param.dec_fmt.id = raw_fmt_id; 
     204        status = codec->op->open(codec, &codec_param); 
     205        if (status != PJ_SUCCESS) { 
     206            rc = 252; goto on_return; 
     207        } 
     208 
     209#endif /* !BYPASS_CODEC */ 
     210    } 
     211 
     212 
    165213    pjmedia_vid_port_param_default(&vport_param); 
    166214 
     
    171219        rc = 220; goto on_return; 
    172220    } 
     221    pjmedia_format_copy(&vport_param.vidparam.fmt, &codec_param.dec_fmt); 
    173222    vport_param.vidparam.fmt.id = raw_fmt_id; 
    174223    vport_param.vidparam.dir = PJMEDIA_DIR_CAPTURE; 
     
    201250    } 
    202251 
    203     /* Prepare codec */ 
    204     { 
    205         pj_str_t codec_id_st; 
    206         unsigned info_cnt = 1; 
    207         const pjmedia_vid_codec_info *codec_info; 
    208         pj_str_t port_name = {"codec", 5}; 
    209         pj_uint8_t *enc_buf = NULL; 
    210         pj_size_t enc_buf_size = 0; 
    211  
    212  
    213         /* Lookup codec */ 
    214         pj_cstr(&codec_id_st, codec_id); 
    215         status = pjmedia_vid_codec_mgr_find_codecs_by_id(NULL, &codec_id_st,  
    216                                                          &info_cnt,  
    217                                                          &codec_info, NULL); 
    218         if (status != PJ_SUCCESS) { 
    219             rc = 245; goto on_return; 
    220         } 
    221         status = pjmedia_vid_codec_mgr_get_default_param(NULL, codec_info, 
    222                                                          &codec_param); 
    223         if (status != PJ_SUCCESS) { 
    224             rc = 246; goto on_return; 
    225         } 
    226  
    227         pjmedia_format_copy(&codec_param.dec_fmt, &vport_param.vidparam.fmt); 
    228  
    229 #if !BYPASS_CODEC 
    230  
    231         /* Open codec */ 
    232         status = pjmedia_vid_codec_mgr_alloc_codec(NULL, codec_info, 
    233                                                    &codec); 
    234         if (status != PJ_SUCCESS) { 
    235             rc = 250; goto on_return; 
    236         } 
    237  
    238         status = codec->op->init(codec, pool); 
    239         if (status != PJ_SUCCESS) { 
    240             rc = 251; goto on_return; 
    241         } 
    242  
    243         status = codec->op->open(codec, &codec_param); 
    244         if (status != PJ_SUCCESS) { 
    245             rc = 252; goto on_return; 
    246         } 
    247  
    248         /* Alloc encoding buffer */ 
    249         enc_buf_size =  codec_param.dec_fmt.det.vid.size.w * 
    250                         codec_param.dec_fmt.det.vid.size.h * 4 
    251                         + 16; /*< padding, just in case */ 
    252         enc_buf = pj_pool_alloc(pool,enc_buf_size); 
    253  
    254 #endif /* !BYPASS_CODEC */ 
    255  
    256         /* Init codec port */ 
    257         pj_bzero(&codec_port, sizeof(codec_port)); 
    258         status = pjmedia_port_info_init2(&codec_port.info, &port_name, 0x1234, 
    259                                          PJMEDIA_DIR_ENCODING,  
    260                                          &codec_param.dec_fmt); 
    261         if (status != PJ_SUCCESS) { 
    262             rc = 260; goto on_return; 
    263         } 
    264         codec_port_data.codec = codec; 
    265         codec_port_data.dn_port = pjmedia_vid_port_get_passive_port(renderer); 
    266         codec_port_data.enc_buf = enc_buf; 
    267         codec_port_data.enc_buf_size = enc_buf_size; 
    268  
    269         codec_port.put_frame = &codec_put_frame; 
    270         codec_port.port_data.pdata = &codec_port_data; 
    271     } 
    272  
     252    /* Init codec port */ 
     253    pj_bzero(&codec_port, sizeof(codec_port)); 
     254    status = pjmedia_port_info_init2(&codec_port.info, &port_name, 0x1234, 
     255                                     PJMEDIA_DIR_ENCODING,  
     256                                     &codec_param.dec_fmt); 
     257    if (status != PJ_SUCCESS) { 
     258        rc = 260; goto on_return; 
     259    } 
     260 
     261    codec_port_data.codec = codec; 
     262    codec_port_data.dn_port = pjmedia_vid_port_get_passive_port(renderer); 
     263    codec_port_data.enc_buf_size = codec_param.dec_fmt.det.vid.size.w * 
     264                                   codec_param.dec_fmt.det.vid.size.h * 4; 
     265    codec_port_data.enc_buf = pj_pool_alloc(pool,  
     266                                            codec_port_data.enc_buf_size); 
     267 
     268    codec_port.put_frame = &codec_put_frame; 
     269    codec_port.port_data.pdata = &codec_port_data; 
    273270 
    274271    /* Connect capture to codec port */ 
     
    280277    } 
    281278 
    282     PJ_LOG(3, (THIS_FILE, "  starting codec test:  %c%c%c%c<->%s %dx%d", 
     279#if BYPASS_CODEC 
     280    PJ_LOG(3, (THIS_FILE, "  starting loopback test: %c%c%c%c %dx%d", 
     281        ((raw_fmt_id & 0x000000FF) >> 0), 
     282        ((raw_fmt_id & 0x0000FF00) >> 8), 
     283        ((raw_fmt_id & 0x00FF0000) >> 16), 
     284        ((raw_fmt_id & 0xFF000000) >> 24), 
     285        codec_param.dec_fmt.det.vid.size.w, 
     286        codec_param.dec_fmt.det.vid.size.h 
     287        )); 
     288#else 
     289    PJ_LOG(3, (THIS_FILE, "  starting codec test: %c%c%c%c<->%.*s %dx%d", 
    283290        ((codec_param.dec_fmt.id & 0x000000FF) >> 0), 
    284291        ((codec_param.dec_fmt.id & 0x0000FF00) >> 8), 
    285292        ((codec_param.dec_fmt.id & 0x00FF0000) >> 16), 
    286293        ((codec_param.dec_fmt.id & 0xFF000000) >> 24), 
    287         codec_id,  
     294        codec_info->encoding_name.slen, 
     295        codec_info->encoding_name.ptr, 
    288296        codec_param.dec_fmt.det.vid.size.w, 
    289297        codec_param.dec_fmt.det.vid.size.h 
    290298        )); 
     299#endif 
    291300 
    292301    /* Start streaming.. */ 
     
    328337    int rc = 0; 
    329338    pj_status_t status; 
     339    int orig_log_level; 
     340     
     341    orig_log_level = pj_log_get_level(); 
     342    pj_log_set_level(6); 
    330343 
    331344    PJ_LOG(3, (THIS_FILE, "Performing video codec tests..")); 
     
    345358        goto on_return; 
    346359 
    347     rc = encode_decode_test(pool, "mjpeg", 0); 
     360    rc = encode_decode_test(pool, "h263", 0); 
    348361    if (rc != 0) 
    349362        goto on_return; 
     
    353366    pjmedia_vid_subsys_shutdown(); 
    354367    pj_pool_release(pool); 
     368    pj_log_set_level(orig_log_level); 
    355369 
    356370    return rc; 
Note: See TracChangeset for help on using the changeset viewer.