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 f4007fab81283da8033f5668ad8e9e6a6db2813d..ce20fde98b365d4f307e725547c10bd669bb5969 100644 |
--- a/media/video/capture/win/video_capture_device_mf_win.cc |
+++ b/media/video/capture/win/video_capture_device_mf_win.cc |
@@ -286,6 +286,60 @@ void VideoCaptureDeviceMFWin::GetDeviceNames(Names* device_names) { |
} |
} |
+//static |
tommi (sloooow) - chröme
2014/01/30 13:25:17
// static
mcasas
2014/01/30 16:29:23
Done.
|
+void VideoCaptureDeviceMFWin::GetDeviceSupportedFormats(const Name& device, |
+ VideoCaptureFormats* formats) { |
+ |
+ ScopedComPtr<IMFMediaSource> source; |
+ if (!CreateVideoCaptureDevice(device.id().c_str(), source.Receive())) |
+ return; |
+ |
+ HRESULT hr; |
+ base::win::ScopedComPtr<IMFSourceReader> reader; |
+ if (!SUCCEEDED(hr = MFCreateSourceReaderFromMediaSource(source, NULL, |
tommi (sloooow) - chröme
2014/01/30 13:25:17
instead of "if (!SUCCEEDED" use "if (FAILED"
mcasas
2014/01/30 16:29:23
Done.
|
+ reader.Receive()))) { |
+ DLOG(WARNING) << "MFCreateSourceReaderFromMediaSource: " << std::hex << hr; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
you must bail out at this point. If MFCreateSourc
mcasas
2014/01/30 16:29:23
Done.
|
+ } |
+ |
+ DWORD stream_index = 0; |
+ ScopedComPtr<IMFMediaType> type; |
+ GUID type_guid; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
For these variable definitions (type_guid, width,
mcasas
2014/01/30 16:29:23
Moved closest to their use.
|
+ UINT32 width, height, numerator, denominator; |
+ while (SUCCEEDED(hr = reader->GetNativeMediaType( |
+ MF_SOURCE_READER_FIRST_VIDEO_STREAM, stream_index, type.Receive()))) { |
tommi (sloooow) - chröme
2014/01/30 13:25:17
strange indent
mcasas
2014/01/30 16:29:23
Done.
|
+ |
tommi (sloooow) - chröme
2014/01/30 13:25:17
remove empty line.
mcasas
2014/01/30 16:29:23
Done.
|
+ VideoCaptureFormat capture_format; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
define this variable where you need it (smallest s
|
+ |
+ if (FAILED(hr = MFGetAttributeSize( |
+ type, MF_MT_FRAME_SIZE, &width, &height))) { |
tommi (sloooow) - chröme
2014/01/30 13:25:17
I would prefer to format this as:
if (FAILED(
mcasas
2014/01/30 16:29:23
Done.
|
+ DLOG(WARNING) << "MFGetAttributeSize: " << std::hex << hr; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
DLOG(ERROR)
mcasas
2014/01/30 16:29:23
Done.
|
+ return; |
+ } |
+ capture_format.frame_size.SetSize(width, height); |
+ if (FAILED(hr = MFGetAttributeRatio( |
+ type, MF_MT_FRAME_RATE, &numerator, &denominator))) { |
+ DLOG(WARNING) << "MFGetAttributeSize: " << std::hex << hr; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
DLOG(ERROR)
mcasas
2014/01/30 16:29:23
Done.
|
+ return; |
+ } |
+ capture_format.frame_rate = denominator ? numerator/denominator : 0; |
+ |
+ if (FAILED(hr = type->GetGUID(MF_MT_SUBTYPE, &type_guid))) { |
+ DLOG(WARNING) << "GetGUID: " << std::hex << hr; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
DLOG(ERROR)
mcasas
2014/01/30 16:29:23
Done.
|
+ return; |
+ } |
+ FormatFromGuid(type_guid, &capture_format.pixel_format); |
+ type.Release(); |
+ formats->push_back(capture_format); |
+ stream_index++; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
nit: ++stream_index;
mcasas
2014/01/30 16:29:23
Done.
|
+ |
+ DVLOG(1) << device.name() << " resolution: " |
+ << capture_format.frame_size.ToString() << ", fps: " |
+ << capture_format.frame_rate << ", pixel format: " |
+ << capture_format.pixel_format; |
+ } |
+ return; |
tommi (sloooow) - chröme
2014/01/30 13:25:17
remove
mcasas
2014/01/30 16:29:23
Done.
|
+} |
+ |
const std::string VideoCaptureDevice::Name::GetModel() const { |
const size_t vid_prefix_size = sizeof(kVidPrefix) - 1; |
const size_t pid_prefix_size = sizeof(kPidPrefix) - 1; |