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

Side by Side Diff: cc/resources/video_resource_updater.cc

Issue 2763223003: Reland of cc: Don't use StreamVideoDrawQuad on any platform but Android. (Closed)
Patch Set: Address Dana's comments. Fix unittest. Created 3 years, 9 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 "cc/resources/video_resource_updater.h" 5 #include "cc/resources/video_resource_updater.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 16 matching lines...) Expand all
27 #include "third_party/skia/include/core/SkCanvas.h" 27 #include "third_party/skia/include/core/SkCanvas.h"
28 #include "ui/gfx/geometry/size_conversions.h" 28 #include "ui/gfx/geometry/size_conversions.h"
29 29
30 namespace cc { 30 namespace cc {
31 31
32 namespace { 32 namespace {
33 33
34 const ResourceFormat kRGBResourceFormat = RGBA_8888; 34 const ResourceFormat kRGBResourceFormat = RGBA_8888;
35 35
36 VideoFrameExternalResources::ResourceType ResourceTypeForVideoFrame( 36 VideoFrameExternalResources::ResourceType ResourceTypeForVideoFrame(
37 media::VideoFrame* video_frame) { 37 media::VideoFrame* video_frame,
38 bool use_stream_video_draw_quad) {
38 switch (video_frame->format()) { 39 switch (video_frame->format()) {
39 case media::PIXEL_FORMAT_ARGB: 40 case media::PIXEL_FORMAT_ARGB:
40 case media::PIXEL_FORMAT_XRGB: 41 case media::PIXEL_FORMAT_XRGB:
41 case media::PIXEL_FORMAT_UYVY: 42 case media::PIXEL_FORMAT_UYVY:
42 switch (video_frame->mailbox_holder(0).texture_target) { 43 switch (video_frame->mailbox_holder(0).texture_target) {
43 case GL_TEXTURE_2D: 44 case GL_TEXTURE_2D:
44 return (video_frame->format() == media::PIXEL_FORMAT_XRGB) 45 return (video_frame->format() == media::PIXEL_FORMAT_XRGB)
45 ? VideoFrameExternalResources::RGB_RESOURCE 46 ? VideoFrameExternalResources::RGB_RESOURCE
46 : VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE; 47 : VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE;
47 case GL_TEXTURE_EXTERNAL_OES: 48 case GL_TEXTURE_EXTERNAL_OES:
48 return video_frame->metadata()->IsTrue( 49 if (use_stream_video_draw_quad &&
49 media::VideoFrameMetadata::COPY_REQUIRED) 50 !video_frame->metadata()->IsTrue(
50 ? VideoFrameExternalResources::RGBA_RESOURCE 51 media::VideoFrameMetadata::COPY_REQUIRED))
51 : VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; 52 return VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE;
53 return VideoFrameExternalResources::RGBA_RESOURCE;
52 case GL_TEXTURE_RECTANGLE_ARB: 54 case GL_TEXTURE_RECTANGLE_ARB:
53 return VideoFrameExternalResources::RGB_RESOURCE; 55 return VideoFrameExternalResources::RGB_RESOURCE;
54 default: 56 default:
55 NOTREACHED(); 57 NOTREACHED();
56 break; 58 break;
57 } 59 }
58 break; 60 break;
59 case media::PIXEL_FORMAT_I420: 61 case media::PIXEL_FORMAT_I420:
60 return VideoFrameExternalResources::YUV_RESOURCE; 62 return VideoFrameExternalResources::YUV_RESOURCE;
61 break; 63 break;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 offset(0.0f), 166 offset(0.0f),
165 multiplier(1.0f), 167 multiplier(1.0f),
166 bits_per_channel(8) {} 168 bits_per_channel(8) {}
167 169
168 VideoFrameExternalResources::VideoFrameExternalResources( 170 VideoFrameExternalResources::VideoFrameExternalResources(
169 const VideoFrameExternalResources& other) = default; 171 const VideoFrameExternalResources& other) = default;
170 172
171 VideoFrameExternalResources::~VideoFrameExternalResources() {} 173 VideoFrameExternalResources::~VideoFrameExternalResources() {}
172 174
173 VideoResourceUpdater::VideoResourceUpdater(ContextProvider* context_provider, 175 VideoResourceUpdater::VideoResourceUpdater(ContextProvider* context_provider,
174 ResourceProvider* resource_provider) 176 ResourceProvider* resource_provider,
177 bool use_stream_video_draw_quad)
175 : context_provider_(context_provider), 178 : context_provider_(context_provider),
176 resource_provider_(resource_provider) { 179 resource_provider_(resource_provider),
177 } 180 use_stream_video_draw_quad_(use_stream_video_draw_quad) {}
178 181
179 VideoResourceUpdater::~VideoResourceUpdater() { 182 VideoResourceUpdater::~VideoResourceUpdater() {
180 for (const PlaneResource& plane_resource : all_resources_) 183 for (const PlaneResource& plane_resource : all_resources_)
181 resource_provider_->DeleteResource(plane_resource.resource_id()); 184 resource_provider_->DeleteResource(plane_resource.resource_id());
182 } 185 }
183 186
184 VideoResourceUpdater::ResourceList::iterator 187 VideoResourceUpdater::ResourceList::iterator
185 VideoResourceUpdater::RecycleOrAllocateResource( 188 VideoResourceUpdater::RecycleOrAllocateResource(
186 const gfx::Size& resource_size, 189 const gfx::Size& resource_size,
187 ResourceFormat resource_format, 190 ResourceFormat resource_format,
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 if (!context_provider_) 703 if (!context_provider_)
701 return VideoFrameExternalResources(); 704 return VideoFrameExternalResources();
702 705
703 VideoFrameExternalResources external_resources; 706 VideoFrameExternalResources external_resources;
704 if (video_frame->metadata()->IsTrue( 707 if (video_frame->metadata()->IsTrue(
705 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)) { 708 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)) {
706 external_resources.read_lock_fences_enabled = true; 709 external_resources.read_lock_fences_enabled = true;
707 } 710 }
708 gfx::ColorSpace resource_color_space = video_frame->ColorSpace(); 711 gfx::ColorSpace resource_color_space = video_frame->ColorSpace();
709 712
710 external_resources.type = ResourceTypeForVideoFrame(video_frame.get()); 713 external_resources.type =
714 ResourceTypeForVideoFrame(video_frame.get(), use_stream_video_draw_quad_);
711 if (external_resources.type == VideoFrameExternalResources::NONE) { 715 if (external_resources.type == VideoFrameExternalResources::NONE) {
712 DLOG(ERROR) << "Unsupported Texture format" 716 DLOG(ERROR) << "Unsupported Texture format"
713 << media::VideoPixelFormatToString(video_frame->format()); 717 << media::VideoPixelFormatToString(video_frame->format());
714 return external_resources; 718 return external_resources;
715 } 719 }
716 if (external_resources.type == VideoFrameExternalResources::YUV_RESOURCE) 720 if (external_resources.type == VideoFrameExternalResources::YUV_RESOURCE)
717 resource_color_space = resource_color_space.GetAsFullRangeRGB(); 721 resource_color_space = resource_color_space.GetAsFullRangeRGB();
718 722
719 const size_t num_planes = media::VideoFrame::NumPlanes(video_frame->format()); 723 const size_t num_planes = media::VideoFrame::NumPlanes(video_frame->format());
720 for (size_t i = 0; i < num_planes; ++i) { 724 for (size_t i = 0; i < num_planes; ++i) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 if (lost_resource) { 780 if (lost_resource) {
777 resource_it->clear_refs(); 781 resource_it->clear_refs();
778 updater->DeleteResource(resource_it); 782 updater->DeleteResource(resource_it);
779 return; 783 return;
780 } 784 }
781 785
782 resource_it->remove_ref(); 786 resource_it->remove_ref();
783 } 787 }
784 788
785 } // namespace cc 789 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698