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) {} | |
hubbe
2015/06/18 19:23:11
Maybe DCHECK that TEXTURE is only used with ARGB h
mcasas
2015/06/19 02:58:36
Well right now constructor does not check anything
| |
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) && |
31 (pixel_format < PIXEL_FORMAT_MAX); | 44 (pixel_format < PIXEL_FORMAT_MAX); |
hubbe
2015/06/18 19:23:11
Maybe return false if storage is TEXTURE and pixel
mcasas
2015/06/19 02:58:35
Done.
| |
32 } | 45 } |
33 | 46 |
34 size_t VideoCaptureFormat::ImageAllocationSize() const { | 47 size_t VideoCaptureFormat::ImageAllocationSize() const { |
35 size_t result_frame_size = frame_size.GetArea(); | 48 size_t result_frame_size = frame_size.GetArea(); |
36 switch (pixel_format) { | 49 switch (pixel_format) { |
37 case PIXEL_FORMAT_I420: | 50 case PIXEL_FORMAT_I420: |
38 case PIXEL_FORMAT_YV12: | 51 case PIXEL_FORMAT_YV12: |
39 case PIXEL_FORMAT_NV12: | 52 case PIXEL_FORMAT_NV12: |
40 case PIXEL_FORMAT_NV21: | 53 case PIXEL_FORMAT_NV21: |
41 result_frame_size = result_frame_size * 3 / 2; | 54 result_frame_size = result_frame_size * 3 / 2; |
42 break; | 55 break; |
43 case PIXEL_FORMAT_UYVY: | 56 case PIXEL_FORMAT_UYVY: |
44 case PIXEL_FORMAT_YUY2: | 57 case PIXEL_FORMAT_YUY2: |
45 result_frame_size *= 2; | 58 result_frame_size *= 2; |
46 break; | 59 break; |
47 case PIXEL_FORMAT_RGB24: | 60 case PIXEL_FORMAT_RGB24: |
48 result_frame_size *= 3; | 61 result_frame_size *= 3; |
49 break; | 62 break; |
50 case PIXEL_FORMAT_RGB32: | 63 case PIXEL_FORMAT_RGB32: |
51 case PIXEL_FORMAT_ARGB: | 64 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; | 65 result_frame_size *= 4; |
56 break; | 66 break; |
57 case PIXEL_FORMAT_MJPEG: | 67 case PIXEL_FORMAT_MJPEG: |
58 case PIXEL_FORMAT_TEXTURE: | |
59 result_frame_size = 0; | 68 result_frame_size = 0; |
60 break; | 69 break; |
61 default: // Sizes for the rest of the formats are unknown. | 70 default: // Sizes for the rest of the formats are unknown. |
62 NOTREACHED() << "Unknown pixel format provided."; | 71 NOTREACHED() << "Unknown pixel format provided."; |
63 break; | 72 break; |
64 } | 73 } |
65 return result_frame_size; | 74 return result_frame_size; |
66 } | 75 } |
67 | 76 |
68 std::string VideoCaptureFormat::ToString() const { | 77 std::string VideoCaptureFormat::ToString() const { |
69 return base::StringPrintf("resolution: %s, fps: %.3f, pixel format: %s", | 78 return base::StringPrintf( |
70 frame_size.ToString().c_str(), | 79 "(%s)@%.3ffps, pixel format: %s storage: %s.", |
71 frame_rate, | 80 frame_size.ToString().c_str(), frame_rate, |
72 PixelFormatToString(pixel_format).c_str()); | 81 PixelFormatToString(pixel_format).c_str(), |
82 PixelStorageToString(pixel_storage).c_str()); | |
73 } | 83 } |
74 | 84 |
75 std::string VideoCaptureFormat::PixelFormatToString(VideoPixelFormat format) { | 85 std::string VideoCaptureFormat::PixelFormatToString(VideoPixelFormat format) { |
76 switch (format) { | 86 switch (format) { |
77 case PIXEL_FORMAT_UNKNOWN: | 87 case PIXEL_FORMAT_UNKNOWN: |
78 return "UNKNOWN"; | 88 return "UNKNOWN"; |
79 case PIXEL_FORMAT_I420: | 89 case PIXEL_FORMAT_I420: |
80 return "I420"; | 90 return "I420"; |
81 case PIXEL_FORMAT_YUY2: | 91 case PIXEL_FORMAT_YUY2: |
82 return "YUY2"; | 92 return "YUY2"; |
83 case PIXEL_FORMAT_UYVY: | 93 case PIXEL_FORMAT_UYVY: |
84 return "UYVY"; | 94 return "UYVY"; |
85 case PIXEL_FORMAT_RGB24: | 95 case PIXEL_FORMAT_RGB24: |
86 return "RGB24"; | 96 return "RGB24"; |
87 case PIXEL_FORMAT_RGB32: | 97 case PIXEL_FORMAT_RGB32: |
88 return "RGB32"; | 98 return "RGB32"; |
89 case PIXEL_FORMAT_ARGB: | 99 case PIXEL_FORMAT_ARGB: |
90 return "ARGB"; | 100 return "ARGB"; |
91 case PIXEL_FORMAT_MJPEG: | 101 case PIXEL_FORMAT_MJPEG: |
92 return "MJPEG"; | 102 return "MJPEG"; |
93 case PIXEL_FORMAT_NV12: | 103 case PIXEL_FORMAT_NV12: |
94 return "NV12"; | 104 return "NV12"; |
95 case PIXEL_FORMAT_NV21: | 105 case PIXEL_FORMAT_NV21: |
96 return "NV21"; | 106 return "NV21"; |
97 case PIXEL_FORMAT_YV12: | 107 case PIXEL_FORMAT_YV12: |
98 return "YV12"; | 108 return "YV12"; |
99 case PIXEL_FORMAT_TEXTURE: | |
100 return "TEXTURE"; | |
101 case PIXEL_FORMAT_GPUMEMORYBUFFER: | |
102 return "GPUMEMORYBUFFER"; | |
103 case PIXEL_FORMAT_MAX: | 109 case PIXEL_FORMAT_MAX: |
104 break; | 110 break; |
105 } | 111 } |
106 NOTREACHED() << "Invalid VideoPixelFormat provided: " << format; | 112 NOTREACHED() << "Invalid VideoPixelFormat provided: " << format; |
107 return ""; | 113 return ""; |
108 } | 114 } |
109 | 115 |
116 std::string VideoCaptureFormat::PixelStorageToString( | |
117 VideoPixelStorage storage) { | |
118 switch (storage) { | |
119 case PIXEL_STORAGE_CPU: | |
120 return "CPU"; | |
121 case PIXEL_STORAGE_TEXTURE: | |
122 return "TEXTURE"; | |
123 case PIXEL_STORAGE_GPUMEMORYBUFFER: | |
124 return "GPUMEMORYBUFFER"; | |
125 } | |
126 NOTREACHED() << "Invalid VideoPixelStorage provided: " << storage; | |
127 return ""; | |
128 } | |
129 | |
110 VideoCaptureParams::VideoCaptureParams() | 130 VideoCaptureParams::VideoCaptureParams() |
111 : resolution_change_policy(RESOLUTION_POLICY_FIXED_RESOLUTION) | 131 : resolution_change_policy(RESOLUTION_POLICY_FIXED_RESOLUTION) |
112 #if defined(OS_LINUX) | 132 #if defined(OS_LINUX) |
113 , use_native_gpu_memory_buffers(false) | 133 , use_native_gpu_memory_buffers(false) |
114 #endif | 134 #endif |
115 {} | 135 {} |
116 | 136 |
117 } // namespace media | 137 } // namespace media |
OLD | NEW |