| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/logging.h" | 5 #include "services/video_capture/mojo_media_conversions.h" |
| 6 #include "services/video_capture/device_client_mojo_to_media_adapter.h" | |
| 7 #include "services/video_capture/video_capture_device_proxy_impl.h" | |
| 8 | 6 |
| 9 namespace video_capture { | 7 namespace video_capture { |
| 10 | 8 |
| 11 VideoCaptureDeviceProxyImpl::VideoCaptureDeviceProxyImpl( | 9 media::VideoCaptureFormat ConvertFromMojoToMedia( |
| 12 std::unique_ptr<media::VideoCaptureDevice> device) | |
| 13 : device_(std::move(device)) {} | |
| 14 | |
| 15 VideoCaptureDeviceProxyImpl::~VideoCaptureDeviceProxyImpl() { | |
| 16 if (device_running_) | |
| 17 device_->StopAndDeAllocate(); | |
| 18 } | |
| 19 | |
| 20 void VideoCaptureDeviceProxyImpl::Start( | |
| 21 mojom::VideoCaptureFormatPtr requested_format, | |
| 22 mojom::ResolutionChangePolicy resolution_change_policy, | |
| 23 mojom::PowerLineFrequency power_line_frequency, | |
| 24 mojom::VideoCaptureDeviceClientPtr client) { | |
| 25 media::VideoCaptureParams params; | |
| 26 params.requested_format = ConvertFromMojoToMedia(std::move(requested_format)); | |
| 27 params.resolution_change_policy = | |
| 28 ConvertFromMojoToMedia(resolution_change_policy); | |
| 29 params.power_line_frequency = ConvertFromMojoToMedia(power_line_frequency); | |
| 30 client.set_connection_error_handler( | |
| 31 base::Bind(&VideoCaptureDeviceProxyImpl::OnClientConnectionErrorOrClose, | |
| 32 base::Unretained(this))); | |
| 33 auto media_client = | |
| 34 base::MakeUnique<DeviceClientMojoToMediaAdapter>(std::move(client)); | |
| 35 device_->AllocateAndStart(params, std::move(media_client)); | |
| 36 device_running_ = true; | |
| 37 } | |
| 38 | |
| 39 void VideoCaptureDeviceProxyImpl::Stop() { | |
| 40 device_->StopAndDeAllocate(); | |
| 41 device_running_ = false; | |
| 42 } | |
| 43 | |
| 44 void VideoCaptureDeviceProxyImpl::OnClientConnectionErrorOrClose() { | |
| 45 device_->StopAndDeAllocate(); | |
| 46 } | |
| 47 | |
| 48 // static | |
| 49 media::VideoCaptureFormat VideoCaptureDeviceProxyImpl::ConvertFromMojoToMedia( | |
| 50 mojom::VideoCaptureFormatPtr format) { | 10 mojom::VideoCaptureFormatPtr format) { |
| 51 media::VideoCaptureFormat result; | 11 media::VideoCaptureFormat result; |
| 52 result.pixel_format = ConvertFromMojoToMedia(format->pixel_format); | 12 result.pixel_format = ConvertFromMojoToMedia(format->pixel_format); |
| 53 result.pixel_storage = ConvertFromMojoToMedia(format->pixel_storage); | 13 result.pixel_storage = ConvertFromMojoToMedia(format->pixel_storage); |
| 54 result.frame_size.SetSize(format->frame_size.width(), | 14 result.frame_size.SetSize(format->frame_size.width(), |
| 55 format->frame_size.height()); | 15 format->frame_size.height()); |
| 56 result.frame_rate = format->frame_rate; | 16 result.frame_rate = format->frame_rate; |
| 57 return result; | 17 return result; |
| 58 } | 18 } |
| 59 | 19 |
| 60 // static | 20 media::VideoPixelFormat ConvertFromMojoToMedia( |
| 61 media::VideoPixelFormat VideoCaptureDeviceProxyImpl::ConvertFromMojoToMedia( | |
| 62 media::mojom::VideoFormat format) { | 21 media::mojom::VideoFormat format) { |
| 63 // Since there are static_asserts in place in | 22 // Since there are static_asserts in place in |
| 64 // media/mojo/common/media_type_converters.cc to guarantee equality of the | 23 // media/mojo/common/media_type_converters.cc to guarantee equality of the |
| 65 // underlying representations, we can simply static_cast to convert. | 24 // underlying representations, we can simply static_cast to convert. |
| 66 return static_cast<media::VideoPixelFormat>(format); | 25 return static_cast<media::VideoPixelFormat>(format); |
| 67 } | 26 } |
| 68 | 27 |
| 69 // static | 28 media::VideoPixelStorage ConvertFromMojoToMedia( |
| 70 media::VideoPixelStorage VideoCaptureDeviceProxyImpl::ConvertFromMojoToMedia( | |
| 71 mojom::VideoPixelStorage storage) { | 29 mojom::VideoPixelStorage storage) { |
| 72 switch (storage) { | 30 switch (storage) { |
| 73 case mojom::VideoPixelStorage::CPU: | 31 case mojom::VideoPixelStorage::CPU: |
| 74 return media::PIXEL_STORAGE_CPU; | 32 return media::PIXEL_STORAGE_CPU; |
| 75 case mojom::VideoPixelStorage::GPUMEMORYBUFFER: | 33 case mojom::VideoPixelStorage::GPUMEMORYBUFFER: |
| 76 return media::PIXEL_STORAGE_GPUMEMORYBUFFER; | 34 return media::PIXEL_STORAGE_GPUMEMORYBUFFER; |
| 77 } | 35 } |
| 78 NOTREACHED(); | 36 NOTREACHED(); |
| 79 return media::PIXEL_STORAGE_CPU; | 37 return media::PIXEL_STORAGE_CPU; |
| 80 } | 38 } |
| 81 | 39 |
| 82 // static | 40 media::ResolutionChangePolicy ConvertFromMojoToMedia( |
| 83 media::ResolutionChangePolicy | |
| 84 VideoCaptureDeviceProxyImpl::ConvertFromMojoToMedia( | |
| 85 mojom::ResolutionChangePolicy policy) { | 41 mojom::ResolutionChangePolicy policy) { |
| 86 switch (policy) { | 42 switch (policy) { |
| 87 case mojom::ResolutionChangePolicy::FIXED_RESOLUTION: | 43 case mojom::ResolutionChangePolicy::FIXED_RESOLUTION: |
| 88 return media::RESOLUTION_POLICY_FIXED_RESOLUTION; | 44 return media::RESOLUTION_POLICY_FIXED_RESOLUTION; |
| 89 case mojom::ResolutionChangePolicy::FIXED_ASPECT_RATIO: | 45 case mojom::ResolutionChangePolicy::FIXED_ASPECT_RATIO: |
| 90 return media::RESOLUTION_POLICY_FIXED_ASPECT_RATIO; | 46 return media::RESOLUTION_POLICY_FIXED_ASPECT_RATIO; |
| 91 case mojom::ResolutionChangePolicy::ANY_WITHIN_LIMIT: | 47 case mojom::ResolutionChangePolicy::ANY_WITHIN_LIMIT: |
| 92 return media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT; | 48 return media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT; |
| 93 } | 49 } |
| 94 NOTREACHED(); | 50 NOTREACHED(); |
| 95 return media::RESOLUTION_POLICY_FIXED_RESOLUTION; | 51 return media::RESOLUTION_POLICY_FIXED_RESOLUTION; |
| 96 } | 52 } |
| 97 | 53 |
| 98 // static | 54 media::PowerLineFrequency ConvertFromMojoToMedia( |
| 99 media::PowerLineFrequency VideoCaptureDeviceProxyImpl::ConvertFromMojoToMedia( | |
| 100 mojom::PowerLineFrequency frequency) { | 55 mojom::PowerLineFrequency frequency) { |
| 101 switch (frequency) { | 56 switch (frequency) { |
| 102 case mojom::PowerLineFrequency::DEFAULT: | 57 case mojom::PowerLineFrequency::DEFAULT: |
| 103 return media::PowerLineFrequency::FREQUENCY_DEFAULT; | 58 return media::PowerLineFrequency::FREQUENCY_DEFAULT; |
| 104 case mojom::PowerLineFrequency::HZ_50: | 59 case mojom::PowerLineFrequency::HZ_50: |
| 105 return media::PowerLineFrequency::FREQUENCY_50HZ; | 60 return media::PowerLineFrequency::FREQUENCY_50HZ; |
| 106 case mojom::PowerLineFrequency::HZ_60: | 61 case mojom::PowerLineFrequency::HZ_60: |
| 107 return media::PowerLineFrequency::FREQUENCY_60HZ; | 62 return media::PowerLineFrequency::FREQUENCY_60HZ; |
| 108 } | 63 } |
| 109 NOTREACHED(); | 64 NOTREACHED(); |
| 110 return media::PowerLineFrequency::FREQUENCY_DEFAULT; | 65 return media::PowerLineFrequency::FREQUENCY_DEFAULT; |
| 111 } | 66 } |
| 112 | 67 |
| 113 } // namespace video_capture | 68 } // namespace video_capture |
| OLD | NEW |