diff options
Diffstat (limited to 'chromium/media/renderers/video_resource_updater.cc')
-rw-r--r-- | chromium/media/renderers/video_resource_updater.cc | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/chromium/media/renderers/video_resource_updater.cc b/chromium/media/renderers/video_resource_updater.cc index 27678f2b65f..5667c75131c 100644 --- a/chromium/media/renderers/video_resource_updater.cc +++ b/chromium/media/renderers/video_resource_updater.cc @@ -13,6 +13,7 @@ #include "base/atomic_sequence_num.h" #include "base/bind.h" #include "base/bit_cast.h" +#include "base/logging.h" #include "base/memory/shared_memory_mapping.h" #include "base/memory/unsafe_shared_memory_region.h" #include "base/strings/stringprintf.h" @@ -121,6 +122,12 @@ VideoFrameResourceType ExternalResourceTypeForHardwarePlanes( buffer_formats[1] = gfx::BufferFormat::RG_88; return VideoFrameResourceType::YUV; + case PIXEL_FORMAT_P016LE: + DCHECK_EQ(num_textures, 1); + // TODO(mcasas): Support other formats such as e.g. P012. + buffer_formats[0] = gfx::BufferFormat::P010; + return VideoFrameResourceType::RGB; + case PIXEL_FORMAT_UYVY: NOTREACHED(); FALLTHROUGH; @@ -143,7 +150,6 @@ VideoFrameResourceType ExternalResourceTypeForHardwarePlanes( case PIXEL_FORMAT_YUV444P12: case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_XBGR: - case PIXEL_FORMAT_P016LE: case PIXEL_FORMAT_UNKNOWN: break; } @@ -465,9 +471,9 @@ VideoResourceUpdater::~VideoResourceUpdater() { void VideoResourceUpdater::ObtainFrameResources( scoped_refptr<VideoFrame> video_frame) { - if (video_frame->metadata()->GetUnguessableToken( - VideoFrameMetadata::OVERLAY_PLANE_ID, &overlay_plane_id_)) { + if (video_frame->metadata()->overlay_plane_id.has_value()) { // This is a hole punching VideoFrame, there is nothing to display. + overlay_plane_id_ = *video_frame->metadata()->overlay_plane_id; frame_resource_type_ = VideoFrameResourceType::VIDEO_HOLE; return; } @@ -584,8 +590,8 @@ void VideoResourceUpdater::AppendQuads(viz::RenderPass* render_pass, frame_resources_.size() > 3 ? frame_resources_[3].id : 0, frame->ColorSpace(), frame_resource_offset_, frame_resource_multiplier_, frame_bits_per_channel_); - if (frame->metadata()->IsTrue(VideoFrameMetadata::PROTECTED_VIDEO)) { - if (frame->metadata()->IsTrue(VideoFrameMetadata::HW_PROTECTED)) { + if (frame->metadata()->protected_video) { + if (frame->metadata()->hw_protected) { yuv_video_quad->protected_video_type = gfx::ProtectedVideoType::kHardwareProtected; } else { @@ -613,8 +619,8 @@ void VideoResourceUpdater::AppendQuads(viz::RenderPass* render_pass, bool nearest_neighbor = false; gfx::ProtectedVideoType protected_video_type = gfx::ProtectedVideoType::kClear; - if (frame->metadata()->IsTrue(VideoFrameMetadata::PROTECTED_VIDEO)) { - if (frame->metadata()->IsTrue(VideoFrameMetadata::HW_PROTECTED)) + if (frame->metadata()->protected_video) { + if (frame->metadata()->hw_protected) protected_video_type = gfx::ProtectedVideoType::kHardwareProtected; else protected_video_type = gfx::ProtectedVideoType::kSoftwareProtected; @@ -814,8 +820,7 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( VideoFrameExternalResources external_resources; gfx::ColorSpace resource_color_space = video_frame->ColorSpace(); - bool copy_required = - video_frame->metadata()->IsTrue(VideoFrameMetadata::COPY_REQUIRED); + bool copy_required = video_frame->metadata()->copy_required; GLuint target = video_frame->mailbox_holder(0).texture_target; // If |copy_required| then we will copy into a GL_TEXTURE_2D target. @@ -857,19 +862,18 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( auto transfer_resource = viz::TransferableResource::MakeGL( mailbox_holder.mailbox, GL_LINEAR, mailbox_holder.texture_target, mailbox_holder.sync_token, plane_size, - video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY)); + video_frame->metadata()->allow_overlay); transfer_resource.color_space = resource_color_space; transfer_resource.read_lock_fences_enabled = - video_frame->metadata()->IsTrue( - VideoFrameMetadata::READ_LOCK_FENCES_ENABLED); + video_frame->metadata()->read_lock_fences_enabled; transfer_resource.format = viz::GetResourceFormat(buffer_formats[i]); transfer_resource.ycbcr_info = video_frame->ycbcr_info(); #if defined(OS_ANDROID) transfer_resource.is_backed_by_surface_texture = - video_frame->metadata()->IsTrue(VideoFrameMetadata::TEXTURE_OWNER); - transfer_resource.wants_promotion_hint = video_frame->metadata()->IsTrue( - VideoFrameMetadata::WANTS_PROMOTION_HINT); + video_frame->metadata()->texture_owner; + transfer_resource.wants_promotion_hint = + video_frame->metadata()->wants_promotion_hint; #endif external_resources.resources.push_back(std::move(transfer_resource)); external_resources.release_callbacks.push_back( @@ -990,11 +994,19 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForSoftwarePlanes( SkBitmap sk_bitmap; sk_bitmap.installPixels(info, software_resource->pixels(), info.minRowBytes()); + // This is software path, so |canvas| and |video_frame| are always + // backed by software. cc::SkiaPaintCanvas canvas(sk_bitmap); - - // This is software path, so canvas and video_frame are always backed - // by software. - video_renderer_->Copy(video_frame, &canvas, nullptr); + cc::PaintFlags flags; + flags.setBlendMode(SkBlendMode::kSrc); + flags.setFilterQuality(kLow_SkFilterQuality); + + // Note that PaintCanvasVideoRenderer::Copy would copy to the origin, + // not |video_frame->visible_rect|, so call Paint instead. + // https://crbug.com/1090435 + video_renderer_->Paint(video_frame, &canvas, + gfx::RectF(video_frame->visible_rect()), flags, + media::kNoTransformation, nullptr); } else { HardwarePlaneResource* hardware_resource = plane_resource->AsHardware(); size_t bytes_per_row = viz::ResourceSizes::CheckedWidthInBytes<size_t>( @@ -1242,7 +1254,7 @@ void VideoResourceUpdater::RecycleResource(uint32_t plane_resource_id, if (resource_it == all_resources_.end()) return; - if (context_provider_ && sync_token.HasData()) { + if ((raster_context_provider_ || context_provider_) && sync_token.HasData()) { auto* gl = raster_context_provider_ ? raster_context_provider_->ContextGL() : context_provider_->ContextGL(); gl->WaitSyncTokenCHROMIUM(sync_token.GetConstData()); |