summaryrefslogtreecommitdiffstats
path: root/src/plugins/symbian/videooutput/s60videodisplay.h
blob: e16e7bb71b7d378be048f928f01724e91181ee98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
/**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights.  These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef S60VIDEODISPLAY_H
#define S60VIDEODISPLAY_H

#include <QtCore/QMetaType>
#include <QtCore/QObject>
#include <QtCore/QRect>
#include <QtCore/QSize>
#include <QtGui/qwindowdefs.h>

class CFbsBitmap;
class RWindow;

QT_USE_NAMESPACE

/*
 * This class defines a common API used by Symbian camera and mediaplayer
 * backends to render to on-screen video outputs, i.e. implementations of
 * QVideoWidgetControl and QVideoWindowControl.
 */
class S60VideoDisplay : public QObject
{
    Q_OBJECT
public:
    S60VideoDisplay(QObject *parent);
    virtual ~S60VideoDisplay();

    /*
     * Returns native Symbian handle of the window to be used for rendering
     */
    RWindow *windowHandle() const;

    /*
     * Returns Qt WId (CCoeControl* on Symbian)
     */
    virtual WId winId() const = 0;

    /*
     * Returns video display rectangle
     *
     * This is the rectangle which includes both the video content itself, plus
     * any border bars which added around the video.  The aspect ratio of this
     * rectangle therefore may differ from that of the nativeSize().
     *
     * If running on a platform supporting video rendering to graphics
     * surfaces (i.e. if VIDEOOUTPUT_GRAPHICS_SURFACES is defined), the return
     * value is the relative to the origin of the video window.  Otherwise, the
     * return value is an absolute screen rectangle.
     *
     * Note that this rectangle can extend beyond the bounds of the screen or of
     * the video window.
     *
     * When using QVideoWindowControl, the size of the extentRect matches the
     * displayRect; if running on a platform which supports only DSA rendering,
     * the origin differs as described above.
     *
     * See also clipRect, contentRect
     */
    virtual QRect extentRect() const = 0;

    /*
     * Returns video clipping rectangle
     *
     * This rectangle is the intersection of displayRect() with either the window
     * rectangle (on platforms supporting video rendering to graphics surfaces),
     * or the screen rectangle (on platforms supporting only DSA video rendering).
     *
     * If running on a platform supporting video rendering to graphics
     * surfaces (i.e. if VIDEOOUTPUT_GRAPHICS_SURFACES is defined), the return
     * value is the relative to the origin of the video window.  Otherwise, the
     * return value is an absolute screen rectangle.
     *
     * See also extentRect, contentRect
     */
    QRect clipRect() const;

    /*
     * Returns video content rectangle
     *
     * This is the rectangle in which the video content is rendered, i.e. its
     * size is that of extentRect() minus border bars.  The aspect ratio of this
     * rectangle is therefore equal to that of the nativeSize().
     *
     * This rectangle is always relative to the window in which video is rendered.
     *
     * See also extentRect, clipRect
     */
    QRect contentRect() const;

    void setFullScreen(bool enabled);
    bool isFullScreen() const;

    void setVisible(bool visible);
    bool isVisible() const;

    void setAspectRatioMode(Qt::AspectRatioMode mode);
    Qt::AspectRatioMode aspectRatioMode() const;

    const QSize& nativeSize() const;

    void setPaintingEnabled(bool enabled);
    bool isPaintingEnabled() const;

    void setRotation(qreal value);
    qreal rotation() const;

public slots:
    void setNativeSize(const QSize &size);

    /*
     * Provide new video frame
     *
     * If setPaintingEnabled(true) has been called, the frame is rendered to
     * the display.
     *
     * If a QWidget is available to the control (i.e. the control is a
     * QVideoWidgetControl), the frame is rendered via QPainter.  Otherwise, the
     * frame is blitted to the window using native Symbian drawing APIs.
     */
    virtual void setFrame(const CFbsBitmap &bitmap) = 0;

signals:
    void windowHandleChanged(RWindow *);
    void displayRectChanged(QRect extentRect, QRect clipRect);
    void fullScreenChanged(bool);
    void visibilityChanged(bool);
    void aspectRatioModeChanged(Qt::AspectRatioMode);
    void nativeSizeChanged(QSize);
    void contentRectChanged(QRect);
    void paintingEnabledChanged(bool);
    void rotationChanged(qreal);
    void beginVideoWindowNativePaint();
    void endVideoWindowNativePaint();

private slots:
    void updateContentRect();

private:
    QRect m_contentRect;
    bool m_fullScreen;
    bool m_visible;
    Qt::AspectRatioMode m_aspectRatioMode;
    QSize m_nativeSize;
    bool m_paintingEnabled;
    qreal m_rotation;
};

#endif // S60VIDEODISPLAY_H