Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(961)

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 2749653003: Prototype HTMLVideoElement properties for WebGL texImage2D (Closed)
Patch Set: move fields to WebGLTexture Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 5267 matching lines...) Expand 10 before | Expand all | Expand 10 after
5278 // to system memory if possible. Otherwise, it will fall back to the normal 5278 // to system memory if possible. Otherwise, it will fall back to the normal
5279 // SW path. 5279 // SW path.
5280 5280
5281 // Note that neither 5281 // Note that neither
5282 // HTMLVideoElement::copyVideoTextureToPlatformTexture nor 5282 // HTMLVideoElement::copyVideoTextureToPlatformTexture nor
5283 // ImageBuffer::copyToPlatformTexture allocate the destination texture 5283 // ImageBuffer::copyToPlatformTexture allocate the destination texture
5284 // any more. 5284 // any more.
5285 texImage2DBase(target, level, internalformat, video->videoWidth(), 5285 texImage2DBase(target, level, internalformat, video->videoWidth(),
5286 video->videoHeight(), 0, format, type, nullptr); 5286 video->videoHeight(), 0, format, type, nullptr);
5287 5287
5288 if (video->copyVideoTextureToPlatformTexture(contextGL(), texture->object(), 5288 if (video->copyVideoTextureToPlatformTexture(contextGL(), texture->object(),
DaleCurtis 2017/03/17 21:47:52 Sorry, can you instead add the parameters you want
Kai Ninomiya 2017/03/18 01:08:58 Hm, adding it to copyVideoTextureToPlatformTexture
DaleCurtis 2017/03/20 17:58:13 Is there any other way to upload a frame? Also 6 c
Ken Russell (switch to Gerrit) 2017/03/20 19:14:14 Dale, there are three different entry points on HT
DaleCurtis 2017/03/20 21:59:54 Yes, this all sounds reasonable to me for the expe
5289 m_unpackPremultiplyAlpha, 5289 m_unpackPremultiplyAlpha,
5290 m_unpackFlipY)) { 5290 m_unpackFlipY)) {
5291 texture->videoUpdateLastUploaded(video->webMediaPlayer());
5291 return; 5292 return;
5292 } 5293 }
5293 5294
5294 // Try using an accelerated image buffer, this allows YUV conversion to be 5295 // Try using an accelerated image buffer, this allows YUV conversion to be
5295 // done on the GPU. 5296 // done on the GPU.
5296 std::unique_ptr<ImageBufferSurface> surface = 5297 std::unique_ptr<ImageBufferSurface> surface =
5297 WTF::wrapUnique(new AcceleratedImageBufferSurface( 5298 WTF::wrapUnique(new AcceleratedImageBufferSurface(
5298 IntSize(video->videoWidth(), video->videoHeight()))); 5299 IntSize(video->videoWidth(), video->videoHeight())));
5299 if (surface->isValid()) { 5300 if (surface->isValid()) {
5300 std::unique_ptr<ImageBuffer> imageBuffer( 5301 std::unique_ptr<ImageBuffer> imageBuffer(
5301 ImageBuffer::create(std::move(surface))); 5302 ImageBuffer::create(std::move(surface)));
5302 if (imageBuffer) { 5303 if (imageBuffer) {
5303 // The video element paints an RGBA frame into our surface here. By 5304 // The video element paints an RGBA frame into our surface here. By
5304 // using an AcceleratedImageBufferSurface, we enable the WebMediaPlayer 5305 // using an AcceleratedImageBufferSurface, we enable the WebMediaPlayer
5305 // implementation to do any necessary color space conversion on the GPU 5306 // implementation to do any necessary color space conversion on the GPU
5306 // (though it may still do a CPU conversion and upload the results). 5307 // (though it may still do a CPU conversion and upload the results).
5307 video->paintCurrentFrame( 5308 video->paintCurrentFrame(
5308 imageBuffer->canvas(), 5309 imageBuffer->canvas(),
5309 IntRect(0, 0, video->videoWidth(), video->videoHeight()), nullptr); 5310 IntRect(0, 0, video->videoWidth(), video->videoHeight()), nullptr);
5310 5311
5311 // This is a straight GPU-GPU copy, any necessary color space conversion 5312 // This is a straight GPU-GPU copy, any necessary color space conversion
5312 // was handled in the paintCurrentFrameInContext() call. 5313 // was handled in the paintCurrentFrameInContext() call.
5313 5314
5314 if (imageBuffer->copyToPlatformTexture( 5315 if (imageBuffer->copyToPlatformTexture(
5315 functionIDToSnapshotReason(functionID), contextGL(), 5316 functionIDToSnapshotReason(functionID), contextGL(),
5316 texture->object(), internalformat, type, level, 5317 texture->object(), internalformat, type, level,
5317 m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(0, 0), 5318 m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(0, 0),
5318 IntRect(0, 0, video->videoWidth(), video->videoHeight()))) { 5319 IntRect(0, 0, video->videoWidth(), video->videoHeight()))) {
5320 texture->videoUpdateLastUploaded(video->webMediaPlayer());
5319 return; 5321 return;
5320 } 5322 }
5321 } 5323 }
5322 } 5324 }
5323 } 5325 }
5324 5326
5325 if (sourceImageRectIsDefault) { 5327 if (sourceImageRectIsDefault) {
5326 // Try using optimized CPU-GPU path for some formats: e.g. Y16 and Y8. It 5328 // Try using optimized CPU-GPU path for some formats: e.g. Y16 and Y8. It
5327 // leaves early for other formats or if frame is stored on GPU. 5329 // leaves early for other formats or if frame is stored on GPU.
5328 ScopedUnpackParametersResetRestore( 5330 ScopedUnpackParametersResetRestore(
5329 this, m_unpackFlipY || m_unpackPremultiplyAlpha); 5331 this, m_unpackFlipY || m_unpackPremultiplyAlpha);
5330 if (video->texImageImpl( 5332 if (video->texImageImpl(
5331 static_cast<WebMediaPlayer::TexImageFunctionID>(functionID), target, 5333 static_cast<WebMediaPlayer::TexImageFunctionID>(functionID), target,
5332 contextGL(), level, convertTexInternalFormat(internalformat, type), 5334 contextGL(), level, convertTexInternalFormat(internalformat, type),
5333 format, type, xoffset, yoffset, zoffset, m_unpackFlipY, 5335 format, type, xoffset, yoffset, zoffset, m_unpackFlipY,
5334 m_unpackPremultiplyAlpha && 5336 m_unpackPremultiplyAlpha &&
5335 m_unpackColorspaceConversion == GL_NONE)) 5337 m_unpackColorspaceConversion == GL_NONE)) {
5338 texture->videoUpdateLastUploaded(video->webMediaPlayer());
5336 return; 5339 return;
5340 }
5337 } 5341 }
5338 5342
5339 RefPtr<Image> image = videoFrameToImage(video); 5343 RefPtr<Image> image = videoFrameToImage(video);
5340 if (!image) 5344 if (!image)
5341 return; 5345 return;
5342 texImageImpl(functionID, target, level, internalformat, xoffset, yoffset, 5346 texImageImpl(functionID, target, level, internalformat, xoffset, yoffset,
5343 zoffset, format, type, image.get(), 5347 zoffset, format, type, image.get(),
5344 WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, 5348 WebGLImageConversion::HtmlDomVideo, m_unpackFlipY,
5345 m_unpackPremultiplyAlpha, sourceImageRect, depth, 5349 m_unpackPremultiplyAlpha, sourceImageRect, depth,
5346 unpackImageHeight); 5350 unpackImageHeight);
5351 texture->videoUpdateLastUploaded(video->webMediaPlayer());
5347 } 5352 }
5348 5353
5349 void WebGLRenderingContextBase::texImageBitmapByGPU(ImageBitmap* bitmap, 5354 void WebGLRenderingContextBase::texImageBitmapByGPU(ImageBitmap* bitmap,
5350 GLuint targetTexture, 5355 GLuint targetTexture,
5351 GLenum targetInternalformat, 5356 GLenum targetInternalformat,
5352 GLenum targetType, 5357 GLenum targetType,
5353 GLint targetLevel, 5358 GLint targetLevel,
5354 bool flipY) { 5359 bool flipY) {
5355 bitmap->bitmapImage()->copyToTexture(drawingBuffer()->contextProvider(), 5360 bitmap->bitmapImage()->copyToTexture(drawingBuffer()->contextProvider(),
5356 targetTexture, targetInternalformat, 5361 targetTexture, targetInternalformat,
(...skipping 2483 matching lines...) Expand 10 before | Expand all | Expand 10 after
7840 7845
7841 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas( 7846 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas(
7842 HTMLCanvasElementOrOffscreenCanvas& result) const { 7847 HTMLCanvasElementOrOffscreenCanvas& result) const {
7843 if (canvas()) 7848 if (canvas())
7844 result.setHTMLCanvasElement(canvas()); 7849 result.setHTMLCanvasElement(canvas());
7845 else 7850 else
7846 result.setOffscreenCanvas(offscreenCanvas()); 7851 result.setOffscreenCanvas(offscreenCanvas());
7847 } 7852 }
7848 7853
7849 } // namespace blink 7854 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698