// ---- VIDEO STUFF ---- // pj_status_t vid_set_stream_window(pjsua_call_media* call_med, pjmedia_dir dir, void* window){ pj_status_t status = PJ_ENOTFOUND; pjsua_vid_win *w = NULL; pjsua_vid_win_id wid; pjmedia_vid_dev_stream *dev; // We are looking for a rendering video dev if (call_med->type == PJMEDIA_TYPE_VIDEO && (call_med->dir & dir)) { const char* dirName = (dir == PJMEDIA_DIR_RENDER) ? "render" : "capture"; PJ_LOG(4, (THIS_FILE, "Has video %s media...", dirName)); wid = (dir == PJMEDIA_DIR_RENDER) ? call_med->strm.v.rdr_win_id : call_med->strm.v.cap_win_id; w = &pjsua_var.win[wid]; // Make sure we have a render dev if (w) { dev = pjmedia_vid_port_get_stream( (dir == PJMEDIA_DIR_RENDER) ? w->vp_rend : w->vp_cap); if (dev) { status = pjmedia_vid_dev_stream_set_cap(dev, PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW, (void*) window); PJ_LOG(4, (THIS_FILE, "Set %s window >> %x - %x", dirName, dev, window)); } } } return status; }
static pj_status_t codec_on_event(pjmedia_event *event, void *user_data) { codec_port_data_t *port_data = (codec_port_data_t*)user_data; if (event->type == PJMEDIA_EVENT_FMT_CHANGED) { pjmedia_vid_codec *codec = port_data->codec; pjmedia_vid_codec_param codec_param; pj_status_t status; status = pjmedia_vid_codec_get_param(codec, &codec_param); if (status != PJ_SUCCESS) return status; status = pjmedia_vid_dev_stream_set_cap( pjmedia_vid_port_get_stream(port_data->rdr_port), PJMEDIA_VID_DEV_CAP_FORMAT, &codec_param.dec_fmt); if (status != PJ_SUCCESS) return status; } return PJ_SUCCESS; }