| Index: media/capture/video/win/sink_input_pin_win.cc
|
| diff --git a/media/capture/video/win/sink_input_pin_win.cc b/media/capture/video/win/sink_input_pin_win.cc
|
| index 9c515a3422e722790a7cfc051d8ff9150e91bdaf..23c35da80d6f32c8f0900befd44ad48e235405f6 100644
|
| --- a/media/capture/video/win/sink_input_pin_win.cc
|
| +++ b/media/capture/video/win/sink_input_pin_win.cc
|
| @@ -41,16 +41,16 @@ const VideoCaptureFormat& SinkInputPin::ResultingFormat() {
|
| }
|
|
|
| bool SinkInputPin::IsMediaTypeValid(const AM_MEDIA_TYPE* media_type) {
|
| - GUID type = media_type->majortype;
|
| + const GUID type = media_type->majortype;
|
| if (type != MEDIATYPE_Video)
|
| return false;
|
|
|
| - GUID format_type = media_type->formattype;
|
| + const GUID format_type = media_type->formattype;
|
| if (format_type != FORMAT_VideoInfo)
|
| return false;
|
|
|
| // Check for the sub types we support.
|
| - GUID sub_type = media_type->subtype;
|
| + const GUID sub_type = media_type->subtype;
|
| VIDEOINFOHEADER* pvi =
|
| reinterpret_cast<VIDEOINFOHEADER*>(media_type->pbFormat);
|
| if (pvi == NULL)
|
| @@ -75,6 +75,12 @@ bool SinkInputPin::IsMediaTypeValid(const AM_MEDIA_TYPE* media_type) {
|
| resulting_format_.pixel_format = PIXEL_FORMAT_YUY2;
|
| return true;
|
| }
|
| + // This format is added after http:/crbug.com/508413.
|
| + if (sub_type == MEDIASUBTYPE_UYVY &&
|
| + pvi->bmiHeader.biCompression == MAKEFOURCC('U', 'Y', 'V', 'Y')) {
|
| + resulting_format_.pixel_format = PIXEL_FORMAT_UYVY;
|
| + return true;
|
| + }
|
| if (sub_type == MEDIASUBTYPE_MJPG &&
|
| pvi->bmiHeader.biCompression == MAKEFOURCC('M', 'J', 'P', 'G')) {
|
| resulting_format_.pixel_format = PIXEL_FORMAT_MJPEG;
|
| @@ -90,6 +96,12 @@ bool SinkInputPin::IsMediaTypeValid(const AM_MEDIA_TYPE* media_type) {
|
| resulting_format_.pixel_format = PIXEL_FORMAT_RGB32;
|
| return true;
|
| }
|
| +
|
| +#ifndef NDEBUG
|
| + WCHAR guid_str[128];
|
| + StringFromGUID2(sub_type, guid_str, arraysize(guid_str));
|
| + DVLOG(2) << __FUNCTION__ << " unsupported media type: " << guid_str;
|
| +#endif
|
| return false;
|
| }
|
|
|
| @@ -97,7 +109,7 @@ bool SinkInputPin::GetValidMediaType(int index, AM_MEDIA_TYPE* media_type) {
|
| if (media_type->cbFormat < sizeof(VIDEOINFOHEADER))
|
| return false;
|
|
|
| - VIDEOINFOHEADER* pvi =
|
| + VIDEOINFOHEADER* const pvi =
|
| reinterpret_cast<VIDEOINFOHEADER*>(media_type->pbFormat);
|
|
|
| ZeroMemory(pvi, sizeof(VIDEOINFOHEADER));
|
| @@ -105,9 +117,8 @@ bool SinkInputPin::GetValidMediaType(int index, AM_MEDIA_TYPE* media_type) {
|
| pvi->bmiHeader.biPlanes = 1;
|
| pvi->bmiHeader.biClrImportant = 0;
|
| pvi->bmiHeader.biClrUsed = 0;
|
| - if (requested_frame_rate_ > 0) {
|
| + if (requested_frame_rate_ > 0)
|
| pvi->AvgTimePerFrame = kSecondsToReferenceTime / requested_frame_rate_;
|
| - }
|
|
|
| media_type->majortype = MEDIATYPE_Video;
|
| media_type->formattype = FORMAT_VideoInfo;
|
| @@ -144,6 +155,15 @@ bool SinkInputPin::GetValidMediaType(int index, AM_MEDIA_TYPE* media_type) {
|
| break;
|
| }
|
| case 2: {
|
| + pvi->bmiHeader.biCompression = MAKEFOURCC('U', 'Y', 'V', 'Y');
|
| + pvi->bmiHeader.biBitCount = 16;
|
| + pvi->bmiHeader.biWidth = requested_info_header_.biWidth;
|
| + pvi->bmiHeader.biHeight = requested_info_header_.biHeight;
|
| + pvi->bmiHeader.biSizeImage = GetArea(requested_info_header_) * 2;
|
| + media_type->subtype = MEDIASUBTYPE_UYVY;
|
| + break;
|
| + }
|
| + case 3: {
|
| pvi->bmiHeader.biCompression = BI_RGB;
|
| pvi->bmiHeader.biBitCount = 24;
|
| pvi->bmiHeader.biWidth = requested_info_header_.biWidth;
|
| @@ -152,7 +172,7 @@ bool SinkInputPin::GetValidMediaType(int index, AM_MEDIA_TYPE* media_type) {
|
| media_type->subtype = MEDIASUBTYPE_RGB24;
|
| break;
|
| }
|
| - case 3: {
|
| + case 4: {
|
| pvi->bmiHeader.biCompression = BI_RGB;
|
| pvi->bmiHeader.biBitCount = 32;
|
| pvi->bmiHeader.biWidth = requested_info_header_.biWidth;
|
|
|