summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorRiza Sulistyo <riza@teluu.com>2014-10-17 03:47:40 +0000
committerRiza Sulistyo <riza@teluu.com>2014-10-17 03:47:40 +0000
commit3d8dc80ea8cc9ee8ae686cea287bb6920756531d (patch)
treee0cbef9b3c3cc49102987e9a91f810106cead11c /pjmedia
parent6f4d1aef513bacc0e82e650a5c32301e3aa1fb4a (diff)
Misc (re #1782): Fixed initialize Dshow failed when the COM library already initialized.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4951 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia-videodev/dshow_dev.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/pjmedia/src/pjmedia-videodev/dshow_dev.c b/pjmedia/src/pjmedia-videodev/dshow_dev.c
index 2c57722f..7b4dd3a0 100644
--- a/pjmedia/src/pjmedia-videodev/dshow_dev.c
+++ b/pjmedia/src/pjmedia-videodev/dshow_dev.c
@@ -214,11 +214,18 @@ pjmedia_vid_dev_factory* pjmedia_dshow_factory(pj_pool_factory *pf)
static pj_status_t dshow_factory_init(pjmedia_vid_dev_factory *f)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
- if (hr == RPC_E_CHANGED_MODE) {
- PJ_LOG(4,(THIS_FILE, "Failed initializing DShow: "
- "COM library already initialized with "
- "incompatible concurrency model"));
- return PJMEDIA_EVID_INIT;
+ if (hr == RPC_E_CHANGED_MODE) {
+ /* When using apartment mode, Dshow object would not be accessible from
+ * other thread. Take this into consideration when implementing native
+ * renderer using Dshow.
+ */
+ hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+ if (FAILED(hr)) {
+ PJ_LOG(4,(THIS_FILE, "Failed initializing DShow: "
+ "COM library already initialized with "
+ "incompatible concurrency model"));
+ return PJMEDIA_EVID_INIT;
+ }
}
return dshow_factory_refresh(f);