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

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

Issue 1204063005: Reland: Video Capture: extract storage info from pixel format in VideoCaptureFormat. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dcheng@ comments Created 5 years, 5 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) {}
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698