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

Side by Side Diff: ui/accelerated_widget_mac/ca_layer_tree_mac.h

Issue 1910633004: Mac video: Enable AVSampleBufferDisplayLayer for h264 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 8 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 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 #ifndef UI_ACCELERATED_WIDGET_MAC_CA_LAYER_TREE_MAC_H_ 5 #ifndef UI_ACCELERATED_WIDGET_MAC_CA_LAYER_TREE_MAC_H_
6 #define UI_ACCELERATED_WIDGET_MAC_CA_LAYER_TREE_MAC_H_ 6 #define UI_ACCELERATED_WIDGET_MAC_CA_LAYER_TREE_MAC_H_
7 7
8 #include <IOSurface/IOSurface.h> 8 #include <IOSurface/IOSurface.h>
9 #include <QuartzCore/QuartzCore.h> 9 #include <QuartzCore/QuartzCore.h>
10 10
(...skipping 24 matching lines...) Expand all
35 ~CALayerTree(); 35 ~CALayerTree();
36 36
37 // Append the description of a new CALayer to the tree. This will not 37 // Append the description of a new CALayer to the tree. This will not
38 // create any new CALayers until CommitScheduledCALayers is called. This 38 // create any new CALayers until CommitScheduledCALayers is called. This
39 // cannot be called anymore after CommitScheduledCALayers has been called. 39 // cannot be called anymore after CommitScheduledCALayers has been called.
40 bool ScheduleCALayer(bool is_clipped, 40 bool ScheduleCALayer(bool is_clipped,
41 const gfx::Rect& clip_rect, 41 const gfx::Rect& clip_rect,
42 unsigned sorting_context_id, 42 unsigned sorting_context_id,
43 const gfx::Transform& transform, 43 const gfx::Transform& transform,
44 base::ScopedCFTypeRef<IOSurfaceRef> io_surface, 44 base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
45 base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer,
45 const gfx::RectF& contents_rect, 46 const gfx::RectF& contents_rect,
46 const gfx::Rect& rect, 47 const gfx::Rect& rect,
47 unsigned background_color, 48 unsigned background_color,
48 unsigned edge_aa_mask, 49 unsigned edge_aa_mask,
49 float opacity); 50 float opacity);
50 51
51 // Create a CALayer tree for the scheduled layers, and set |superlayer| to 52 // Create a CALayer tree for the scheduled layers, and set |superlayer| to
52 // have only this tree as its sublayers. If |old_tree| is non-null, then try 53 // have only this tree as its sublayers. If |old_tree| is non-null, then try
53 // to re-use the CALayers of |old_tree| as much as possible. |old_tree| will 54 // to re-use the CALayers of |old_tree| as much as possible. |old_tree| will
54 // be destroyed at the end of the function, and any CALayers in it which were 55 // be destroyed at the end of the function, and any CALayers in it which were
(...skipping 10 matching lines...) Expand all
65 66
66 struct RootLayer { 67 struct RootLayer {
67 RootLayer(); 68 RootLayer();
68 69
69 // This will remove |ca_layer| from its superlayer, if |ca_layer| is 70 // This will remove |ca_layer| from its superlayer, if |ca_layer| is
70 // non-nil. 71 // non-nil.
71 ~RootLayer(); 72 ~RootLayer();
72 73
73 // Append a new content layer, without modifying the actual CALayer 74 // Append a new content layer, without modifying the actual CALayer
74 // structure. 75 // structure.
75 bool AddContentLayer(bool is_clipped, 76 bool AddContentLayer(
76 const gfx::Rect& clip_rect, 77 bool is_clipped,
77 unsigned sorting_context_id, 78 const gfx::Rect& clip_rect,
78 const gfx::Transform& transform, 79 unsigned sorting_context_id,
79 base::ScopedCFTypeRef<IOSurfaceRef> io_surface, 80 const gfx::Transform& transform,
80 const gfx::RectF& contents_rect, 81 base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
81 const gfx::Rect& rect, 82 base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer,
82 unsigned background_color, 83 const gfx::RectF& contents_rect,
83 unsigned edge_aa_mask, 84 const gfx::Rect& rect,
84 float opacity); 85 unsigned background_color,
86 unsigned edge_aa_mask,
87 float opacity);
85 88
86 // Allocate CALayers for this layer and its children, and set their 89 // Allocate CALayers for this layer and its children, and set their
87 // properties appropriately. Re-use the CALayers from |old_layer| if 90 // properties appropriately. Re-use the CALayers from |old_layer| if
88 // possible. If re-using a CALayer from |old_layer|, reset its |ca_layer| 91 // possible. If re-using a CALayer from |old_layer|, reset its |ca_layer|
89 // to nil, so that its destructor will not remove an active CALayer. 92 // to nil, so that its destructor will not remove an active CALayer.
90 void CommitToCA(CALayer* superlayer, 93 void CommitToCA(CALayer* superlayer,
91 RootLayer* old_layer, 94 RootLayer* old_layer,
92 float scale_factor); 95 float scale_factor);
93 96
94 std::vector<ClipAndSortingLayer> clip_and_sorting_layers; 97 std::vector<ClipAndSortingLayer> clip_and_sorting_layers;
95 base::scoped_nsobject<CALayer> ca_layer; 98 base::scoped_nsobject<CALayer> ca_layer;
96 99
97 private: 100 private:
98 DISALLOW_COPY_AND_ASSIGN(RootLayer); 101 DISALLOW_COPY_AND_ASSIGN(RootLayer);
99 }; 102 };
100 struct ClipAndSortingLayer { 103 struct ClipAndSortingLayer {
101 ClipAndSortingLayer(bool is_clipped, 104 ClipAndSortingLayer(bool is_clipped,
102 gfx::Rect clip_rect, 105 gfx::Rect clip_rect,
103 unsigned sorting_context_id, 106 unsigned sorting_context_id,
104 bool is_singleton_sorting_context); 107 bool is_singleton_sorting_context);
105 ClipAndSortingLayer(ClipAndSortingLayer&& layer); 108 ClipAndSortingLayer(ClipAndSortingLayer&& layer);
106 109
107 // See the behavior of RootLayer for the effects of these functions on the 110 // See the behavior of RootLayer for the effects of these functions on the
108 // |ca_layer| member and |old_layer| argument. 111 // |ca_layer| member and |old_layer| argument.
109 ~ClipAndSortingLayer(); 112 ~ClipAndSortingLayer();
110 void AddContentLayer(const gfx::Transform& transform, 113 void AddContentLayer(
111 base::ScopedCFTypeRef<IOSurfaceRef> io_surface, 114 const gfx::Transform& transform,
112 const gfx::RectF& contents_rect, 115 base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
113 const gfx::Rect& rect, 116 base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer,
114 unsigned background_color, 117 const gfx::RectF& contents_rect,
115 unsigned edge_aa_mask, 118 const gfx::Rect& rect,
116 float opacity); 119 unsigned background_color,
120 unsigned edge_aa_mask,
121 float opacity);
117 void CommitToCA(CALayer* superlayer, 122 void CommitToCA(CALayer* superlayer,
118 ClipAndSortingLayer* old_layer, 123 ClipAndSortingLayer* old_layer,
119 float scale_factor); 124 float scale_factor);
120 125
121 std::vector<TransformLayer> transform_layers; 126 std::vector<TransformLayer> transform_layers;
122 bool is_clipped = false; 127 bool is_clipped = false;
123 gfx::Rect clip_rect; 128 gfx::Rect clip_rect;
124 unsigned sorting_context_id = 0; 129 unsigned sorting_context_id = 0;
125 bool is_singleton_sorting_context = false; 130 bool is_singleton_sorting_context = false;
126 base::scoped_nsobject<CALayer> ca_layer; 131 base::scoped_nsobject<CALayer> ca_layer;
127 132
128 private: 133 private:
129 DISALLOW_COPY_AND_ASSIGN(ClipAndSortingLayer); 134 DISALLOW_COPY_AND_ASSIGN(ClipAndSortingLayer);
130 }; 135 };
131 struct TransformLayer { 136 struct TransformLayer {
132 TransformLayer(const gfx::Transform& transform); 137 TransformLayer(const gfx::Transform& transform);
133 TransformLayer(TransformLayer&& layer); 138 TransformLayer(TransformLayer&& layer);
134 139
135 // See the behavior of RootLayer for the effects of these functions on the 140 // See the behavior of RootLayer for the effects of these functions on the
136 // |ca_layer| member and |old_layer| argument. 141 // |ca_layer| member and |old_layer| argument.
137 ~TransformLayer(); 142 ~TransformLayer();
138 void AddContentLayer(base::ScopedCFTypeRef<IOSurfaceRef> io_surface, 143 void AddContentLayer(
139 const gfx::RectF& contents_rect, 144 base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
140 const gfx::Rect& rect, 145 base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer,
141 unsigned background_color, 146 const gfx::RectF& contents_rect,
142 unsigned edge_aa_mask, 147 const gfx::Rect& rect,
143 float opacity); 148 unsigned background_color,
149 unsigned edge_aa_mask,
150 float opacity);
144 void CommitToCA(CALayer* superlayer, 151 void CommitToCA(CALayer* superlayer,
145 TransformLayer* old_layer, 152 TransformLayer* old_layer,
146 float scale_factor); 153 float scale_factor);
147 154
148 gfx::Transform transform; 155 gfx::Transform transform;
149 std::vector<ContentLayer> content_layers; 156 std::vector<ContentLayer> content_layers;
150 base::scoped_nsobject<CALayer> ca_layer; 157 base::scoped_nsobject<CALayer> ca_layer;
151 158
152 private: 159 private:
153 DISALLOW_COPY_AND_ASSIGN(TransformLayer); 160 DISALLOW_COPY_AND_ASSIGN(TransformLayer);
154 }; 161 };
155 struct ContentLayer { 162 struct ContentLayer {
156 ContentLayer(base::ScopedCFTypeRef<IOSurfaceRef> io_surface, 163 ContentLayer(base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
164 base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer,
157 const gfx::RectF& contents_rect, 165 const gfx::RectF& contents_rect,
158 const gfx::Rect& rect, 166 const gfx::Rect& rect,
159 unsigned background_color, 167 unsigned background_color,
160 unsigned edge_aa_mask, 168 unsigned edge_aa_mask,
161 float opacity); 169 float opacity);
162 ContentLayer(ContentLayer&& layer); 170 ContentLayer(ContentLayer&& layer);
163 171
164 // See the behavior of RootLayer for the effects of these functions on the 172 // See the behavior of RootLayer for the effects of these functions on the
165 // |ca_layer| member and |old_layer| argument. 173 // |ca_layer| member and |old_layer| argument.
166 ~ContentLayer(); 174 ~ContentLayer();
167 void CommitToCA(CALayer* parent, 175 void CommitToCA(CALayer* parent,
168 ContentLayer* old_layer, 176 ContentLayer* old_layer,
169 float scale_factor); 177 float scale_factor);
170 178
171 // Ensure that the IOSurface be marked as in-use as soon as it is received. 179 // Ensure that the IOSurface be marked as in-use as soon as it is received.
172 // When they are committed to the window server, that will also increment 180 // When they are committed to the window server, that will also increment
173 // their use count. 181 // their use count.
174 const gfx::ScopedInUseIOSurface io_surface; 182 const gfx::ScopedInUseIOSurface io_surface;
183 const base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer;
175 gfx::RectF contents_rect; 184 gfx::RectF contents_rect;
176 gfx::Rect rect; 185 gfx::Rect rect;
177 unsigned background_color = 0; 186 unsigned background_color = 0;
178 // Note that the CoreAnimation edge antialiasing mask is not the same as 187 // Note that the CoreAnimation edge antialiasing mask is not the same as
179 // the edge antialiasing mask passed to the constructor. 188 // the edge antialiasing mask passed to the constructor.
180 CAEdgeAntialiasingMask ca_edge_aa_mask = 0; 189 CAEdgeAntialiasingMask ca_edge_aa_mask = 0;
181 float opacity = 1; 190 float opacity = 1;
182 base::scoped_nsobject<CALayer> ca_layer; 191 base::scoped_nsobject<CALayer> ca_layer;
183 192
184 // If this layer's contents can be represented as an 193 // If this layer's contents can be represented as an
185 // AVSampleBufferDisplayLayer, then |ca_layer| will point to |av_layer|. 194 // AVSampleBufferDisplayLayer, then |ca_layer| will point to |av_layer|.
186 base::scoped_nsobject<AVSampleBufferDisplayLayer> av_layer; 195 base::scoped_nsobject<AVSampleBufferDisplayLayer> av_layer;
187 bool use_av_layer = false; 196 bool use_av_layer = false;
188 197
189 private: 198 private:
190 DISALLOW_COPY_AND_ASSIGN(ContentLayer); 199 DISALLOW_COPY_AND_ASSIGN(ContentLayer);
191 }; 200 };
192 201
193 RootLayer root_layer_; 202 RootLayer root_layer_;
194 float scale_factor_ = 1; 203 float scale_factor_ = 1;
195 bool has_committed_ = false; 204 bool has_committed_ = false;
196 205
197 private: 206 private:
198 DISALLOW_COPY_AND_ASSIGN(CALayerTree); 207 DISALLOW_COPY_AND_ASSIGN(CALayerTree);
199 }; 208 };
200 209
201 } // namespace ui 210 } // namespace ui
202 211
203 #endif // UI_ACCELERATED_WIDGET_MAC_CA_LAYER_TREE_MAC_H_ 212 #endif // UI_ACCELERATED_WIDGET_MAC_CA_LAYER_TREE_MAC_H_
OLDNEW
« no previous file with comments | « gpu/ipc/service/image_transport_surface_overlay_mac.mm ('k') | ui/accelerated_widget_mac/ca_layer_tree_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698