[Kwintv] Rewrite of kwintv

Wenk, Moritz kwintv@mail.kde.org
Tue, 16 Apr 2002 09:53:15 +0200


This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

------_=_NextPart_000_01C1E51B.C385FB60
Content-Type: text/plain;
	charset="ISO-8859-15"


Hi,

as you may know I am the initial author of kwintv. 
After a long period of non-developing on kwintv I deceided to continue...
I heard from George Staikos that you plan to rewrite
kwintv (based on qtvision and the old kwintv).
After some mails with George we agreed that I should 
rewrite the basic parts of kwintv (the interface to the
video hardware).

Now I want to present you some parts of my work I have done
so far and get some comments etc. from you.
I think the interface is worth being discussed...

Okay, here is a short description:

-- VDev -- hardware abstraction layer

The base class VDev defines an abstract interface
to access the functionality of a video device (e.g.
video4linux, video4linux2, X11 XVideo extension etc.).
Till now there are three classes inherieting VDev:

V4LDev, V4L2Dev and XVDev.

As the name suggests, V4LDev is the implementation
for video4linux, V4L2Dev for video4linux2 and
XVDev for X11 XVideo extension.
XVDev is completely untested till now, also 
V4L2Dev.

-- tvWidget -- QWidget abstraction layer

The second base class tvWidget defines a QWidget based
widget that can display the images delivered by a
video device in several ways.

The class tvWidgetOl inheriets tvWidget and can
display image data from a VDev device which is capable
of doing hardware overlay and image clipping
(@rev VDev::canOverlay and @rev VDev::canClipping ).
So you can use V4LDev and V4L2Dev as input devices,
if they support overlay and clipping. The overlay
code is a bit tricky since it must handle some
of the X11 events. 

Status: tested, but there are some problems with tooltips.


The class tvWidgetGrab inheriets tvWidget and
can display image data from any VDev that is 
capable of grabbing a single image (either
using read() or some sort of "grab to memory").
If the video device does not support the 
palette X11 uses for your display, the image
data must be converted (and/or rescaled...).
You can use V4LDev and V4L2Dev as input devices.
If you have support for hardware image scaling,
you can use a XVDev (with XVDev::isXvImageScaler()
 == true) for hardware scaling.
Supporting classes are xImage (inherieted by 
x11Image and xvImage). x11Image and xvImage use 
basic X11 functions for image display since QImage 
and QPixmap have a slow interface and do not support
XVideo. With a fairly fast processor you get up to
25 fps (PAL) / 29.x fps (NTSC). tvWidgetGrab uses
an extra QThread so the QApplication queue will
not be blocked by the image processing.

Status: basic functionality tested, image
converting untested.


The class tvWidgetXv inheriets tvWidget and
uses a XVDev as input device. XVideo does
overlay, too, but all the tricky things are
done by X11 itself, so the implementation
of tvWidgetXv is very simple.
tvWidgetXv is untested till now.

Status: completely untested.

-- vbiDecoder --- videotext decoder

I also worked on an imlementation of a videotext
widget based on the libvbi in the xawtv project
(libvbi is originally based on AlevT).


I added the interface definitons of VDev and tvWidget
as attachments.


Moritz

--
---------------------------------------------------------------------
Fog Lamps, n.:
        Excessively (often obnoxiously) bright lamps mounted on the
        fronts of automobiles; used on dry, clear nights to indicate 
        that the driver's brain is in a fog.
---------------------------------------------------------------------
        Moritz Wenk                     wenk@swyx.de
 


------_=_NextPart_000_01C1E51B.C385FB60
Content-Type: application/octet-stream;
	name="vdev.h"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="vdev.h"

