/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */
#ifndef __com_sun_star_media_XPlayer_idl__
#define __com_sun_star_media_XPlayer_idl__

#include <com/sun/star/awt/Size.idl>
#include <com/sun/star/media/XPlayerWindow.idl>
#include <com/sun/star/media/XFrameGrabber.idl>

module com {  module sun {  module star {  module media {

/** is the multimedia stream handling interface. This allows to
    perform every basic operation on videos and sounds.
 */
interface XPlayer
{
    /** starts reading the stream from the current position.
     */
    void start();

    /** stops reading the stream and leave the cursor at its current
        position.
     */
    void stop();

    /** indicates whether the stream is played or not.

        @returns
            `TRUE` if the stream is played, `FALSE` otherwise
     */
    boolean isPlaying();

    /** gets the stream length

        @returns
            the stream length in second
     */
    double getDuration();

    /** sets the new cursor position in the media stream. After using
        this method the stream is stopped.

        @param fTime
            the new position to set in seconds
     */
    void setMediaTime( [in] double fTime );

    /** gets the current position of the cursor in the stream

        @returns
            the cursor position in seconds
     */
    double getMediaTime();

    /** sets whether the stream reading should restart at the stream
        start after the end of the stream.

        @param bSet
            loops if set to `TRUE`, otherwise stops at the end of the
            stream.
     */
    void setPlaybackLoop( [in] boolean bSet );

    /** indicates whether the stream reading will restart after the
        end of the stream.

        @returns
            `TRUE` if the stream will loop, `FALSE` otherwise.
     */
    boolean isPlaybackLoop();

    /** sets the audio volume in decibel.

        @param nDB
            the new volume in Decibel
     */
    void setVolumeDB( [in] short nDB );

    /** gets the current audio volume in decibel

        @returns
            the volume in decibel
     */
    short getVolumeDB();

    /** sets the volume to <code>0</code> or to its previous value.

        @param bSet
            sets the volume to <code>0</code> if `TRUE`, and switch
            to the previous non-null value if `FALSE`
     */
    void setMute( [in] boolean bSet );

    /** gets whether the volume is temporarily down to <code>0</code>
        or not.

        @returns
            `TRUE` if the volume is temporarily set to <code>0</code>,
            `FALSE` otherwise.
     */
    boolean isMute();

    /** gets the preferred window size

        @returns
            the com::sun::star::awt::Size
     */
    ::com::sun::star::awt::Size getPreferredPlayerWindowSize();

    /** gets a new player window for this stream control

        @param aArguments
            arguments passed to the window during its creation.
     */
    XPlayerWindow createPlayerWindow( [in] sequence< any > aArguments );

    /** gets a frame grabber for this stream.
     */
    XFrameGrabber createFrameGrabber();
};

}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
