| 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 16 matching lines...) Expand all Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |