Re #1213:
- Added encoding format conversion (only format ID) in video port.
- Fixed few bugs in direct show capture device:
- VIDEOINFOHEADER.AvgTimePerFrame calculation overflow which caused failure in opening capture device.
- AM_MEDIA_TYPE.formattype validation to avoid bad type casting (of VIDEOINFOHEADER).
git-svn-id: https://svn.pjsip.org/repos/pjproject/branches/projects/2.0-dev@3470 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjmedia/src/pjmedia-videodev/dshow_dev.c b/pjmedia/src/pjmedia-videodev/dshow_dev.c
index 5a8ce81..7dd2b9d 100644
--- a/pjmedia/src/pjmedia-videodev/dshow_dev.c
+++ b/pjmedia/src/pjmedia-videodev/dshow_dev.c
@@ -610,7 +610,7 @@
&icount, &isize);
for (i = 0; i < icount; i++) {
- RPC_STATUS rpcstatus;
+ RPC_STATUS rpcstatus, rpcstatus2;
hr = IAMStreamConfig_GetStreamCaps(streamcaps, i,
&mediatype,
@@ -618,14 +618,18 @@
if (FAILED (hr))
continue;
- if (UuidCompare(&mediatype->subtype,
- (UUID *)dshow_format,
- &rpcstatus) == 0 &&
- rpcstatus == RPC_S_OK)
+ if (UuidCompare(&mediatype->subtype,
+ (UUID*)dshow_format,
+ &rpcstatus) == 0 &&
+ rpcstatus == RPC_S_OK &&
+ UuidCompare(&mediatype->formattype,
+ (UUID*)&FORMAT_VideoInfo,
+ &rpcstatus2) == 0 &&
+ rpcstatus2 == RPC_S_OK)
{
srcpin = pPin;
graph->mediatype = mediatype;
- break;
+ break;
}
}
IAMStreamConfig_Release(streamcaps);
@@ -673,8 +677,8 @@
video_info->bmiHeader.biHeight = vfd->size.h;
if (vfd->fps.num != 0)
video_info->AvgTimePerFrame = (LONGLONG) (10000000 *
- vfd->fps.denum /
- (double)vfd->fps.num);
+ (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)