From 705a5aad8174993ca69db59c0fa9eb2098b60b21 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Tue, 18 Feb 2014 01:41:45 +0000 Subject: Fixed #1736: Update to bdSound's bdiMad audio device to support output routing. Thanks Andrea for the patch. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4748 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia-audiodev/bdimad_dev.c | 50 ++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'pjmedia') diff --git a/pjmedia/src/pjmedia-audiodev/bdimad_dev.c b/pjmedia/src/pjmedia-audiodev/bdimad_dev.c index d3eefe2d..697db2e5 100644 --- a/pjmedia/src/pjmedia-audiodev/bdimad_dev.c +++ b/pjmedia/src/pjmedia-audiodev/bdimad_dev.c @@ -318,7 +318,7 @@ static pj_status_t factory_refresh(pjmedia_aud_dev_factory *f) for(i=0;idev_info[captureDeviceCount+i].deviceId = captureDeviceCount+i; wf->dev_info[captureDeviceCount+i].info.caps = - PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING; + PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING | PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE; wf->dev_info[captureDeviceCount+i].info.default_samples_per_sec = BD_IMAD_DEFAULT_FREQ; strcpy(wf->dev_info[captureDeviceCount+i].info.driver, "BD_IMAD"); @@ -425,6 +425,10 @@ static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f, param->ec_enabled = PJ_TRUE; } + if(di->info.caps & PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE) { + param->output_route = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER; + } + return PJ_SUCCESS; } @@ -927,6 +931,18 @@ static pj_status_t stream_set_capBDIMAD(pjmedia_aud_stream *s, } } + if(cap == PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE) { + pjmedia_aud_dev_route outputRoute = *(pjmedia_aud_dev_route*)pval; + if(strm->param.output_route!=outputRoute) + res = bdIMADpj_setRouteOutputDevice(strm->bdIMADpjInstance, (bdIMADpj_out_dev_route) outputRoute, &strm->bdIMADpjWarningPtr); + if(res == BD_PJ_OK) { + strm->param.output_route = outputRoute; + return PJ_SUCCESS; + } else { + return PJMEDIA_AUDIODEV_ERRNO_FROM_BDIMAD(res); + } + } + return PJMEDIA_EAUD_INVCAP; } @@ -1011,6 +1027,12 @@ static pj_status_t factory_create_streamBDIMAD(pjmedia_aud_dev_factory *f, ¶m->ec_enabled); } + if(param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE) { + stream_set_capBDIMAD(&strm->base, + PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE, + ¶m->output_route); + } + strm->base.op = &stream_op; *p_aud_strm = &strm->base; @@ -1060,6 +1082,17 @@ static pj_status_t stream_get_param(pjmedia_aud_stream *s, { pi->flags |= PJMEDIA_AUD_DEV_CAP_EC; } + if(stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_EC, &pi->ec_enabled) == PJ_SUCCESS) + { + pi->flags |= PJMEDIA_AUD_DEV_CAP_EC; + } + + + // Get the Route Output Device setting + if(stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE, &pi->output_route) == PJ_SUCCESS) + { + pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE; + } return PJ_SUCCESS; } @@ -1113,6 +1146,16 @@ static pj_status_t stream_get_capBDIMAD(pjmedia_aud_stream *s, } else { return PJMEDIA_AUDIODEV_ERRNO_FROM_BDIMAD(res); } + } + else if(cap == PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE) { + pjmedia_aud_dev_route routeOutDev; + res = bdIMADpj_getRouteOutputDevice(strm->bdIMADpjInstance,(bdIMADpj_out_dev_route*)&routeOutDev); + if(res == BD_PJ_OK) { + *(pjmedia_aud_dev_route*)pval = routeOutDev; + return PJ_SUCCESS; + } else { + return PJMEDIA_AUDIODEV_ERRNO_FROM_BDIMAD(res); + } } else { return PJMEDIA_EAUD_INVCAP; } @@ -1176,9 +1219,14 @@ static pj_status_t stream_start(pjmedia_aud_stream *s) } #if defined (_MSC_VER) +#ifdef _DEBUG +#pragma comment ( lib, "bdClientValidationd.lib" ) +#pragma comment ( lib, "bdIMADpjd.lib" ) +#else #pragma comment ( lib, "bdClientValidation.lib" ) #pragma comment ( lib, "bdIMADpj.lib" ) #endif +#endif #endif /* PJMEDIA_AUDIO_DEV_HAS_BDIMAD */ -- cgit v1.2.3