| Index: media/video/capture/win/video_capture_device_mf_win.cc
|
| diff --git a/media/video/capture/win/video_capture_device_mf_win.cc b/media/video/capture/win/video_capture_device_mf_win.cc
|
| index 2fa25dba0f69a0009e19237eec4938ee0ca47a45..a222d1ce3b1eda14e526b0be3e841b8105800110 100644
|
| --- a/media/video/capture/win/video_capture_device_mf_win.cc
|
| +++ b/media/video/capture/win/video_capture_device_mf_win.cc
|
| @@ -34,34 +34,26 @@ static bool GetFrameSize(IMFMediaType* type, gfx::Size* frame_size) {
|
| return true;
|
| }
|
|
|
| -static bool GetFrameRate(IMFMediaType* type,
|
| - int* frame_rate_numerator,
|
| - int* frame_rate_denominator) {
|
| +static bool GetFrameRate(IMFMediaType* type, float* frame_rate) {
|
| UINT32 numerator, denominator;
|
| if (FAILED(MFGetAttributeRatio(type, MF_MT_FRAME_RATE, &numerator,
|
| &denominator))||
|
| !denominator) {
|
| return false;
|
| }
|
| - *frame_rate_numerator = numerator;
|
| - *frame_rate_denominator = denominator;
|
| + *frame_rate = static_cast<float>(numerator) / denominator;
|
| return true;
|
| }
|
|
|
| -static bool FillCapabilitiesFromType(IMFMediaType* type,
|
| - VideoCaptureCapabilityWin* capability) {
|
| +static bool FillFormat(IMFMediaType* type, VideoCaptureFormat* format) {
|
| GUID type_guid;
|
| if (FAILED(type->GetGUID(MF_MT_SUBTYPE, &type_guid)) ||
|
| - !GetFrameSize(type, &capability->supported_format.frame_size) ||
|
| - !GetFrameRate(type,
|
| - &capability->frame_rate_numerator,
|
| - &capability->frame_rate_denominator) ||
|
| + !GetFrameSize(type, &format->frame_size) ||
|
| + !GetFrameRate(type, &format->frame_rate) ||
|
| !VideoCaptureDeviceMFWin::FormatFromGuid(type_guid,
|
| - &capability->supported_format.pixel_format)) {
|
| + &format->pixel_format)) {
|
| return false;
|
| }
|
| - capability->supported_format.frame_rate =
|
| - capability->frame_rate_numerator / capability->frame_rate_denominator;
|
|
|
| return true;
|
| }
|
| @@ -71,15 +63,13 @@ HRESULT FillCapabilities(IMFSourceReader* source,
|
| DWORD stream_index = 0;
|
| ScopedComPtr<IMFMediaType> type;
|
| HRESULT hr;
|
| - for (hr = source->GetNativeMediaType(kFirstVideoStream, stream_index,
|
| - type.Receive());
|
| - SUCCEEDED(hr);
|
| - hr = source->GetNativeMediaType(kFirstVideoStream, stream_index,
|
| - type.Receive())) {
|
| - VideoCaptureCapabilityWin capability(stream_index++);
|
| - if (FillCapabilitiesFromType(type, &capability))
|
| - capabilities->Add(capability);
|
| + while (SUCCEEDED(hr = source->GetNativeMediaType(
|
| + kFirstVideoStream, stream_index, type.Receive()))) {
|
| + VideoCaptureFormat format;
|
| + if (FillFormat(type, &format))
|
| + capabilities->emplace_back(stream_index, format);
|
| type.Release();
|
| + ++stream_index;
|
| }
|
|
|
| if (capabilities->empty() && (SUCCEEDED(hr) || hr == MF_E_NO_MORE_TYPES))
|
| @@ -251,12 +241,8 @@ void VideoCaptureDeviceMFWin::AllocateAndStart(
|
| if (reader_) {
|
| hr = FillCapabilities(reader_, &capabilities);
|
| if (SUCCEEDED(hr)) {
|
| - VideoCaptureCapabilityWin found_capability =
|
| - capabilities.GetBestMatchedFormat(
|
| - params.requested_format.frame_size.width(),
|
| - params.requested_format.frame_size.height(),
|
| - params.requested_format.frame_rate);
|
| -
|
| + const CapabilityWin found_capability =
|
| + GetBestMatchedCapability(params.requested_format, capabilities);
|
| ScopedComPtr<IMFMediaType> type;
|
| hr = reader_->GetNativeMediaType(
|
| kFirstVideoStream, found_capability.stream_index, type.Receive());
|
|
|