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

Side by Side Diff: cc/layers/video_layer_impl.cc

Issue 2683763003: cc: make resource keep video buffer format for hardware overlay.
Patch Set: make Resource keep video buffer format Created 3 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
« no previous file with comments | « no previous file | cc/output/overlay_candidate.cc » ('j') | cc/output/overlay_candidate.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/layers/video_layer_impl.h" 5 #include "cc/layers/video_layer_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "cc/layers/video_frame_provider_client_impl.h" 12 #include "cc/layers/video_frame_provider_client_impl.h"
13 #include "cc/quads/stream_video_draw_quad.h" 13 #include "cc/quads/stream_video_draw_quad.h"
14 #include "cc/quads/texture_draw_quad.h" 14 #include "cc/quads/texture_draw_quad.h"
15 #include "cc/quads/yuv_video_draw_quad.h" 15 #include "cc/quads/yuv_video_draw_quad.h"
16 #include "cc/resources/resource_provider.h" 16 #include "cc/resources/resource_provider.h"
17 #include "cc/resources/single_release_callback_impl.h" 17 #include "cc/resources/single_release_callback_impl.h"
18 #include "cc/trees/layer_tree_impl.h" 18 #include "cc/trees/layer_tree_impl.h"
19 #include "cc/trees/occlusion.h" 19 #include "cc/trees/occlusion.h"
20 #include "cc/trees/task_runner_provider.h" 20 #include "cc/trees/task_runner_provider.h"
21 #include "media/base/video_frame.h" 21 #include "media/base/video_frame.h"
22 #include "ui/gfx/color_space.h" 22 #include "ui/gfx/color_space.h"
23 23
24 namespace cc { 24 namespace cc {
25 25
26 namespace {
27
28 gfx::BufferFormat GetBufferFormat(media::VideoPixelFormat pixel_format) {
29 switch (pixel_format) {
30 case media::PIXEL_FORMAT_YV12:
31 return gfx::BufferFormat::YVU_420;
32 case media::PIXEL_FORMAT_NV12:
33 return gfx::BufferFormat::YUV_420_BIPLANAR;
34 case media::PIXEL_FORMAT_UYVY:
35 return gfx::BufferFormat::UYVY_422;
36 case media::PIXEL_FORMAT_ARGB:
37 return gfx::BufferFormat::BGRA_8888;
38 case media::PIXEL_FORMAT_XRGB:
39 return gfx::BufferFormat::BGRX_8888;
40 case media::PIXEL_FORMAT_RGB32:
41 return gfx::BufferFormat::RGBX_8888;
42 case media::PIXEL_FORMAT_Y8:
43 return gfx::BufferFormat::R_8;
44 case media::PIXEL_FORMAT_Y16:
45 return gfx::BufferFormat::RG_88;
46
47 case media::PIXEL_FORMAT_I420:
48 case media::PIXEL_FORMAT_YV16:
49 case media::PIXEL_FORMAT_YV12A:
50 case media::PIXEL_FORMAT_YV24:
51 case media::PIXEL_FORMAT_NV21:
52 case media::PIXEL_FORMAT_YUY2:
53 case media::PIXEL_FORMAT_RGB24:
54 case media::PIXEL_FORMAT_MJPEG:
55 case media::PIXEL_FORMAT_MT21:
56 case media::PIXEL_FORMAT_YUV420P9:
57 case media::PIXEL_FORMAT_YUV420P10:
58 case media::PIXEL_FORMAT_YUV422P9:
59 case media::PIXEL_FORMAT_YUV422P10:
60 case media::PIXEL_FORMAT_YUV444P9:
61 case media::PIXEL_FORMAT_YUV444P10:
62 case media::PIXEL_FORMAT_YUV420P12:
63 case media::PIXEL_FORMAT_YUV422P12:
64 case media::PIXEL_FORMAT_YUV444P12:
65 case media::PIXEL_FORMAT_I422:
66 // Above pixel format doesn't match exact buffer format. However, this
67 // mismatch is fine because hardware overlay needs to know the buffer
68 // format and above format resources never be overlayed.
69 return gfx::BufferFormat::RGBA_8888;
70 case media::PIXEL_FORMAT_UNKNOWN:
71 break;
72 }
73 NOTREACHED();
74 return gfx::BufferFormat::RGBA_8888;
75 }
76
77 } // namespace
78
26 // static 79 // static
27 std::unique_ptr<VideoLayerImpl> VideoLayerImpl::Create( 80 std::unique_ptr<VideoLayerImpl> VideoLayerImpl::Create(
28 LayerTreeImpl* tree_impl, 81 LayerTreeImpl* tree_impl,
29 int id, 82 int id,
30 VideoFrameProvider* provider, 83 VideoFrameProvider* provider,
31 media::VideoRotation video_rotation) { 84 media::VideoRotation video_rotation) {
32 DCHECK(tree_impl->task_runner_provider()->IsMainThreadBlocked()); 85 DCHECK(tree_impl->task_runner_provider()->IsMainThreadBlocked());
33 DCHECK(tree_impl->task_runner_provider()->IsImplThread()); 86 DCHECK(tree_impl->task_runner_provider()->IsImplThread());
34 87
35 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl = 88 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl =
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 frame_resource_multiplier_ = external_resources.multiplier; 174 frame_resource_multiplier_ = external_resources.multiplier;
122 frame_bits_per_channel_ = external_resources.bits_per_channel; 175 frame_bits_per_channel_ = external_resources.bits_per_channel;
123 176
124 DCHECK_EQ(external_resources.mailboxes.size(), 177 DCHECK_EQ(external_resources.mailboxes.size(),
125 external_resources.release_callbacks.size()); 178 external_resources.release_callbacks.size());
126 ResourceProvider::ResourceIdArray resource_ids; 179 ResourceProvider::ResourceIdArray resource_ids;
127 resource_ids.reserve(external_resources.mailboxes.size()); 180 resource_ids.reserve(external_resources.mailboxes.size());
128 for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) { 181 for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) {
129 unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox( 182 unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox(
130 external_resources.mailboxes[i], 183 external_resources.mailboxes[i],
184 GetBufferFormat(external_resources.pixel_format),
131 SingleReleaseCallbackImpl::Create( 185 SingleReleaseCallbackImpl::Create(
132 external_resources.release_callbacks[i]), 186 external_resources.release_callbacks[i]),
133 external_resources.read_lock_fences_enabled); 187 external_resources.read_lock_fences_enabled);
134 frame_resources_.push_back(FrameResource( 188 frame_resources_.push_back(FrameResource(
135 resource_id, external_resources.mailboxes[i].size_in_pixels(), 189 resource_id, external_resources.mailboxes[i].size_in_pixels(),
136 external_resources.mailboxes[i].is_overlay_candidate())); 190 external_resources.mailboxes[i].is_overlay_candidate()));
137 resource_ids.push_back(resource_id); 191 resource_ids.push_back(resource_id);
138 } 192 }
139 resource_provider->GenerateSyncTokenForResources(resource_ids); 193 resource_provider->GenerateSyncTokenForResources(resource_ids);
140 194
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 void VideoLayerImpl::SetNeedsRedraw() { 426 void VideoLayerImpl::SetNeedsRedraw() {
373 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds()))); 427 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds())));
374 layer_tree_impl()->SetNeedsRedraw(); 428 layer_tree_impl()->SetNeedsRedraw();
375 } 429 }
376 430
377 const char* VideoLayerImpl::LayerTypeAsString() const { 431 const char* VideoLayerImpl::LayerTypeAsString() const {
378 return "cc::VideoLayerImpl"; 432 return "cc::VideoLayerImpl";
379 } 433 }
380 434
381 } // namespace cc 435 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/output/overlay_candidate.cc » ('j') | cc/output/overlay_candidate.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698