summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2012-02-16 08:49:33 +0000
committerLiong Sauw Ming <ming@teluu.com>2012-02-16 08:49:33 +0000
commiteb474f0faf3230615b9e3eb41ec0db87748587b9 (patch)
treec4e2d22c9853f4ebeee4268622cc7c04613ceae9
parent179b34d76adc548f6e4517eef03da8dec228a5a5 (diff)
Re 1446#: Fix division by zero error caused by DShow if video device does not supply AvgTimePerFrame information (AvgTimePerFrame=0).
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3953 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia-videodev/dshow_dev.c5
-rw-r--r--pjmedia/src/pjmedia/format.c1
2 files changed, 5 insertions, 1 deletions
diff --git a/pjmedia/src/pjmedia-videodev/dshow_dev.c b/pjmedia/src/pjmedia-videodev/dshow_dev.c
index 30fd0ccb..85a1375d 100644
--- a/pjmedia/src/pjmedia-videodev/dshow_dev.c
+++ b/pjmedia/src/pjmedia-videodev/dshow_dev.c
@@ -769,10 +769,13 @@ static pj_status_t create_filter_graph(pjmedia_dir dir,
video_info->bmiHeader.biWidth = vfd->size.w;
video_info->bmiHeader.biHeight = vfd->size.h;
}
- if (!use_def_fps && vfd->fps.num != 0)
+ if (video_info->AvgTimePerFrame == 0 ||
+ (!use_def_fps && vfd->fps.num != 0))
+ {
video_info->AvgTimePerFrame = (LONGLONG) (10000000 *
(double)vfd->fps.denum /
vfd->fps.num);
+ }
video_info->bmiHeader.biSizeImage = DIBSIZE(video_info->bmiHeader);
mediatype->lSampleSize = DIBSIZE(video_info->bmiHeader);
if (graph->csource_filter)
diff --git a/pjmedia/src/pjmedia/format.c b/pjmedia/src/pjmedia/format.c
index a2f3df04..54fd4dba 100644
--- a/pjmedia/src/pjmedia/format.c
+++ b/pjmedia/src/pjmedia/format.c
@@ -113,6 +113,7 @@ PJ_DEF(void) pjmedia_format_init_video( pjmedia_format *fmt,
unsigned fps_num,
unsigned fps_denum)
{
+ pj_assert(fps_denum);
fmt->id = fmt_id;
fmt->type = PJMEDIA_TYPE_VIDEO;
fmt->detail_type = PJMEDIA_FORMAT_DETAIL_VIDEO;