- Timestamp:
- Jun 21, 2011 9:33:01 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/2.0-dev/pjmedia/src/pjmedia-videodev/dshow_dev.c
r3582 r3592 83 83 pjmedia_vid_dev_factory base; 84 84 pj_pool_t *pool; 85 pj_pool_t *dev_pool; 85 86 pj_pool_factory *pf; 86 87 … … 124 125 static pj_status_t dshow_factory_init(pjmedia_vid_dev_factory *f); 125 126 static pj_status_t dshow_factory_destroy(pjmedia_vid_dev_factory *f); 127 static pj_status_t dshow_factory_refresh(pjmedia_vid_dev_factory *f); 126 128 static unsigned dshow_factory_get_dev_count(pjmedia_vid_dev_factory *f); 127 129 static pj_status_t dshow_factory_get_dev_info(pjmedia_vid_dev_factory *f, … … 161 163 &dshow_factory_get_dev_info, 162 164 &dshow_factory_default_param, 163 &dshow_factory_create_stream 165 &dshow_factory_create_stream, 166 &dshow_factory_refresh 164 167 }; 165 168 … … 200 203 static pj_status_t dshow_factory_init(pjmedia_vid_dev_factory *f) 201 204 { 205 CoInitializeEx(NULL, COINIT_MULTITHREADED); 206 207 return dshow_factory_refresh(f); 208 } 209 210 /* API: destroy factory */ 211 static pj_status_t dshow_factory_destroy(pjmedia_vid_dev_factory *f) 212 { 213 struct dshow_factory *df = (struct dshow_factory*)f; 214 pj_pool_t *pool = df->pool; 215 216 df->pool = NULL; 217 if (df->dev_pool) 218 pj_pool_release(df->dev_pool); 219 if (pool) 220 pj_pool_release(pool); 221 222 CoUninitialize(); 223 224 return PJ_SUCCESS; 225 } 226 227 /* API: refresh the list of devices */ 228 static pj_status_t dshow_factory_refresh(pjmedia_vid_dev_factory *f) 229 { 202 230 struct dshow_factory *df = (struct dshow_factory*)f; 203 231 struct dshow_dev_info *ddi; … … 210 238 ULONG fetched; 211 239 240 if (df->dev_pool) { 241 pj_pool_release(df->dev_pool); 242 df->dev_pool = NULL; 243 } 244 212 245 df->dev_count = 0; 213 214 CoInitializeEx(NULL, COINIT_MULTITHREADED); 246 df->dev_pool = pj_pool_create(df->pf, "dshow video", 500, 500, NULL); 215 247 216 248 hr = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, … … 234 266 dev_count += 1; 235 267 df->dev_info = (struct dshow_dev_info*) 236 pj_pool_calloc(df-> pool, dev_count,268 pj_pool_calloc(df->dev_pool, dev_count, 237 269 sizeof(struct dshow_dev_info)); 238 270 … … 305 337 ddi->info.fmt_cnt = sizeof(dshow_fmts)/sizeof(dshow_fmts[0]); 306 338 ddi->info.fmt = (pjmedia_format*) 307 pj_pool_calloc(df-> pool, ddi->info.fmt_cnt,339 pj_pool_calloc(df->dev_pool, ddi->info.fmt_cnt, 308 340 sizeof(pjmedia_format)); 309 341 … … 322 354 // ddi->info.caps = PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW; 323 355 324 PJ_LOG(4, (THIS_FILE, "DShow initialized, found%d devices:",356 PJ_LOG(4, (THIS_FILE, "DShow has %d devices:", 325 357 df->dev_count)); 326 358 for (c = 0; c < df->dev_count; ++c) { … … 331 363 "capture" : "render")); 332 364 } 333 334 return PJ_SUCCESS;335 }336 337 /* API: destroy factory */338 static pj_status_t dshow_factory_destroy(pjmedia_vid_dev_factory *f)339 {340 struct dshow_factory *df = (struct dshow_factory*)f;341 pj_pool_t *pool = df->pool;342 343 df->pool = NULL;344 pj_pool_release(pool);345 346 CoUninitialize();347 365 348 366 return PJ_SUCCESS;
Note: See TracChangeset
for help on using the changeset viewer.