diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2015-03-19 04:10:11 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2015-03-19 04:10:11 +0000 |
commit | b1716174e6896d04fc6229952567223743be7fbd (patch) | |
tree | 6d1b14712cfc191c8eb39556626ebaafaf804fdd /pjmedia | |
parent | d1a26ccd59251d2e42edd4019fad40e87b1365fc (diff) |
Fixed #1824: Convert global index to local index for fast-switching feature of video capture device.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4998 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/src/pjmedia-videodev/videodev.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia-videodev/videodev.c b/pjmedia/src/pjmedia-videodev/videodev.c index 2b705303..185f2171 100644 --- a/pjmedia/src/pjmedia-videodev/videodev.c +++ b/pjmedia/src/pjmedia-videodev/videodev.c @@ -835,6 +835,27 @@ PJ_DEF(pj_status_t) pjmedia_vid_dev_stream_set_cap( pjmedia_vid_dev_cap cap, const void *value) { + /* For fast switching, device global index needs to be converted to + * local index before forwarding the request to the device stream. + */ + if (cap == PJMEDIA_VID_DEV_CAP_SWITCH) { + pjmedia_vid_dev_factory *f; + unsigned local_idx; + pj_status_t status; + pjmedia_vid_dev_switch_param p = *(pjmedia_vid_dev_switch_param*)value; + + status = lookup_dev(p.target_id, &f, &local_idx); + if (status != PJ_SUCCESS) + return status; + + /* Make sure that current & target devices share the same factory */ + if (f->sys.drv_idx != strm->sys.drv_idx) + return PJMEDIA_EVID_INVDEV; + + p.target_id = local_idx; + return strm->op->set_cap(strm, cap, &p); + } + return strm->op->set_cap(strm, cap, value); } |