/* * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ package javax.microedition.media.control; import javax.microedition.media.MediaException; /** * <code>VideoControl</code> controls the display of video. * A <code>Player</code> which supports the playback of video * must provide a <code>VideoControl</code> via its * <code>getControl</code> and <code>getControls</code> * method. * */ public interface VideoControl extends GUIControl { /** * This defines a mode on how the video is displayed. * It is used in conjunction with * <a href="#initDisplayMode(int, java.lang.Object)"> * <code>initDisplayMode</code></a>. * <p> * <code>USE_DIRECT_VIDEO</code> mode can only be used * on platforms with LCDUI support. * <p> * When <code>USE_DIRECT_VIDEO</code> is specified for * <code>initDisplayMode</code>, the <code>arg</code> * argument must not be null and must be a * <code>javax.microedition.lcdui.Canvas</code> or a subclass of it. * In this mode, the video is directly * rendered onto the canvas. The region where the video * is rendered can be set by the <code>setDisplayLocation</code> * method. By default, the location is (0, 0). * Drawing any graphics or rendering other video at the same * region on the canvas may not be supported. * <p> * <code>initDisplayMode</code> * returns <code>null</code> in this mode. * <p> * Here is one sample usage scenario: * <pre> * <code> * javax.microedition.lcdui.Canvas canvas; * // canvas must be created before being used in the following code. * * try { * Player p = Manager.createPlayer("http://mymachine/abc.mpg"); * p.realize(); * VideoControl vc; * if ((vc = (VideoControl)p.getControl("VideoControl")) != null) { * vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, canvas); * vc.setVisible(true); * } * p.start(); * } catch (MediaException pe) { * } catch (IOException ioe) { * } * </code> * </pre> * <p> * Value 1 is assigned to <code>USE_DIRECT_VIDEO</code>. */ int USE_DIRECT_VIDEO = 1; /** * Initialize the mode on how the video is displayed. * This method must be called before video can be displayed. * <p> * Two modes are defined: * <ul> * <li> <a href="GUIControl.html#USE_GUI_PRIMITIVE"><code>USE_GUI_PRIMITIVE</code></a> (inherited from GUIControl) * <li> <a href="#USE_DIRECT_VIDEO"><code>USE_DIRECT_VIDEO</code></a> * </ul> * On platforms with LCDUI support, both modes must be supported. * * @param mode The video mode that determines how video is * displayed. It can be <code>USE_GUI_PRIMITIVE</code>, * <code>USE_DIRECT_VIDEO</code> or an implementation- * specific mode. * * @param arg The exact semantics of this argument is * specified in the respective mode definitions. * * @return The exact semantics and type of the object returned * are specified in the respective mode definitions. * * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> is called again after it has * previously been called successfully. * * @exception IllegalArgumentException Thrown if * the <code>mode</code> or <code>arg</code> * argument is invalid. <code>mode</code> must be * <code>USE_GUI_PRIMITIVE</code>, * <code>USE_DIRECT_VIDEO</code>, or a custom mode * supported by this implementation. * <code>arg</code> must conform to the * conditions defined by the * respective mode definitions. * Refer to the mode definitions for the required type * of <code>arg</code>. */ Object initDisplayMode(int mode, Object arg); /** * Set the location of the video with respect to * the canvas where the video is displayed. * <p> * This method only works when the <code>USE_DIRECT_VIDEO</code> * mode is set. In <code>USE_GUI_PRIMITIVE</code> mode, * this call will be ignored. * <p> * The location is specified in pixel values relative to the * upper left hand corner of the GUI object. * <p> * By default, video appears at location (0,0). * <p> * The location can be given in negative values or can be * greater than the actual size of the canvas. When * that happens, the video should be clipped to the * boundaries of the canvas. * * @param x The x coordinate (in pixels) of the video location. * @param y The y coordinate (in pixels) of the video location. * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> has not been called. */ void setDisplayLocation(int x, int y); /** * Return the X-coordinate of the video with respect * to the GUI object where the video is displayed. * The coordinate is specified in pixel values relative to the * upper left hand corner of the GUI object. * <p> * The return value is undefined if <code>initDisplayMode</code> * has not been called. * * @return the X-coordinate of the video. */ int getDisplayX(); /** * Return the Y-coordinate of the video with respective * to the GUI object where the video is displayed. * The coordinate is specified in pixel values relative to the * upper left hand corner of the GUI object. * <p> * The return value is undefined if <code>initDisplayMode</code> * has not been called. * * @return the Y-coordinate of the video. */ int getDisplayY(); /** * Show or hide the video. * <p> * If <code>USE_GUI_PRIMITIVE</code> is set, the video by * default is shown when the GUI primitive is displayed. * If <code>USE_DIRECT_VIDEO</code> is set, the video by * default is not shown when the canvas is displayed * until <code>setVisible(true)</code> is called. If * the canvas is removed from the screen, the video * will not be displayed. * * @param visible Show the video if true, hide it otherwise. * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> has not been called. */ void setVisible(boolean visible); /** * Resize the video image. * <p> * If the video mode is set to <code>USE_DIRECT_VIDEO</code>, * setting the size of the video will not * affect the size of the GUI object that the video is * displayed. * If the video is scaled to beyond the size of the * GUI object, the video will be clipped. * <p> * If the video mode is set to <code>USE_GUI_PRIMITIVE</code>, * Scaling the video will also scale the GUI object. * <p> * The actual scaling algorithm is left up * to the underlying implementation. If * the dimensions of the requested display size are smaller than * the dimensions of the video clip, some implementations may * choose to merely clip the video while other implementations * may resize the video. * <p> * If the dimensions of the requested display size are bigger than * the dimensions of the video clip, some implementations may * resize the video while others may leave the video clip in the * original size and just enlarge the display region. It is * left up to the implementation * where the video clip is placed in the display region in this * instance (i.e., it can be in the center of the window or * in a corner of the window). * * @param width Desired width (in pixels) of the display window * @param height Desired height (in pixels) of the display window * @exception IllegalArgumentException Thrown if the * given <code>width</code> and <code>height</code> are * non-positive values. * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> has not been called. * @exception MediaException Thrown if resizing is not supported or * the operation failed due to hardware or software limitations. */ void setDisplaySize(int width, int height) throws MediaException; /** * Set the size of the render region for the video clip to be * fullscreen. It is left up to the underlying implementation how * fullscreen mode is * implemented and what actual dimensions constitutes fullscreen. * This is useful when the application does not know the actual * width and height dimensions * that are needed to make setDisplaySize(width, height) go to * fullscreen mode. * For example, on a device with a 400 pixel wide by 200 pixel * high screen, a video * clip that is 50 pixels wide by 100 pixels high in fullscreen * mode may be * 100 pixels wide by 200 pixels high if the underlying implementation * wants * to preserve the aspect ratio. In this case, an exception * is not thrown. * @param fullScreenMode Indicates whether or not to render * in full screen mode * @exception MediaException Thrown if resizing to full screen size * is not supported. * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> has not been called. */ void setDisplayFullScreen(boolean fullScreenMode) throws MediaException; /** * Return the width of the source video. The * width must be a positive number. * @return the width of the source video */ int getSourceWidth(); /** * Return the height of the source video. The * height must be a positive number. * @return the height of the source video */ int getSourceHeight(); /** * Return the actual width of the current render video. * * @return width of the display video * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> has not been called. */ int getDisplayWidth(); /** * Return the actual height of the current render video. * * @return height of the display video * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> has not been called. */ int getDisplayHeight(); /** * Get a snapshot of the displayed content. Features and format * of the captured image are specified by <code>imageType</code>. * Supported formats can be queried from <code>System.getProperty</code> * with * <a href="../../../../overview-summary.html#video.snapshot.encodings"> * <code>video.snapshot.encodings</code></a> as the key. * The first format in the supported list is the default capture format. * * @param imageType Format and resolution of the returned image. * If <code>null</code> is given, the default capture format is used. * @return image as a byte array in required format. * @exception IllegalStateException Thrown if * <code>initDisplayMode</code> has not been called. * @exception MediaException Thrown if the requested format is * not supported or the <code>Player</code> does not support * snapshots. * @exception SecurityException Thrown if the caller does * not have the security permission to take the snapshot. */ byte[] getSnapshot(String imageType) throws MediaException; }