Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "media/base/video_capture_types.h" | 5 #include "media/base/video_capture_types.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "media/base/limits.h" | 9 #include "media/base/limits.h" |
| 10 | 10 |
| 11 namespace media { | 11 namespace media { |
| 12 | 12 |
| 13 VideoCaptureFormat::VideoCaptureFormat() | 13 VideoCaptureFormat::VideoCaptureFormat() |
| 14 : frame_rate(0.0f), pixel_format(PIXEL_FORMAT_UNKNOWN) {} | 14 : frame_rate(0.0f), |
| 15 pixel_format(PIXEL_FORMAT_UNKNOWN), | |
| 16 pixel_storage(PIXEL_STORAGE_CPU) { | |
| 17 } | |
| 15 | 18 |
| 16 VideoCaptureFormat::VideoCaptureFormat(const gfx::Size& frame_size, | 19 VideoCaptureFormat::VideoCaptureFormat(const gfx::Size& frame_size, |
| 17 float frame_rate, | 20 float frame_rate, |
| 18 VideoPixelFormat pixel_format) | 21 VideoPixelFormat pixel_format) |
| 19 : frame_size(frame_size), | 22 : frame_size(frame_size), |
| 20 frame_rate(frame_rate), | 23 frame_rate(frame_rate), |
| 21 pixel_format(pixel_format) {} | 24 pixel_format(pixel_format), |
| 25 pixel_storage(PIXEL_STORAGE_CPU) {} | |
| 26 | |
| 27 VideoCaptureFormat::VideoCaptureFormat(const gfx::Size& frame_size, | |
| 28 float frame_rate, | |
| 29 VideoPixelFormat pixel_format, | |
| 30 VideoPixelStorage pixel_storage) | |
| 31 : frame_size(frame_size), | |
| 32 frame_rate(frame_rate), | |
| 33 pixel_format(pixel_format), | |
| 34 pixel_storage(pixel_storage) {} | |
| 22 | 35 |
| 23 bool VideoCaptureFormat::IsValid() const { | 36 bool VideoCaptureFormat::IsValid() const { |
| 24 return (frame_size.width() < media::limits::kMaxDimension) && | 37 return (frame_size.width() < media::limits::kMaxDimension) && |
| 25 (frame_size.height() < media::limits::kMaxDimension) && | 38 (frame_size.height() < media::limits::kMaxDimension) && |
| 26 (frame_size.GetArea() >= 0) && | 39 (frame_size.GetArea() >= 0) && |
| 27 (frame_size.GetArea() < media::limits::kMaxCanvas) && | 40 (frame_size.GetArea() < media::limits::kMaxCanvas) && |
| 28 (frame_rate >= 0.0f) && | 41 (frame_rate >= 0.0f) && |
| 29 (frame_rate < media::limits::kMaxFramesPerSecond) && | 42 (frame_rate < media::limits::kMaxFramesPerSecond) && |
| 30 (pixel_format >= 0) && | 43 (pixel_format >= 0) && (pixel_format < PIXEL_FORMAT_MAX) && |
| 31 (pixel_format < PIXEL_FORMAT_MAX); | 44 (pixel_storage != PIXEL_STORAGE_TEXTURE || |
| 45 pixel_format == PIXEL_FORMAT_ARGB); | |
| 32 } | 46 } |
| 33 | 47 |
| 34 size_t VideoCaptureFormat::ImageAllocationSize() const { | 48 size_t VideoCaptureFormat::ImageAllocationSize() const { |
| 35 size_t result_frame_size = frame_size.GetArea(); | 49 size_t result_frame_size = frame_size.GetArea(); |
| 36 switch (pixel_format) { | 50 switch (pixel_format) { |
| 37 case PIXEL_FORMAT_I420: | 51 case PIXEL_FORMAT_I420: |
| 38 case PIXEL_FORMAT_YV12: | 52 case PIXEL_FORMAT_YV12: |
| 39 case PIXEL_FORMAT_NV12: | 53 case PIXEL_FORMAT_NV12: |
| 40 case PIXEL_FORMAT_NV21: | 54 case PIXEL_FORMAT_NV21: |
| 41 result_frame_size = result_frame_size * 3 / 2; | 55 result_frame_size = result_frame_size * 3 / 2; |
| 42 break; | 56 break; |
| 43 case PIXEL_FORMAT_UYVY: | 57 case PIXEL_FORMAT_UYVY: |
| 44 case PIXEL_FORMAT_YUY2: | 58 case PIXEL_FORMAT_YUY2: |
| 45 result_frame_size *= 2; | 59 result_frame_size *= 2; |
| 46 break; | 60 break; |
| 47 case PIXEL_FORMAT_RGB24: | 61 case PIXEL_FORMAT_RGB24: |
| 48 result_frame_size *= 3; | 62 result_frame_size *= 3; |
| 49 break; | 63 break; |
| 50 case PIXEL_FORMAT_RGB32: | 64 case PIXEL_FORMAT_RGB32: |
| 51 case PIXEL_FORMAT_ARGB: | 65 case PIXEL_FORMAT_ARGB: |
| 52 // GpuMemoryBuffer is an endianness-agnostic 32bpp pixel format until | |
| 53 // http://crbug.com/439520 is closed. | |
| 54 case PIXEL_FORMAT_GPUMEMORYBUFFER: | |
| 55 result_frame_size *= 4; | 66 result_frame_size *= 4; |
| 56 break; | 67 break; |
| 57 case PIXEL_FORMAT_MJPEG: | 68 case PIXEL_FORMAT_MJPEG: |
| 58 case PIXEL_FORMAT_TEXTURE: | |
| 59 result_frame_size = 0; | 69 result_frame_size = 0; |
| 60 break; | 70 break; |
| 61 default: // Sizes for the rest of the formats are unknown. | 71 default: // Sizes for the rest of the formats are unknown. |
| 62 NOTREACHED() << "Unknown pixel format provided."; | 72 NOTREACHED() << "Unknown pixel format provided."; |
| 63 break; | 73 break; |
| 64 } | 74 } |
| 65 return result_frame_size; | 75 return result_frame_size; |
| 66 } | 76 } |
| 67 | 77 |
| 68 std::string VideoCaptureFormat::ToString() const { | 78 std::string VideoCaptureFormat::ToString() const { |
| 69 return base::StringPrintf("resolution: %s, fps: %.3f, pixel format: %s", | 79 return base::StringPrintf( |
| 70 frame_size.ToString().c_str(), | 80 "(%s)@%.3ffps, pixel format: %s storage: %s.", |
| 71 frame_rate, | 81 frame_size.ToString().c_str(), frame_rate, |
| 72 PixelFormatToString(pixel_format).c_str()); | 82 PixelFormatToString(pixel_format).c_str(), |
| 83 PixelStorageToString(pixel_storage).c_str()); | |
| 73 } | 84 } |
| 74 | 85 |
| 75 std::string VideoCaptureFormat::PixelFormatToString(VideoPixelFormat format) { | 86 std::string VideoCaptureFormat::PixelFormatToString(VideoPixelFormat format) { |
| 76 switch (format) { | 87 switch (format) { |
| 77 case PIXEL_FORMAT_UNKNOWN: | 88 case PIXEL_FORMAT_UNKNOWN: |
| 78 return "UNKNOWN"; | 89 return "UNKNOWN"; |
| 79 case PIXEL_FORMAT_I420: | 90 case PIXEL_FORMAT_I420: |
| 80 return "I420"; | 91 return "I420"; |
| 81 case PIXEL_FORMAT_YUY2: | 92 case PIXEL_FORMAT_YUY2: |
| 82 return "YUY2"; | 93 return "YUY2"; |
| 83 case PIXEL_FORMAT_UYVY: | 94 case PIXEL_FORMAT_UYVY: |
| 84 return "UYVY"; | 95 return "UYVY"; |
| 85 case PIXEL_FORMAT_RGB24: | 96 case PIXEL_FORMAT_RGB24: |
| 86 return "RGB24"; | 97 return "RGB24"; |
| 87 case PIXEL_FORMAT_RGB32: | 98 case PIXEL_FORMAT_RGB32: |
| 88 return "RGB32"; | 99 return "RGB32"; |
| 89 case PIXEL_FORMAT_ARGB: | 100 case PIXEL_FORMAT_ARGB: |
| 90 return "ARGB"; | 101 return "ARGB"; |
| 91 case PIXEL_FORMAT_MJPEG: | 102 case PIXEL_FORMAT_MJPEG: |
| 92 return "MJPEG"; | 103 return "MJPEG"; |
| 93 case PIXEL_FORMAT_NV12: | 104 case PIXEL_FORMAT_NV12: |
| 94 return "NV12"; | 105 return "NV12"; |
| 95 case PIXEL_FORMAT_NV21: | 106 case PIXEL_FORMAT_NV21: |
| 96 return "NV21"; | 107 return "NV21"; |
| 97 case PIXEL_FORMAT_YV12: | 108 case PIXEL_FORMAT_YV12: |
| 98 return "YV12"; | 109 return "YV12"; |
| 99 case PIXEL_FORMAT_TEXTURE: | |
| 100 return "TEXTURE"; | |
| 101 case PIXEL_FORMAT_GPUMEMORYBUFFER: | |
| 102 return "GPUMEMORYBUFFER"; | |
| 103 case PIXEL_FORMAT_MAX: | 110 case PIXEL_FORMAT_MAX: |
| 104 break; | 111 break; |
| 105 } | 112 } |
| 106 NOTREACHED() << "Invalid VideoPixelFormat provided: " << format; | 113 NOTREACHED() << "Invalid VideoPixelFormat provided: " << format; |
| 107 return ""; | 114 return ""; |
| 108 } | 115 } |
| 109 | 116 |
| 117 std::string VideoCaptureFormat::PixelStorageToString( | |
| 118 VideoPixelStorage storage) { | |
| 119 switch (storage) { | |
| 120 case PIXEL_STORAGE_CPU: | |
| 121 return "CPU"; | |
| 122 case PIXEL_STORAGE_TEXTURE: | |
| 123 return "TEXTURE"; | |
| 124 case PIXEL_STORAGE_GPUMEMORYBUFFER: | |
| 125 return "GPUMEMORYBUFFER"; | |
| 126 } | |
| 127 NOTREACHED() << "Invalid VideoPixelStorage provided: " << storage; | |
| 128 return ""; | |
|
dcheng
2015/06/24 21:41:48
Nit: return std::string() instead of return ""
mcasas
2015/06/25 01:19:51
Done.
| |
| 129 } | |
| 130 | |
| 110 VideoCaptureParams::VideoCaptureParams() | 131 VideoCaptureParams::VideoCaptureParams() |
| 111 : resolution_change_policy(RESOLUTION_POLICY_FIXED_RESOLUTION) | 132 : resolution_change_policy(RESOLUTION_POLICY_FIXED_RESOLUTION) |
| 112 #if defined(OS_LINUX) | 133 #if defined(OS_LINUX) |
| 113 , use_native_gpu_memory_buffers(false) | 134 , use_native_gpu_memory_buffers(false) |
| 114 #endif | 135 #endif |
| 115 {} | 136 {} |
| 116 | 137 |
| 117 } // namespace media | 138 } // namespace media |
| OLD | NEW |