Changeset 65756 in webkit
- Timestamp:
- Aug 20, 2010 3:12:01 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r65755 r65756 1 2010-08-20 Adrienne Walker <enne@google.com> 2 3 Reviewed by Kenneth Russell. 4 5 Implement HTMLVideoElement support for texImage2D and texSubImage2D 6 https://bugs.webkit.org/show_bug.cgi?id=33852 7 8 * fast/canvas/webgl/resources/quadrants.mp4: Added. 9 * fast/canvas/webgl/resources/quadrants.ogv: Added. 10 * fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-expected.txt: Added. 11 * fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html: Added. 12 1 13 2010-08-20 Dumitru Daniliuc <dumi@chromium.org> 2 14 -
trunk/WebCore/ChangeLog
r65755 r65756 1 2010-08-20 Adrienne Walker <enne@google.com> 2 3 Reviewed by Kenneth Russell. 4 5 Implement HTMLVideoElement support for texImage2D and texSubImage2D 6 https://bugs.webkit.org/show_bug.cgi?id=33852 7 8 Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html 9 10 * html/canvas/WebGLRenderingContext.cpp: 11 (WebCore::WebGLRenderingContext::WebGLRenderingContext): 12 (WebCore::WebGLRenderingContext::videoFrameToImage): 13 (WebCore::WebGLRenderingContext::texImage2D): 14 (WebCore::WebGLRenderingContext::texSubImage2D): 15 (WebCore::WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache): 16 (WebCore::WebGLRenderingContext::LRUImageBufferCache::imageBuffer): 17 (WebCore::WebGLRenderingContext::LRUImageBufferCache::bubbleToFront): 18 * html/canvas/WebGLRenderingContext.h: 19 1 20 2010-08-20 Dumitru Daniliuc <dumi@chromium.org> 2 21 -
trunk/WebCore/html/canvas/WebGLRenderingContext.cpp
r65449 r65756 37 37 #include "HTMLCanvasElement.h" 38 38 #include "HTMLImageElement.h" 39 #include "HTMLVideoElement.h" 39 40 #include "ImageBuffer.h" 40 41 #include "ImageData.h" … … 99 100 , m_markedCanvasDirty(false) 100 101 , m_activeTextureUnit(0) 102 , m_videoCache(4) 101 103 , m_packAlignment(4) 102 104 , m_unpackAlignment(4) … … 2189 2191 } 2190 2192 2193 PassRefPtr<Image> WebGLRenderingContext::videoFrameToImage(HTMLVideoElement* video) 2194 { 2195 if (!video || !video->videoWidth() || !video->videoHeight()) { 2196 m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); 2197 return 0; 2198 } 2199 IntSize size(video->videoWidth(), video->videoHeight()); 2200 ImageBuffer* buf = m_videoCache.imageBuffer(size); 2201 if (!buf) { 2202 m_context->synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY); 2203 return 0; 2204 } 2205 IntRect destRect(0, 0, size.width(), size.height()); 2206 // FIXME: Turn this into a GPU-GPU texture copy instead of CPU readback. 2207 video->paintCurrentFrameInContext(buf->context(), destRect); 2208 return buf->copyImage(); 2209 } 2210 2191 2211 void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned internalformat, 2192 2212 unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode& ec) 2193 2213 { 2194 // FIXME: Need to implement this call2195 UNUSED_PARAM(target);2196 UNUSED_PARAM(level);2197 UNUSED_PARAM(internalformat);2198 UNUSED_PARAM(format);2199 UNUSED_PARAM(type);2200 UNUSED_PARAM(video);2201 2202 2214 ec = 0; 2203 cleanupAfterGraphicsCall(false); 2215 RefPtr<Image> image = videoFrameToImage(video); 2216 if (!video) 2217 return; 2218 texImage2DImpl(target, level, internalformat, format, type, image.get(), m_unpackFlipY, m_unpackPremultiplyAlpha, ec); 2204 2219 } 2205 2220 … … 2343 2358 unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode& ec) 2344 2359 { 2345 // FIXME: Need to implement this call2346 UNUSED_PARAM(target);2347 UNUSED_PARAM(level);2348 UNUSED_PARAM(xoffset);2349 UNUSED_PARAM(yoffset);2350 UNUSED_PARAM(format);2351 UNUSED_PARAM(type);2352 UNUSED_PARAM(video);2353 2360 ec = 0; 2354 cleanupAfterGraphicsCall(false); 2361 RefPtr<Image> image = videoFrameToImage(video); 2362 if (!video) 2363 return; 2364 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image.get(), m_unpackFlipY, m_unpackPremultiplyAlpha, ec); 2355 2365 } 2356 2366 … … 3565 3575 } 3566 3576 3577 WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache(int capacity) 3578 : m_buffers(new OwnPtr<ImageBuffer>[capacity]) 3579 , m_capacity(capacity) 3580 { 3581 } 3582 3583 ImageBuffer* WebGLRenderingContext::LRUImageBufferCache::imageBuffer(const IntSize& size) 3584 { 3585 int i; 3586 for (i = 0; i < m_capacity; ++i) { 3587 ImageBuffer* buf = m_buffers[i].get(); 3588 if (!buf) 3589 break; 3590 if (buf->size() != size) 3591 continue; 3592 bubbleToFront(i); 3593 return buf; 3594 } 3595 3596 OwnPtr<ImageBuffer> temp = ImageBuffer::create(size); 3597 if (!temp) 3598 return 0; 3599 i = std::min(m_capacity - 1, i); 3600 m_buffers[i] = temp.release(); 3601 3602 ImageBuffer* buf = m_buffers[i].get(); 3603 bubbleToFront(i); 3604 return buf; 3605 } 3606 3607 void WebGLRenderingContext::LRUImageBufferCache::bubbleToFront(int idx) 3608 { 3609 for (int i = idx; i > 0; --i) 3610 m_buffers[i].swap(m_buffers[i-1]); 3611 } 3612 3567 3613 } // namespace WebCore 3568 3614 -
trunk/WebCore/html/canvas/WebGLRenderingContext.h
r65449 r65756 36 36 #include "WebGLGetInfo.h" 37 37 38 #include <wtf/OwnArrayPtr.h> 39 38 40 namespace WebCore { 39 41 … … 50 52 class HTMLImageElement; 51 53 class HTMLVideoElement; 54 class ImageBuffer; 52 55 class ImageData; 53 56 class WebKitCSSMatrix; … … 321 324 bool validateWebGLObject(WebGLObject* object); 322 325 326 PassRefPtr<Image> videoFrameToImage(HTMLVideoElement* video); 327 323 328 OwnPtr<GraphicsContext3D> m_context; 324 329 bool m_needsUpdate; … … 388 393 RefPtr<WebGLTexture> m_blackTextureCubeMap; 389 394 395 // Fixed-size cache of reusable image buffers for video texImage2D calls. 396 class LRUImageBufferCache { 397 public: 398 LRUImageBufferCache(int capacity); 399 // The pointer returned is owned by the image buffer map. 400 ImageBuffer* imageBuffer(const IntSize& size); 401 private: 402 void bubbleToFront(int idx); 403 OwnArrayPtr<OwnPtr<ImageBuffer> > m_buffers; 404 int m_capacity; 405 }; 406 LRUImageBufferCache m_videoCache; 407 390 408 int m_maxTextureSize; 391 409 int m_maxCubeMapTextureSize;
Note: See TracChangeset
for help on using the changeset viewer.