1/* 2 * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef HTMLVideoElement_h 27#define HTMLVideoElement_h 28 29#if ENABLE(VIDEO) 30#include "HTMLMediaElement.h" 31 32namespace WebCore { 33 34class HTMLImageLoader; 35 36class HTMLVideoElement FINAL : public HTMLMediaElement { 37public: 38 static PassRefPtr<HTMLVideoElement> create(const QualifiedName&, Document*, bool); 39 40 unsigned width() const; 41 unsigned height() const; 42 43 unsigned videoWidth() const; 44 unsigned videoHeight() const; 45 46 // Fullscreen 47 void webkitEnterFullscreen(ExceptionCode&); 48 void webkitExitFullscreen(); 49 bool webkitSupportsFullscreen(); 50 bool webkitDisplayingFullscreen(); 51 52 // FIXME: Maintain "FullScreen" capitalization scheme for backwards compatibility. 53 // https://bugs.webkit.org/show_bug.cgi?id=36081 54 void webkitEnterFullScreen(ExceptionCode& ec) { webkitEnterFullscreen(ec); } 55 void webkitExitFullScreen() { webkitExitFullscreen(); } 56 57#if ENABLE(MEDIA_STATISTICS) 58 // Statistics 59 unsigned webkitDecodedFrameCount() const; 60 unsigned webkitDroppedFrameCount() const; 61#endif 62 63 // Used by canvas to gain raw pixel access 64 void paintCurrentFrameInContext(GraphicsContext*, const IntRect&); 65 66 // Used by WebGL to do GPU-GPU textures copy if possible. 67 // See more details at MediaPlayer::copyVideoTextureToPlatformTexture() defined in Source/WebCore/platform/graphics/MediaPlayer.h. 68 bool copyVideoTextureToPlatformTexture(GraphicsContext3D*, Platform3DObject texture, GC3Dint level, GC3Denum type, GC3Denum internalFormat, bool premultiplyAlpha, bool flipY); 69 70 bool shouldDisplayPosterImage() const { return displayMode() == Poster || displayMode() == PosterWaitingForVideo; } 71 72 KURL posterImageURL() const; 73 74private: 75 HTMLVideoElement(const QualifiedName&, Document*, bool); 76 77 virtual bool rendererIsNeeded(const NodeRenderingContext&); 78#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO) 79 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 80#endif 81 virtual void attach(const AttachContext& = AttachContext()) OVERRIDE; 82 virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; 83 virtual bool isPresentationAttribute(const QualifiedName&) const OVERRIDE; 84 virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE; 85 virtual bool isVideo() const { return true; } 86 virtual bool hasVideo() const { return player() && player()->hasVideo(); } 87 virtual bool supportsFullscreen() const; 88 virtual bool isURLAttribute(const Attribute&) const OVERRIDE; 89 virtual const AtomicString& imageSourceURL() const OVERRIDE; 90 91 virtual bool hasAvailableVideoFrame() const; 92 virtual void updateDisplayState(); 93 virtual void didMoveToNewDocument(Document* oldDocument) OVERRIDE; 94 virtual void setDisplayMode(DisplayMode); 95 96 OwnPtr<HTMLImageLoader> m_imageLoader; 97 98 AtomicString m_defaultPosterURL; 99}; 100 101} //namespace 102 103#endif 104#endif 105