=0A=
#ifndef _vdev_h_=0A=
#define _vdev_h_=0A=
=0A=
#ifdef HAVE_CONFIG_H=0A=
#include "config.h"=0A=
#endif=0A=
=0A=
#ifdef HAVE_ENDIAN_H=0A=
# include <endian.h>=0A=
#else=0A=
#error "Could not find endian.h"=0A=
#endif=0A=
=0A=
#include <qstring.h>=0A=
#include <qpixmap.h>=0A=
#include <qstringlist.h>=0A=
#include <qmutex.h>=0A=
=0A=
=0A=
#define VIDEO_NONE           0=0A=
#define VIDEO_RGB08          1  /* bt848 dithered */=0A=
#define VIDEO_GRAY           2=0A=
#define VIDEO_RGB15_LE       3  /* 15 bpp little endian */=0A=
#define VIDEO_RGB16_LE       4  /* 16 bpp little endian */=0A=
#define VIDEO_RGB15_BE       5  /* 15 bpp big endian */=0A=
#define VIDEO_RGB16_BE       6  /* 16 bpp big endian */=0A=
#define VIDEO_BGR24          7  /* bgrbgrbgrbgr (LE) */=0A=
#define VIDEO_BGR32          8  /* bgr-bgr-bgr- (LE) */=0A=
#define VIDEO_RGB24          9  /* rgbrgbrgbrgb (BE)*/=0A=
#define VIDEO_RGB32         10  /* -rgb-rgb-rgb (BE)*/=0A=
#define VIDEO_LUT2          11  /* lookup-table 2 byte depth */=0A=
#define VIDEO_LUT4          12  /* lookup-table 4 byte depth */=0A=
#define VIDEO_YUV422        13  /* YUV 4:2:2 */=0A=
#define VIDEO_YUV422P       14  /* YUV 4:2:2 (planar) */=0A=
#define VIDEO_YUV420P       15  /* YUV 4:2:0 (planar) */=0A=
#define VIDEO_MJPEG         16  /* MJPEG (AVI) */=0A=
#define VIDEO_JPEG          17  /* JPEG (JFIF) */=0A=
#define VIDEO_FMT_COUNT     18=0A=
=0A=
=0A=
extern unsigned short format2palette[];=0A=
extern unsigned int format2depth[];=0A=
extern char* format_desc[];=0A=
=0A=
=0A=
#define MAXCLIPRECS 256=0A=
=0A=
/**=0A=
 * Pure Virtual Abstract interface to video devices.=0A=
 *=0A=
 * @version $Id: vdev.h,v 1.2 2002/03/17 19:38:48 rich Exp $=0A=
 *=0A=
 * A video device can support one or more of the following methods=0A=
 * to display an image on the screen:=0A=
 *=0A=
 * 1) Grab and Display=0A=
 *     The application has to grab each image from the video device,=0A=
 *     rescale and convert it if neccessary and display it on the =
screen.=0A=
 *     The size of the image to grab is set with @ref setGrabSize . =
One=0A=
 *     image can be grabbed with @ref grab .=0A=
 *=0A=
 * 2) Overlay     =0A=
 *     When using overlay mode, we must tell the vl4 driver,=0A=
 *     which areas of the overlay image are obscured by other =
windows.=0A=
 *     Those methods are unfunctioal if canClipping() =3D=3D false.=0A=
 *=0A=
 *     Each obscured area (called a "clip") consists of the=0A=
 *     absolute (to the desktop) coordinates of the upper left =0A=
 *     and lower right edge.=0A=
 *=0A=
 *     To set up a list of clips:=0A=
 *     <pre>=0A=
 *     resetClipList();=0A=
 *     addClipToList(10,10,20,20);=0A=
 *     addClipToList(x1,y1,x2,y2);=0A=
 *     ...=0A=
 *     applyClipList();=0A=
 *     </pre>=0A=
 * =0A=
 * 3) Xv=0A=
 *=0A=
 *=0A=
 *=0A=
 * VideoStreaming=0A=
 *=0A=
 * Note: Almost all methods return a value < 0 in case of an error.=0A=
 *=0A=
 * @short Pure Virtual Abstract interface to video devices=0A=
 * @author Moritz Wenk (wenk@swyx.com)=0A=
 *=0A=
 */=0A=
