Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: media/base/video_capture_types.cc

Issue 1179323002: Video Capture: extract storage info from pixel format in VideoCaptureFormat. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: hubbe@s comments and minor rebase Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698