Index: content/browser/renderer_host/media/video_capture_manager.cc |
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc |
index d83a3bfb9e8b89e214cbb8f98ffabb31011447b9..9a9434087cb7ea68b47aaf70a720f6fde810ce98 100644 |
--- a/content/browser/renderer_host/media/video_capture_manager.cc |
+++ b/content/browser/renderer_host/media/video_capture_manager.cc |
@@ -61,7 +61,11 @@ bool IsCaptureFormatSmaller(const media::VideoCaptureFormat& format1, |
DCHECK(format2.frame_size.GetCheckedArea().IsValid()); |
if (format1.frame_size.GetCheckedArea().ValueOrDefault(0) == |
format2.frame_size.GetCheckedArea().ValueOrDefault(0)) { |
- return format1.frame_rate > format2.frame_rate; |
+ return format1.frame_rate > format2.frame_rate || |
+ // Prefer Y16 capture format for the same frame rate. |
+ // This is workaround for e.g. Realsense R200 IR stream. |
+ (format1.frame_rate == format2.frame_rate && |
+ (format2.pixel_format != media::PIXEL_FORMAT_Y16)); |
} |
return format1.frame_size.GetCheckedArea().ValueOrDefault(0) < |
format2.frame_size.GetCheckedArea().ValueOrDefault(0); |
@@ -89,9 +93,11 @@ void ConsolidateCaptureFormats(media::VideoCaptureFormats* formats) { |
formats->erase(last, formats->end()); |
// Mark all formats as I420, since this is what the renderer side will get |
// anyhow: the actual pixel format is decided at the device level. |
+ // Don't do this for Y16 format as it is handled separatelly. |
for (media::VideoCaptureFormats::iterator it = formats->begin(); |
it != formats->end(); ++it) { |
- it->pixel_format = media::PIXEL_FORMAT_I420; |
+ if (it->pixel_format != media::PIXEL_FORMAT_Y16) |
+ it->pixel_format = media::PIXEL_FORMAT_I420; |
} |
} |