Index: ui/accelerated_widget_mac/ca_renderer_layer_tree.mm |
diff --git a/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm b/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm |
index dcc8cca2b2029dfd5ff5dba6e9059ecb3f0c0589..985b06e9401fbe9c2589a89627b9f8de49d64ee5 100644 |
--- a/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm |
+++ b/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm |
@@ -129,7 +129,10 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
} // namespace |
-CARendererLayerTree::CARendererLayerTree() {} |
+CARendererLayerTree::CARendererLayerTree( |
+ bool allow_av_sample_buffer_display_layer) |
+ : allow_av_sample_buffer_display_layer_( |
+ allow_av_sample_buffer_display_layer) {} |
CARendererLayerTree::~CARendererLayerTree() {} |
bool CARendererLayerTree::ScheduleCALayer(const CARendererLayerParams& params) { |
@@ -139,7 +142,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
LOG(ERROR) << "ScheduleCALayer called after CommitScheduledCALayers."; |
return false; |
} |
- return root_layer_.AddContentLayer(params); |
+ return root_layer_.AddContentLayer(this, params); |
} |
void CARendererLayerTree::CommitScheduledCALayers( |
@@ -267,6 +270,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
} |
CARendererLayerTree::ContentLayer::ContentLayer( |
+ CARendererLayerTree* tree, |
base::ScopedCFTypeRef<IOSurfaceRef> io_surface, |
base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer, |
const gfx::RectF& contents_rect, |
@@ -311,7 +315,8 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
// Only allow 4:2:0 frames which fill the layer's contents to be promoted to |
// AV layers. |
- if (IOSurfaceGetPixelFormat(io_surface) == |
+ if (tree->allow_av_sample_buffer_display_layer_ && |
+ IOSurfaceGetPixelFormat(io_surface) == |
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange && |
contents_rect == gfx::RectF(0, 0, 1, 1)) { |
use_av_layer = true; |
@@ -339,6 +344,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
} |
bool CARendererLayerTree::RootLayer::AddContentLayer( |
+ CARendererLayerTree* tree, |
const CARendererLayerParams& params) { |
bool needs_new_clip_and_sorting_layer = true; |
@@ -375,11 +381,12 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
params.is_clipped, params.clip_rect, params.sorting_context_id, |
is_singleton_sorting_context)); |
} |
- clip_and_sorting_layers.back().AddContentLayer(params); |
+ clip_and_sorting_layers.back().AddContentLayer(tree, params); |
return true; |
} |
void CARendererLayerTree::ClipAndSortingLayer::AddContentLayer( |
+ CARendererLayerTree* tree, |
const CARendererLayerParams& params) { |
bool needs_new_transform_layer = true; |
if (!transform_layers.empty()) { |
@@ -389,10 +396,11 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
} |
if (needs_new_transform_layer) |
transform_layers.push_back(TransformLayer(params.transform)); |
- transform_layers.back().AddContentLayer(params); |
+ transform_layers.back().AddContentLayer(tree, params); |
} |
void CARendererLayerTree::TransformLayer::AddContentLayer( |
+ CARendererLayerTree* tree, |
const CARendererLayerParams& params) { |
base::ScopedCFTypeRef<IOSurfaceRef> io_surface; |
base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer; |
@@ -405,7 +413,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface( |
} |
content_layers.push_back( |
- ContentLayer(io_surface, cv_pixel_buffer, params.contents_rect, |
+ ContentLayer(tree, io_surface, cv_pixel_buffer, params.contents_rect, |
params.rect, params.background_color, params.edge_aa_mask, |
params.opacity, params.filter)); |
} |