summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2015-03-19 04:10:11 +0000
committerNanang Izzuddin <nanang@teluu.com>2015-03-19 04:10:11 +0000
commitb1716174e6896d04fc6229952567223743be7fbd (patch)
tree6d1b14712cfc191c8eb39556626ebaafaf804fdd /pjmedia
parentd1a26ccd59251d2e42edd4019fad40e87b1365fc (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.c21
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);
}