/* Internal: lookup device id */ static pj_status_t lookup_dev(pjmedia_aud_dev_index id, pjmedia_aud_dev_factory **p_f, unsigned *p_local_index) { int f_id, index; if (id < 0) { unsigned i; if (id == PJMEDIA_AUD_INVALID_DEV) return PJMEDIA_EAUD_INVDEV; for (i=0; i<aud_subsys.drv_cnt; ++i) { struct driver *drv = &aud_subsys.drv[i]; if (drv->dev_idx >= 0) { id = drv->dev_idx; make_global_index(i, &id); break; } else if (id==PJMEDIA_AUD_DEFAULT_CAPTURE_DEV && drv->rec_dev_idx >= 0) { id = drv->rec_dev_idx; make_global_index(i, &id); break; } else if (id==PJMEDIA_AUD_DEFAULT_PLAYBACK_DEV && drv->play_dev_idx >= 0) { id = drv->play_dev_idx; make_global_index(i, &id); break; } } if (id < 0) { return PJMEDIA_EAUD_NODEFDEV; } } f_id = GET_FID(aud_subsys.dev_list[id]); index = GET_INDEX(aud_subsys.dev_list[id]); if (f_id < 0 || f_id >= (int)aud_subsys.drv_cnt) return PJMEDIA_EAUD_INVDEV; if (index < 0 || index >= (int)aud_subsys.drv[f_id].dev_cnt) return PJMEDIA_EAUD_INVDEV; *p_f = aud_subsys.drv[f_id].f; *p_local_index = (unsigned)index; return PJ_SUCCESS; }
/* Internal: lookup device id */ static pj_status_t lookup_dev(pjmedia_vid_dev_index id, pjmedia_vid_dev_factory **p_f, unsigned *p_local_index) { int f_id, index; if (id < 0) { unsigned i; if (id <= PJMEDIA_VID_INVALID_DEV) return PJMEDIA_EVID_INVDEV; for (i=0; i<vid_subsys.drv_cnt; ++i) { pjmedia_vid_driver *drv = &vid_subsys.drv[i]; if (id==PJMEDIA_VID_DEFAULT_CAPTURE_DEV && drv->cap_dev_idx >= 0) { id = drv->cap_dev_idx; make_global_index(i, &id); break; } else if (id==PJMEDIA_VID_DEFAULT_RENDER_DEV && drv->rend_dev_idx >= 0) { id = drv->rend_dev_idx; make_global_index(i, &id); break; } } if (id < 0) { return PJMEDIA_EVID_NODEFDEV; } } f_id = GET_FID(vid_subsys.dev_list[id]); index = GET_INDEX(vid_subsys.dev_list[id]); if (f_id < 0 || f_id >= (int)vid_subsys.drv_cnt) return PJMEDIA_EVID_INVDEV; if (index < 0 || index >= (int)vid_subsys.drv[f_id].dev_cnt) return PJMEDIA_EVID_INVDEV; *p_f = vid_subsys.drv[f_id].f; *p_local_index = (unsigned)index; return PJ_SUCCESS; }