- Timestamp:
- Apr 13, 2011 8:06:12 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/2.0-dev/pjmedia/src/pjmedia/videoport.c
r3509 r3535 38 38 struct pjmedia_vid_port 39 39 { 40 pj_pool_t *pool; 40 41 pj_str_t dev_name; 41 42 pjmedia_dir dir; … … 50 51 pj_bool_t destroy_client_port; 51 52 52 pjmedia_converter *cap_conv; 53 void *cap_conv_buf; 54 pj_size_t cap_conv_buf_size; 53 pjmedia_converter *cap_conv; 54 void *cap_conv_buf; 55 pj_size_t cap_conv_buf_size; 56 pjmedia_conversion_param cap_conv_param; 55 57 56 58 pjmedia_clock *enc_clock, … … 136 138 unsigned ptime_usec; 137 139 pjmedia_vid_param vparam; 138 pjmedia_conversion_param conv_param;139 140 140 141 PJ_ASSERT_RETURN(pool && prm && p_vid_port, PJ_EINVAL); … … 152 153 /* Allocate videoport */ 153 154 vp = PJ_POOL_ZALLOC_T(pool, pjmedia_vid_port); 155 vp->pool = pool; 154 156 vp->role = prm->active ? ROLE_ACTIVE : ROLE_PASSIVE; 155 157 vp->dir = prm->vidparam.dir; … … 257 259 vparam.fmt.det.vid.fps.num, vparam.fmt.det.vid.fps.denum)); 258 260 261 if (vp->dir & PJMEDIA_DIR_CAPTURE) { 262 pjmedia_format_copy(&vp->cap_conv_param.src, &vparam.fmt); 263 pjmedia_format_copy(&vp->cap_conv_param.dst, &prm->vidparam.fmt); 264 } else { 265 pjmedia_format_copy(&vp->cap_conv_param.src, &prm->vidparam.fmt); 266 pjmedia_format_copy(&vp->cap_conv_param.dst, &vparam.fmt); 267 } 268 259 269 /* Instantiate converter if necessary */ 260 270 if (vparam.fmt.id != prm->vidparam.fmt.id || … … 268 278 pjmedia_video_apply_fmt_param vafp; 269 279 270 if (vp->dir & PJMEDIA_DIR_CAPTURE) { 271 pjmedia_format_copy(&conv_param.src, &vparam.fmt); 272 pjmedia_format_copy(&conv_param.dst, &prm->vidparam.fmt); 273 274 status = pjmedia_converter_create(NULL, pool, &conv_param, 275 &vp->cap_conv); 276 } else { 277 pjmedia_format_copy(&conv_param.src, &prm->vidparam.fmt); 278 pjmedia_format_copy(&conv_param.dst, &vparam.fmt); 279 280 status = pjmedia_converter_create(NULL, pool, &conv_param, 281 &vp->cap_conv); 282 } 283 280 status = pjmedia_converter_create(NULL, pool, &vp->cap_conv_param, 281 &vp->cap_conv); 284 282 if (status != PJ_SUCCESS) { 285 283 PJ_PERROR(4,(THIS_FILE, status, "Error creating converter")); … … 288 286 289 287 /* Allocate buffer for conversion */ 290 vfi = pjmedia_get_video_format_info(NULL, conv_param.dst.id);288 vfi = pjmedia_get_video_format_info(NULL, vp->cap_conv_param.dst.id); 291 289 if (!vfi) 292 290 return PJMEDIA_EBADFMT; 293 291 294 292 pj_bzero(&vafp, sizeof(vafp)); 295 vafp.size = conv_param.dst.det.vid.size;293 vafp.size = vp->cap_conv_param.dst.det.vid.size; 296 294 status = vfi->apply_fmt(vfi, &vafp); 297 295 if (status != PJ_SUCCESS) … … 354 352 355 353 vfi = pjmedia_get_video_format_info(NULL, vp->cap_conv? 356 conv_param.src.id:354 vp->cap_conv_param.src.id: 357 355 vparam.fmt.id); 358 356 if (!vfi) { … … 362 360 363 361 pj_bzero(&vafp, sizeof(vafp)); 364 vafp.size = (vp->cap_conv? conv_param.src.det.vid.size:362 vafp.size = (vp->cap_conv? vp->cap_conv_param.src.det.vid.size: 365 363 vparam.fmt.det.vid.size); 366 364 status = vfi->apply_fmt(vfi, &vafp); … … 611 609 pj_status_t status; 612 610 611 pjmedia_vid_port_stop(vp); 612 613 613 /* Retrieve the video format detail */ 614 614 vfd = pjmedia_format_get_video_format_detail( … … 617 617 return PJMEDIA_EVID_BADFORMAT; 618 618 pj_assert(vfd->fps.num); 619 620 if (vp->cap_conv) { 621 /* Change the destination format to the new format */ 622 pjmedia_format_copy(&vp->cap_conv_param.src, 623 &vp->client_port->info.fmt); 624 /* Only copy the size here */ 625 vp->cap_conv_param.dst.det.vid.size = 626 vp->client_port->info.fmt.det.vid.size, 627 628 /* Recreate converter */ 629 pjmedia_converter_destroy(vp->cap_conv); 630 status = pjmedia_converter_create(NULL, vp->pool, 631 &vp->cap_conv_param, 632 &vp->cap_conv); 633 if (status != PJ_SUCCESS) { 634 PJ_PERROR(4,(THIS_FILE, status, "Error recreating converter")); 635 return status; 636 } 637 } 619 638 620 639 status = pjmedia_vid_dev_stream_set_cap( … … 628 647 status != PJMEDIA_EVID_ERR ? "success" : 629 648 "failure")); 630 pjmedia_vid_port_stop(vp);631 649 return status; 632 650 } … … 650 668 /* Notify application of the format change. */ 651 669 pevent.event_type = PJMEDIA_EVENT_FMT_CHANGED; 652 pj_memcpy(&pevent.event_desc.fmt_change.new_format,653 &vp->client_port->info.fmt, sizeof(pjmedia_format));670 pjmedia_format_copy(&pevent.event_desc.fmt_change.new_format, 671 &vp->client_port->info.fmt); 654 672 if (vp->strm_cb.on_event_cb) 655 673 (*vp->strm_cb.on_event_cb)(vp->strm, vp->strm_cb_data, &pevent); 674 675 pjmedia_vid_port_start(vp); 656 676 } 657 677
Note: See TracChangeset
for help on using the changeset viewer.