| OLD | NEW |
| 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 17 matching lines...) Expand all Loading... |
| 28 #include "third_party/skia/include/core/SkCanvas.h" | 28 #include "third_party/skia/include/core/SkCanvas.h" |
| 29 #include "ui/gfx/geometry/size_conversions.h" | 29 #include "ui/gfx/geometry/size_conversions.h" |
| 30 | 30 |
| 31 namespace cc { | 31 namespace cc { |
| 32 | 32 |
| 33 namespace { | 33 namespace { |
| 34 | 34 |
| 35 const ResourceFormat kRGBResourceFormat = RGBA_8888; | 35 const ResourceFormat kRGBResourceFormat = RGBA_8888; |
| 36 | 36 |
| 37 VideoFrameExternalResources::ResourceType ResourceTypeForVideoFrame( | 37 VideoFrameExternalResources::ResourceType ResourceTypeForVideoFrame( |
| 38 media::VideoFrame* video_frame, | 38 media::VideoFrame* video_frame) { |
| 39 bool use_stream_video_draw_quad) { | |
| 40 switch (video_frame->format()) { | 39 switch (video_frame->format()) { |
| 41 case media::PIXEL_FORMAT_ARGB: | 40 case media::PIXEL_FORMAT_ARGB: |
| 42 case media::PIXEL_FORMAT_XRGB: | 41 case media::PIXEL_FORMAT_XRGB: |
| 43 case media::PIXEL_FORMAT_UYVY: | 42 case media::PIXEL_FORMAT_UYVY: |
| 44 switch (video_frame->mailbox_holder(0).texture_target) { | 43 switch (video_frame->mailbox_holder(0).texture_target) { |
| 45 case GL_TEXTURE_2D: | 44 case GL_TEXTURE_2D: |
| 46 return (video_frame->format() == media::PIXEL_FORMAT_XRGB) | 45 return (video_frame->format() == media::PIXEL_FORMAT_XRGB) |
| 47 ? VideoFrameExternalResources::RGB_RESOURCE | 46 ? VideoFrameExternalResources::RGB_RESOURCE |
| 48 : VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE; | 47 : VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE; |
| 49 case GL_TEXTURE_EXTERNAL_OES: | 48 case GL_TEXTURE_EXTERNAL_OES: |
| 50 if (use_stream_video_draw_quad && | 49 return video_frame->metadata()->IsTrue( |
| 51 !video_frame->metadata()->IsTrue( | 50 media::VideoFrameMetadata::COPY_REQUIRED) |
| 52 media::VideoFrameMetadata::COPY_REQUIRED)) | 51 ? VideoFrameExternalResources::RGBA_RESOURCE |
| 53 return VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; | 52 : VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; |
| 54 return VideoFrameExternalResources::RGBA_RESOURCE; | |
| 55 case GL_TEXTURE_RECTANGLE_ARB: | 53 case GL_TEXTURE_RECTANGLE_ARB: |
| 56 return VideoFrameExternalResources::RGB_RESOURCE; | 54 return VideoFrameExternalResources::RGB_RESOURCE; |
| 57 default: | 55 default: |
| 58 NOTREACHED(); | 56 NOTREACHED(); |
| 59 break; | 57 break; |
| 60 } | 58 } |
| 61 break; | 59 break; |
| 62 case media::PIXEL_FORMAT_I420: | 60 case media::PIXEL_FORMAT_I420: |
| 63 return VideoFrameExternalResources::YUV_RESOURCE; | 61 return VideoFrameExternalResources::YUV_RESOURCE; |
| 64 break; | 62 break; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 offset(0.0f), | 165 offset(0.0f), |
| 168 multiplier(1.0f), | 166 multiplier(1.0f), |
| 169 bits_per_channel(8) {} | 167 bits_per_channel(8) {} |
| 170 | 168 |
| 171 VideoFrameExternalResources::VideoFrameExternalResources( | 169 VideoFrameExternalResources::VideoFrameExternalResources( |
| 172 const VideoFrameExternalResources& other) = default; | 170 const VideoFrameExternalResources& other) = default; |
| 173 | 171 |
| 174 VideoFrameExternalResources::~VideoFrameExternalResources() {} | 172 VideoFrameExternalResources::~VideoFrameExternalResources() {} |
| 175 | 173 |
| 176 VideoResourceUpdater::VideoResourceUpdater(ContextProvider* context_provider, | 174 VideoResourceUpdater::VideoResourceUpdater(ContextProvider* context_provider, |
| 177 ResourceProvider* resource_provider, | 175 ResourceProvider* resource_provider) |
| 178 bool use_stream_video_draw_quad) | |
| 179 : context_provider_(context_provider), | 176 : context_provider_(context_provider), |
| 180 resource_provider_(resource_provider), | 177 resource_provider_(resource_provider), |
| 181 use_stream_video_draw_quad_(use_stream_video_draw_quad), | |
| 182 weak_ptr_factory_(this) {} | 178 weak_ptr_factory_(this) {} |
| 183 | 179 |
| 184 VideoResourceUpdater::~VideoResourceUpdater() { | 180 VideoResourceUpdater::~VideoResourceUpdater() { |
| 185 for (const PlaneResource& plane_resource : all_resources_) | 181 for (const PlaneResource& plane_resource : all_resources_) |
| 186 resource_provider_->DeleteResource(plane_resource.resource_id()); | 182 resource_provider_->DeleteResource(plane_resource.resource_id()); |
| 187 } | 183 } |
| 188 | 184 |
| 189 VideoResourceUpdater::ResourceList::iterator | 185 VideoResourceUpdater::ResourceList::iterator |
| 190 VideoResourceUpdater::RecycleOrAllocateResource( | 186 VideoResourceUpdater::RecycleOrAllocateResource( |
| 191 const gfx::Size& resource_size, | 187 const gfx::Size& resource_size, |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 if (!context_provider_) | 623 if (!context_provider_) |
| 628 return VideoFrameExternalResources(); | 624 return VideoFrameExternalResources(); |
| 629 | 625 |
| 630 VideoFrameExternalResources external_resources; | 626 VideoFrameExternalResources external_resources; |
| 631 if (video_frame->metadata()->IsTrue( | 627 if (video_frame->metadata()->IsTrue( |
| 632 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)) { | 628 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)) { |
| 633 external_resources.read_lock_fences_enabled = true; | 629 external_resources.read_lock_fences_enabled = true; |
| 634 } | 630 } |
| 635 gfx::ColorSpace resource_color_space = video_frame->ColorSpace(); | 631 gfx::ColorSpace resource_color_space = video_frame->ColorSpace(); |
| 636 | 632 |
| 637 external_resources.type = | 633 external_resources.type = ResourceTypeForVideoFrame(video_frame.get()); |
| 638 ResourceTypeForVideoFrame(video_frame.get(), use_stream_video_draw_quad_); | |
| 639 if (external_resources.type == VideoFrameExternalResources::NONE) { | 634 if (external_resources.type == VideoFrameExternalResources::NONE) { |
| 640 DLOG(ERROR) << "Unsupported Texture format" | 635 DLOG(ERROR) << "Unsupported Texture format" |
| 641 << media::VideoPixelFormatToString(video_frame->format()); | 636 << media::VideoPixelFormatToString(video_frame->format()); |
| 642 return external_resources; | 637 return external_resources; |
| 643 } | 638 } |
| 644 if (external_resources.type == VideoFrameExternalResources::RGB_RESOURCE) | 639 if (external_resources.type == VideoFrameExternalResources::RGB_RESOURCE) |
| 645 resource_color_space = resource_color_space.GetAsFullRangeRGB(); | 640 resource_color_space = resource_color_space.GetAsFullRangeRGB(); |
| 646 | 641 |
| 647 const size_t num_planes = media::VideoFrame::NumPlanes(video_frame->format()); | 642 const size_t num_planes = media::VideoFrame::NumPlanes(video_frame->format()); |
| 648 for (size_t i = 0; i < num_planes; ++i) { | 643 for (size_t i = 0; i < num_planes; ++i) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 if (lost_resource) { | 699 if (lost_resource) { |
| 705 resource_it->clear_refs(); | 700 resource_it->clear_refs(); |
| 706 updater->DeleteResource(resource_it); | 701 updater->DeleteResource(resource_it); |
| 707 return; | 702 return; |
| 708 } | 703 } |
| 709 | 704 |
| 710 resource_it->remove_ref(); | 705 resource_it->remove_ref(); |
| 711 } | 706 } |
| 712 | 707 |
| 713 } // namespace cc | 708 } // namespace cc |
| OLD | NEW |