diff --git a/pjmedia/src/pjmedia-videodev/v4l2_dev.c b/pjmedia/src/pjmedia-videodev/v4l2_dev.c index 9d4a8d55aa..3f7da2b188 100644 --- a/pjmedia/src/pjmedia-videodev/v4l2_dev.c +++ b/pjmedia/src/pjmedia-videodev/v4l2_dev.c @@ -279,16 +279,16 @@ static pj_status_t v4l2_scan_devs(vid4lin_factory *f) { vid4lin_dev_info vdi[V4L2_MAX_DEVS]; char dev_name[32]; - unsigned i, old_count; + unsigned i; pj_status_t status; if (f->dev_pool) { pj_pool_release(f->dev_pool); f->dev_pool = NULL; + f->dev_info = NULL; } pj_bzero(vdi, sizeof(vdi)); - old_count = f->dev_count; f->dev_count = 0; f->dev_pool = pj_pool_create(f->pf, DRIVER_NAME, 500, 500, NULL); @@ -368,7 +368,7 @@ static pj_status_t v4l2_scan_devs(vid4lin_factory *f) v4l2_close(fd); - if (j < fmt_cnt) + if (pdi->info.fmt_cnt == 0) continue; f->dev_count++; @@ -377,12 +377,11 @@ static pj_status_t v4l2_scan_devs(vid4lin_factory *f) if (f->dev_count == 0) return PJ_SUCCESS; - if (f->dev_count > old_count || f->dev_info == NULL) { - f->dev_info = (vid4lin_dev_info*) - pj_pool_calloc(f->dev_pool, - f->dev_count, - sizeof(vid4lin_dev_info)); - } + f->dev_info = (vid4lin_dev_info*) + pj_pool_calloc(f->dev_pool, + f->dev_count, + sizeof(vid4lin_dev_info)); + pj_memcpy(f->dev_info, vdi, f->dev_count * sizeof(vid4lin_dev_info)); return PJ_SUCCESS;