| 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 | 
|---|