class VDev {=0A=
public:=0A=
    /** vdev_video_format=0A=
     *=0A=
     * Contains informations about a video format.=0A=
     *=0A=
     * See @ref getOverlayInfo , @ref getGrabInfo and @ref =
getVStreamInfo .=0A=
     *  =0A=
     */=0A=
    class vdev_video_format {=0A=
    public:=0A=
        /** the X11 screen format we use (one of VIDEO_*)=0A=
         */=0A=
        int fmtid;=0A=
        /** the real X11 screen format (one of VIDEO_*)=0A=
         */=0A=
	int x11fmtid;=0A=
        /** the palette corresponding to fmtid =0A=
            (one of VIDEO_PALETTE_* defined in videodev.h)=0A=
        */=0A=
	int palette;=0A=
        /** video image parameters=0A=
         */=0A=
	int x,y;=0A=
        /** video image parameters=0A=
         */=0A=
        int width,height;=0A=
        /** colour depth in pits per pixel for the current palette=0A=
         */=0A=
        int depth; =0A=
        /** bytes per line for one frame buffer line=0A=
         */=0A=
        int bytesperline;=0A=
        /** colour depth in pits per pixel for a pixmap using the =
current X11 screen=0A=
         */=0A=
        int pixmap_bytes;=0A=
        /** true if bytes read from the video device need to be swaped =
before displayed=0A=
         */=0A=
	bool byteswap;=0A=
=0A=
        /**=0A=
         */=0A=
        vdev_video_format();=0A=
=0A=
        /**=0A=
         */=0A=
        void Copy(const vdev_video_format* fmt);=0A=
    };=0A=
=0A=
    /** vdev_video_buffer=0A=
     *=0A=
     * Contains informations about a video image buffer.=0A=
     *=0A=
     * See @ref grab and @ref vstreamGrab .=0A=
     */=0A=
    class vdev_video_buffer {=0A=
    public:=0A=
        /** informations about the format of the image, see @ref =
vdev_video_format =0A=
         */=0A=
        vdev_video_format fmt;=0A=
        /** size in bytes of the image=0A=
         */=0A=
        int size;=0A=
        /** pointer to image data=0A=
         */=0A=
        unsigned char *data;=0A=
        /** if use of multiple frames is supported, this holds the =
number of the current frame=0A=
         */=0A=
	int frame;=0A=
=0A=
        int sync;=0A=
=0A=
        int framecount;=0A=
        int synccount;=0A=
=0A=
        bool use_read;=0A=
=0A=
        /** meta info for frame =0A=
         */=0A=
        struct {=0A=
            /** time stamp=0A=
             */=0A=
            long long        ts;=0A=
            int              seq;=0A=
            int              twice;=0A=
        } info;=0A=
=0A=
        /**=0A=
         */=0A=
        vdev_video_buffer();=0A=
=0A=
        /**=0A=
         */=0A=
        void Copy(const vdev_video_buffer* bfr);=0A=
=0A=
    private:=0A=
        QMutex mutex;=0A=
    };=0A=
=0A=
    /** =0A=
     * @returns the name of the video device=0A=
     */=0A=
    virtual QString name() const =3D 0;=0A=
=0A=
    /** =0A=
     * @returns the name of the vbi device associated to=0A=
     * the video device, if there is any.=0A=
     */=0A=
    virtual QString getVBIDeviceName() const =3D 0;=0A=
=0A=
    /** =0A=
     * @returns the name of the audio mixer device associated to=0A=
     * the video device, if there is any.=0A=
     */=0A=
    virtual QString getMixerDeviceName() const =3D 0;=0A=
=0A=
    /**=0A=
     * @returns true if the device is a camera=0A=
     */=0A=
    virtual bool isCamera() const  =3D 0;=0A=
    /**=0A=
     * @returns true if the device is a (TV) tuner=0A=
     */=0A=
    virtual bool isTuner() const =3D 0;=0A=
    /**=0A=
     * @returns true if the device is a XVideo device=0A=
     */=0A=
    virtual bool isXvDevice() const =3D 0;=0A=
=0A=
=0A=
    /*=0A=
     *=0A=
     * Input source, e.g. Television, Camera, Composite=0A=
     *=0A=
     */=0A=
=0A=
=0A=
    /**=0A=
     * Sets the input source, e.g. Television, Camera, etc.=0A=
     * The source string must be one returned by @ref sources=0A=
     */=0A=
    virtual int setSource(const QString& source) =3D 0;=0A=
    /**=0A=
     * @returns the name of the current input source=0A=
     */=0A=
    virtual const QString& source() const =3D 0;=0A=
    /**=0A=
     * @returns a list of available input sources=0A=
     */=0A=
    virtual QStringList sources() const =3D 0;=0A=
=0A=
=0A=
    /*=0A=
     *=0A=
     * Input mode, e.g. PAL, NTSC, SECAM=0A=
     *=0A=
     */=0A=
=0A=
=0A=
    /**=0A=
     * set the mode (PAL, NTSC, SECAM)=0A=
     * use one of the strings returned by @ref modes=0A=
     */=0A=
    virtual int setMode(const QString& mode) =3D 0;=0A=
    /**=0A=
     * @return the name of the tuner mode=0A=
     */=0A=
    virtual const QString& mode() const =3D 0;=0A=
    /**=0A=
     * @returns a list of available tuner modes=0A=
     */=0A=
    virtual QStringList modes() const =3D 0;=0A=
=0A=
=0A=
    /*=0A=
     *=0A=
     * Image properties=0A=
     *=0A=
     * Range for v4l: 0 - 65535=0A=
     * Range for xv:  0 - 1000=0A=
     *=0A=
     */=0A=
    =0A=
=0A=
    virtual int setBrightness(int x) =3D 0;=0A=
    virtual int brightness() =3D 0;=0A=
=0A=
    virtual int setColour(int x) =3D 0;=0A=
    virtual int colour() =3D 0;=0A=
=0A=
    virtual int setHue(int x) =3D 0;=0A=
    virtual int hue() =3D 0;=0A=
=0A=
    virtual int setContrast(int x) =3D 0;=0A=
    virtual int contrast() =3D 0;=0A=
=0A=
    virtual int setWhiteness(int x) =3D 0;=0A=
    virtual int whiteness() =3D 0;=0A=
=0A=
    virtual int setAspectRatio( float ) =3D 0;=0A=
    virtual float aspectRatio() const =3D 0;=0A=
=0A=
    virtual int getMinWidth() const { return 32; }=0A=
    virtual int getMaxWidth() const { return 800; }=0A=
    virtual int getMinHeight() const { return 32; }=0A=
    virtual int getMaxHeight() const { return 600; }=0A=
=0A=
=0A=
    /*=0A=
     * =0A=
     * Audio=0A=
     *=0A=
     */=0A=
=0A=
    /** =0A=
     * @returns true if audio is supported=0A=
     */=0A=
    virtual bool hasAudio() const =3D 0;=0A=
=0A=
    /**=0A=
     * @returns true if audio is mutable=0A=
     */=0A=
    virtual bool canAudioMute() =3D 0; =0A=
    /**=0A=
     * @returns true if the video device supports audio volume =
setting=0A=
     */=0A=
    virtual bool canAudioVolume() =3D 0;=0A=
    /**=0A=
     * @returns true if the video device supports audio bass setting=0A=
     */=0A=
    virtual bool canAudioBass() =3D 0;=0A=
    /**=0A=
     * @returns true if the video device supports audio treble =
setting=0A=
     */=0A=
    virtual bool canAudioTreble() =3D 0;=0A=
    /**=0A=
     * @returns true if the video device supports audio balance =
setting=0A=
     */=0A=
    virtual bool canAudioBalance() =3D 0;=0A=
=0A=
    /**=0A=
     * @returns true if audio is muted=0A=
     */=0A=
    virtual bool audio() =3D 0;=0A=
    /**=0A=
     * enable (unmute) audio=0A=
     */=0A=
    virtual int enableAudio() =3D 0;=0A=
    /**=0A=
     * disable (mute) audio=0A=
     */=0A=
    virtual int disableAudio() =3D 0;=0A=
=0A=
    virtual int setAudioMode(const QString& audio) =3D 0;=0A=
    virtual const QString& audioMode() =3D 0;=0A=
    virtual QStringList audioModes() =3D 0;=0A=
=0A=
    virtual int setAudioVolume(int) =3D 0;=0A=
    virtual int setAudioBass(int) =3D 0;=0A=
    virtual int setAudioTreble(int) =3D 0;=0A=
    virtual int setAudioBalance(int) =3D 0;=0A=
=0A=
    =0A=
    /*=0A=
     *=0A=
     * Tuner (can be used if @ref isTuner returns true)=0A=
     *=0A=
     */=0A=
=0A=
    /** =0A=
     * Set the frequency for the tuner.=0A=
     * Tuning frequencies are an unsigned 32bit value in 1/16th MHz or =
if the=0A=
     * VIDEO_TUNER_LOW flag is set they are in 1/16th KHz. =0A=
     */=0A=
    virtual int setFreq(unsigned long) =3D 0;=0A=
    /**=0A=
     * @returns tuned frequency=0A=
     */=0A=
    virtual unsigned long getFreq() =3D 0;=0A=
    /**=0A=
     * @returns For a tuner, this returns the strength of the signal =
for=0A=
     * the currently tuned frequency. =0A=
     * The strength values from 0 for a bad and 65535 for a =0A=
     * good signal.=0A=
     */=0A=
    virtual int signal() const =3D 0;=0A=
    /** =0A=
     * @returns the minimal possible frequency for the tuner=0A=
     */=0A=
    virtual unsigned long minFreq() const =3D 0;=0A=
    /** =0A=
     * @returns the maximal possible frequency for the tuner=0A=
     */=0A=
    virtual unsigned long maxFreq() const =3D 0;=0A=
=0A=
=0A=
    /*=0A=
     *=0A=
     * Grab&Display Mode=0A=
     *=0A=
     */=0A=
=0A=
=0A=
    /**=0A=
     * set the size of the image to grab with @ref grab .=0A=
     * if h =3D -1, it keeps the aspect ratio set by @ref =
setAspectRatio=0A=
     */=0A=
    virtual int setGrabSize( int w, int h =3D -1 ) =3D 0;=0A=
    /**=0A=
     */=0A=
    virtual int setGrabFormat( int ) =3D 0;=0A=
    /**=0A=
     * Grab one frame. May return a NULL pointer on the first call, =
so=0A=
     * try twice before assuming an error.=0A=
     * @returns @ref vdev_video_buffer containing the frame data =
etc.=0A=
     */=0A=
    virtual const vdev_video_buffer* grab() =3D 0;=0A=
    /**=0A=
     * @returns vdev_video_format* containing the=0A=
     * current video format, color depth, widht, height, etc.=0A=
     */=0A=
    const vdev_video_format* getGrabInfo() const { return &_vbgrab.fmt; =
}=0A=
=0A=
=0A=
    /*=0A=
     *=0A=
     * Overlay Mode=0A=
     *=0A=
     */=0A=
=0A=
    /** =0A=
     * @returns true if device can capture=0A=
     */=0A=
    virtual bool canCapture() =3D 0;=0A=
    /** =0A=
     * enable capturing=0A=
     */=0A=
    virtual int enableCapture() =3D 0;=0A=
    /** =0A=
     * disnable capturing=0A=
     */=0A=
    virtual int disableCapture() =3D 0;=0A=
    /** =0A=
     * @returns true if captureing is enabled=0A=
     */=0A=
    virtual bool capture() const =3D 0;=0A=
=0A=
    /** =0A=
     * @returns true if overlay mode is supported=0A=
     */=0A=
    virtual bool canOverlay() const =3D 0;=0A=
    /** =0A=
     * @returns true if clipping is supported=0A=
     */=0A=
    virtual bool canClipping() const =3D 0;=0A=
=0A=
    /*=0A=
     * set the size of the image in overlay mode=0A=
     * this finds the largest video that is within the size =
specified=0A=
     * and uses aspect ratio if h =3D -1.=0A=
     * The new size can be read using @ref getOverlayInfo .=0A=
     */=0A=
    virtual int setOverlaySize(int w, int h =3D -1) =3D 0;=0A=
    /**=0A=
     * set the upper left edge of the video overlay=0A=
     */=0A=
    virtual int setOverlayPos(int x, int y) =3D 0;=0A=
=0A=
    /**=0A=
     * @returns vdev_video_format* containing the=0A=
     * current video format, color depth, widht, height, etc.=0A=
     */=0A=
    const vdev_video_format* getOverlayInfo() const { return &_vfmt; =
}=0A=
=0A=
    /**=0A=
     * resets the clip list=0A=
     */=0A=
    virtual void resetClipList() =3D 0;=0A=
    /**=0A=
     * adds a clip to the list=0A=
     * @returns number of clips in list=0A=
     */=0A=
    virtual int addClipToList( int, int, int, int ) =3D 0;=0A=
    /**=0A=
     * sends clip list to video device=0A=
     * @returns number of clips in list=0A=
     */=0A=
    virtual int applyClipList() =3D 0;=0A=
    /**=0A=
     * @returns true if the clip list has changed=0A=
     */=0A=
    virtual bool clipsChanged() =3D 0;=0A=
    /**=0A=
     * @returns number of clips in list=0A=
     */=0A=
    virtual int clips() =3D 0;=0A=
=0A=
    virtual int getFrameBufferWidth() =3D 0;=0A=
    virtual int getFrameBufferHeight() =3D 0;=0A=
=0A=
=0A=
protected:=0A=
    VDev();=0A=
=0A=
    vdev_video_format _vfmt;=0A=
    vdev_video_buffer _vbgrab;=0A=
};=0A=
=0A=
#endif=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=

