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