------_=_NextPart_000_01C1E51B.C385FB60
Content-Type: application/octet-stream;
	name="tvwidget.h"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="tvwidget.h"

=0A=
#ifndef tvwidget_h_=0A=
#define tvwidget_h_=0A=
=0A=
#include "vdev.h"=0A=
=0A=
#include <qwidget.h>=0A=
#include <qstring.h>=0A=
#include <qtimer.h>=0A=
#include <qpixmap.h>=0A=
#include <qcursor.h>=0A=
#include <qstrlist.h>=0A=
=0A=
#if defined(myDEBUG)=0A=
extern char * visibility[];=0A=
#endif=0A=
=0A=
/**=0A=
 * TV Widget base implementation. =0A=
 *=0A=
 *=0A=
 * @short TV Widget base implementation=0A=
 * @author Moritz Wenk (wenk@swyx.com)=0A=
 */=0A=
class tvWidget : public QWidget=0A=
{=0A=
    Q_OBJECT=0A=
=0A=
public:=0A=
    tvWidget(VDev *_video, QWidget *_parent=3D0, const char =
*name=3D0);=0A=
    ~tvWidget();=0A=
=0A=
    /** =0A=
     * Call this after constructing a tvWidget object to=0A=
     * check if the object was initialised. The initialisation=0A=
     * may fail for example if the VDev does not support overlay=0A=
     * and the tvWidget is a tvWidget_OL.=0A=
     * @returns true if the class was successfully initialised=0A=
     */=0A=
    bool isInitialised() { return isinitialised; }=0A=
=0A=
    /**=0A=
     * @returns state of TV image (true=3Ddisplayed)=0A=
     */=0A=
    virtual bool tvImageOn() { return tvImageState; }=0A=
    /**=0A=
     * Switch TV image on or off=0A=
     * @param on true =3D image on, false =3D image off=0A=
     */=0A=
    virtual void setTVImage(bool on) =3D 0;=0A=
=0A=
    bool isHideMouseCursorOn() { return mouseCursorHideOn; }=0A=
    bool isAlwaysOnTop() { return alwaysOnTop; }=0A=
=0A=
    int getTVMaxWidth() { return tvMaxWidth; }=0A=
    int getTVMaxHeight() { return tvMaxHeight; }=0A=
=0A=
    int getTVMinWidth() { return 32; }=0A=
    int getTVMinHeight() { return 32; }=0A=
=0A=
    const VDev * getVideoDeviceIface() { return video; }=0A=
=0A=
public slots:=0A=
    /**=0A=
     * Switch TV image on or off=0A=
     * @param on true =3D image on, false =3D image off=0A=
     */=0A=
    virtual void slotTVImage( bool on );=0A=
    /**=0A=
     * Toggle state of TV image=0A=
     */=0A=
    virtual void slotTVImageToggle();=0A=
    /**=0A=
     * Set frequency if video device supports a tuner=0A=
     * @param freq frequency to set=0A=
     */=0A=
    virtual void slotTVFreq( int freq );=0A=
    /**=0A=
     * Set the color intensity of the TV image=0A=
     * @param val intensity (0 - 32000)=0A=
     */=0A=
    virtual void slotTVPicColor( int val );=0A=
    /**=0A=
     * Set the hue of the TV image=0A=
     * @param val hue (0 - 32000)=0A=
     */=0A=
    virtual void slotTVPicHue( int val );=0A=
    /**=0A=
     * Set the brightness of the TV image=0A=
     * @param val brightness (0 - 32000)=0A=
     */=0A=
    virtual void slotTVPicBri( int val );=0A=
    /**=0A=
     * Set the contrast of the TV image=0A=
     * @param val contrast (0 - 32000)=0A=
     */=0A=
    virtual void slotTVPicCon( int val );=0A=
    /**=0A=
     * Set the whiteness of the TV image=0A=
     * @param val whiteness (0 - 32000)=0A=
     */=0A=
    virtual void slotTVPicWhi( int val );=0A=
    /**=0A=
     * Set the input source of the video device=0A=
     * @param val input source=0A=
     */=0A=
    virtual void slotTVInSource( QString& name );=0A=
    /**=0A=
     * If the video device supports a tuner, set the input norm=0A=
     * of the tuner=0A=
     * @param name of the norm=0A=
     */=0A=
    virtual void slotTVInNorm( QString& mode );=0A=
=0A=
    /**=0A=
     * If the video device supports audio, mute/unmute audio=0A=
     * @param on true to mute audio=0A=
     */=0A=
    virtual void slotTVAuMute( bool on );=0A=
    /**=0A=
     * If the video device supports audio, set the audio mode=0A=
     * (mono, stereo, ... )=0A=
     * @param mode audio mode=0A=
     */=0A=
    virtual void slotTVAuMode(  QString& mode );=0A=
=0A=
    virtual void slotSCRMouseCursorHide( bool on ) =3D 0;=0A=
    virtual void slotSCRAlwaysOnTop( bool on ) =3D 0;=0A=
=0A=
    virtual void slotOSD( bool on ) =3D 0;=0A=
    virtual void slotOSDLevel( int level ) =3D 0;=0A=
    virtual void slotOSDShow( QString& text ) =3D 0;=0A=
=0A=
protected slots:=0A=
    virtual void slotTVSwitchAuOffSync();=0A=
    virtual void slotTVSwitchAuOnSync();=0A=
    virtual void slotTVHideMouseCursor() =3D 0;=0A=
    =0A=
protected:    =0A=
    virtual void setTVCapture(bool ion) { }=0A=
=0A=
    int initialize( WId parentWid =3D 0 );=0A=
    void destroy();=0A=
    =0A=
    virtual void setTVMaxSize() =3D 0;=0A=
=0A=
protected:=0A=
    QWidget * parent;=0A=
=0A=
    bool isinitialised;=0A=
=0A=
    // current tv image=0A=
    bool tvImageState;=0A=
    int hue,color,brightness,contrast,whiteness;=0A=
    int frequency;=0A=
    QString source,norm;=0A=
=0A=
    // max width and height of tv image=0A=
    unsigned int tvMaxWidth;  =0A=
    unsigned int tvMaxHeight; =0A=
=0A=
    QTimer *mouseHideTimer;=0A=
    QCursor orgCursor; // Original Mouse Cursor=0A=
    bool mouseCursorIsVisible, mouseCursorHideOn;=0A=
=0A=
    bool alwaysOnTop;=0A=
=0A=
    VDev *video;=0A=
};=0A=
=0A=
#endif=0A=

------_=_NextPart_000_01C1E51B.C385FB60--