diff options
author | Rogerio Pimentel <rogerio.pimentel@freescale.com> | 2012-06-14 08:53:38 -0500 |
---|---|---|
committer | Otavio Salvador <otavio@ossystems.com.br> | 2012-06-14 12:03:37 -0300 |
commit | 907d9aea9e56fc6c06913f7b1dfbb2b1d0f2bea3 (patch) | |
tree | b21d3358a5e74d948ea6690c8cb6ddbc884248f5 /recipes-qt | |
parent | 97558c1d2255a19e8d49f6dcedaf4a5ac8f19ee2 (diff) | |
download | meta-fsl-arm-907d9aea9e56fc6c06913f7b1dfbb2b1d0f2bea3.tar.gz |
Add QT4.7.4 patch to support Freescale codecs
This patch adds a QT4.7.4 patch file to add support for Freescale
Multimedia codecs
Signed-off-by: Rogerio Pimentel <rogerio.pimentel@freescale.com>
Diffstat (limited to 'recipes-qt')
-rw-r--r-- | recipes-qt/qt4/qt4-embedded_4.7.4.bbappend | 10 | ||||
-rw-r--r-- | recipes-qt/qt4/qt4/0001-Add-support-for-i.MX-codecs-to-phonon.patch | 453 |
2 files changed, 463 insertions, 0 deletions
diff --git a/recipes-qt/qt4/qt4-embedded_4.7.4.bbappend b/recipes-qt/qt4/qt4-embedded_4.7.4.bbappend new file mode 100644 index 0000000..cebb203 --- /dev/null +++ b/recipes-qt/qt4/qt4-embedded_4.7.4.bbappend | |||
@@ -0,0 +1,10 @@ | |||
1 | #Freescale | ||
2 | FILESEXTRAPATHS_prepend := "${THISDIR}/qt4:" | ||
3 | |||
4 | SRC_URI_append_mx5 += "file://0001-Add-support-for-i.MX-codecs-to-phonon.patch" | ||
5 | SRC_URI_append_mx6 += "file://0001-Add-support-for-i.MX-codecs-to-phonon.patch" | ||
6 | |||
7 | PACKAGE_ARCH_mx5 = "${MACHINE_ARCH}" | ||
8 | PACKAGE_ARCH_mx6 = "${MACHINE_ARCH}" | ||
9 | |||
10 | PRINC := "${@int(PRINC) + 1}" | ||
diff --git a/recipes-qt/qt4/qt4/0001-Add-support-for-i.MX-codecs-to-phonon.patch b/recipes-qt/qt4/qt4/0001-Add-support-for-i.MX-codecs-to-phonon.patch new file mode 100644 index 0000000..c8c12e0 --- /dev/null +++ b/recipes-qt/qt4/qt4/0001-Add-support-for-i.MX-codecs-to-phonon.patch | |||
@@ -0,0 +1,453 @@ | |||
1 | From d46b70c7679e6706a001771c322185fcc95a981c Mon Sep 17 00:00:00 2001 | ||
2 | From: Rogerio Pimentel <rogerio.pimentel@freescale.com> | ||
3 | Date: Mon, 4 Jun 2012 14:25:31 -0300 | ||
4 | Subject: [PATCH] Add support for i.MX codecs to phonon | ||
5 | |||
6 | Add support for i.MX codecs to phonon | ||
7 | |||
8 | Signed-off-by: Daniele Dall'Acqua <daniele.d@freescale.com> | ||
9 | Signed-off-by: Rogerio Pimentel <rogerio.pimentel@freescale.com> | ||
10 | --- | ||
11 | src/3rdparty/phonon/gstreamer/abstractrenderer.h | 1 + | ||
12 | src/3rdparty/phonon/gstreamer/mediaobject.cpp | 4 + | ||
13 | src/3rdparty/phonon/gstreamer/videowidget.cpp | 57 ++------ | ||
14 | src/3rdparty/phonon/gstreamer/videowidget.h | 1 + | ||
15 | src/3rdparty/phonon/gstreamer/widgetrenderer.cpp | 166 +++++++++++++--------- | ||
16 | src/3rdparty/phonon/gstreamer/widgetrenderer.h | 17 ++- | ||
17 | src/3rdparty/phonon/gstreamer/x11renderer.cpp | 23 +--- | ||
18 | 7 files changed, 136 insertions(+), 133 deletions(-) | ||
19 | |||
20 | diff --git a/src/3rdparty/phonon/gstreamer/abstractrenderer.h b/src/3rdparty/phonon/gstreamer/abstractrenderer.h | ||
21 | index 10a2822..4901530 100644 | ||
22 | --- a/src/3rdparty/phonon/gstreamer/abstractrenderer.h | ||
23 | +++ b/src/3rdparty/phonon/gstreamer/abstractrenderer.h | ||
24 | @@ -49,6 +49,7 @@ public: | ||
25 | virtual bool eventFilter(QEvent *) = 0; | ||
26 | virtual void handlePaint(QPaintEvent *) {} | ||
27 | virtual bool paintsOnWidget() { return true; } // Controls overlays | ||
28 | + virtual void handleMove(QMoveEvent * event ) = 0; | ||
29 | |||
30 | protected: | ||
31 | VideoWidget *m_videoWidget; | ||
32 | diff --git a/src/3rdparty/phonon/gstreamer/mediaobject.cpp b/src/3rdparty/phonon/gstreamer/mediaobject.cpp | ||
33 | index 23a60c0..f806d64 100644 | ||
34 | --- a/src/3rdparty/phonon/gstreamer/mediaobject.cpp | ||
35 | +++ b/src/3rdparty/phonon/gstreamer/mediaobject.cpp | ||
36 | @@ -515,6 +515,9 @@ void MediaObject::createPipeline() | ||
37 | // reduce buffer overruns as these are not gracefully handled at the moment. | ||
38 | m_audioPipe = gst_element_factory_make("queue", NULL); | ||
39 | g_object_set(G_OBJECT(m_audioPipe), "max-size-time", MAX_QUEUE_TIME, (const char*)NULL); | ||
40 | + g_object_set(G_OBJECT(m_audioPipe), "max-size-time", 0, (const char*)NULL); | ||
41 | + g_object_set(G_OBJECT(m_audioPipe), "max-size-buffers", 0, (const char*)NULL); | ||
42 | + g_object_set(G_OBJECT(m_audioPipe), "max-size-bytes", 0, (const char*)NULL); | ||
43 | gst_bin_add(GST_BIN(m_audioGraph), m_audioPipe); | ||
44 | GstPad *audiopad = gst_element_get_pad (m_audioPipe, "sink"); | ||
45 | gst_element_add_pad (m_audioGraph, gst_ghost_pad_new ("sink", audiopad)); | ||
46 | @@ -527,6 +530,7 @@ void MediaObject::createPipeline() | ||
47 | |||
48 | m_videoPipe = gst_element_factory_make("queue", NULL); | ||
49 | g_object_set(G_OBJECT(m_videoPipe), "max-size-time", MAX_QUEUE_TIME, (const char*)NULL); | ||
50 | + g_object_set(G_OBJECT(m_videoPipe), "max-size-time", 33000, (const char*)NULL); | ||
51 | gst_bin_add(GST_BIN(m_videoGraph), m_videoPipe); | ||
52 | GstPad *videopad = gst_element_get_pad (m_videoPipe, "sink"); | ||
53 | gst_element_add_pad (m_videoGraph, gst_ghost_pad_new ("sink", videopad)); | ||
54 | diff --git a/src/3rdparty/phonon/gstreamer/videowidget.cpp b/src/3rdparty/phonon/gstreamer/videowidget.cpp | ||
55 | index e1f0ec9..6c9862b 100644 | ||
56 | --- a/src/3rdparty/phonon/gstreamer/videowidget.cpp | ||
57 | +++ b/src/3rdparty/phonon/gstreamer/videowidget.cpp | ||
58 | @@ -81,48 +81,17 @@ void VideoWidget::setupVideoBin() | ||
59 | Q_ASSERT(m_videoBin); | ||
60 | gst_object_ref (GST_OBJECT (m_videoBin)); //Take ownership | ||
61 | gst_object_sink (GST_OBJECT (m_videoBin)); | ||
62 | + gst_bin_add_many (GST_BIN (m_videoBin), videoSink, NULL); | ||
63 | + GstPad *videopad = gst_element_get_pad (videoSink,"sink"); | ||
64 | + gst_element_add_pad (m_videoBin, gst_ghost_pad_new ("sink", videopad)); | ||
65 | + gst_object_unref (videopad); | ||
66 | + QWidget *parentWidget = qobject_cast<QWidget*>(parent()); | ||
67 | |||
68 | - //The videoplug element is the final element before the pluggable videosink | ||
69 | - m_videoplug = gst_element_factory_make ("identity", NULL); | ||
70 | - | ||
71 | - //Colorspace ensures that the output of the stream matches the input format accepted by our video sink | ||
72 | - m_colorspace = gst_element_factory_make ("ffmpegcolorspace", NULL); | ||
73 | - | ||
74 | - //Video scale is used to prepare the correct aspect ratio and scale. | ||
75 | - GstElement *videoScale = gst_element_factory_make ("videoscale", NULL); | ||
76 | - | ||
77 | - //We need a queue to support the tee from parent node | ||
78 | - GstElement *queue = gst_element_factory_make ("queue", NULL); | ||
79 | - | ||
80 | - if (queue && m_videoBin && videoScale && m_colorspace && videoSink && m_videoplug) { | ||
81 | - //Ensure that the bare essentials are prepared | ||
82 | - gst_bin_add_many (GST_BIN (m_videoBin), queue, m_colorspace, m_videoplug, videoScale, videoSink, (const char*)NULL); | ||
83 | - bool success = false; | ||
84 | - //Video balance controls color/sat/hue in the YUV colorspace | ||
85 | - m_videoBalance = gst_element_factory_make ("videobalance", NULL); | ||
86 | - if (m_videoBalance) { | ||
87 | - // For video balance to work we have to first ensure that the video is in YUV colorspace, | ||
88 | - // then hand it off to the videobalance filter before finally converting it back to RGB. | ||
89 | - // Hence we nede a videoFilter to convert the colorspace before and after videobalance | ||
90 | - GstElement *m_colorspace2 = gst_element_factory_make ("ffmpegcolorspace", NULL); | ||
91 | - gst_bin_add_many(GST_BIN(m_videoBin), m_videoBalance, m_colorspace2, (const char*)NULL); | ||
92 | - success = gst_element_link_many(queue, m_colorspace, m_videoBalance, m_colorspace2, videoScale, m_videoplug, videoSink, (const char*)NULL); | ||
93 | - } else { | ||
94 | - //If video balance is not available, just connect to sink directly | ||
95 | - success = gst_element_link_many(queue, m_colorspace, videoScale, m_videoplug, videoSink, (const char*)NULL); | ||
96 | - } | ||
97 | + if (parentWidget) | ||
98 | + parentWidget->winId(); // Due to some existing issues with alien in 4.4, | ||
99 | + // we must currently force the creation of a parent widget. | ||
100 | + m_isValid = true; //initialization ok, accept input | ||
101 | |||
102 | - if (success) { | ||
103 | - GstPad *videopad = gst_element_get_pad (queue, "sink"); | ||
104 | - gst_element_add_pad (m_videoBin, gst_ghost_pad_new ("sink", videopad)); | ||
105 | - gst_object_unref (videopad); | ||
106 | - QWidget *parentWidget = qobject_cast<QWidget*>(parent()); | ||
107 | - if (parentWidget) | ||
108 | - parentWidget->winId(); // Due to some existing issues with alien in 4.4, | ||
109 | - // we must currently force the creation of a parent widget. | ||
110 | - m_isValid = true; //initialization ok, accept input | ||
111 | - } | ||
112 | - } | ||
113 | } | ||
114 | |||
115 | void VideoWidget::paintEvent(QPaintEvent *event) | ||
116 | @@ -131,6 +100,12 @@ void VideoWidget::paintEvent(QPaintEvent *event) | ||
117 | m_renderer->handlePaint(event); | ||
118 | } | ||
119 | |||
120 | +void VideoWidget::moveEvent(QMoveEvent * event ) | ||
121 | +{ | ||
122 | + Q_ASSERT(m_renderer); | ||
123 | + m_renderer->handleMove(event); | ||
124 | +} | ||
125 | + | ||
126 | void VideoWidget::setVisible(bool val) { | ||
127 | Q_ASSERT(m_renderer); | ||
128 | |||
129 | diff --git a/src/3rdparty/phonon/gstreamer/videowidget.h b/src/3rdparty/phonon/gstreamer/videowidget.h | ||
130 | index 8603f6a..38c7b17 100644 | ||
131 | --- a/src/3rdparty/phonon/gstreamer/videowidget.h | ||
132 | +++ b/src/3rdparty/phonon/gstreamer/videowidget.h | ||
133 | @@ -65,6 +65,7 @@ public: | ||
134 | qreal saturation() const; | ||
135 | void setSaturation(qreal); | ||
136 | void setMovieSize(const QSize &size); | ||
137 | + void moveEvent(QMoveEvent * event ); | ||
138 | QSize sizeHint() const; | ||
139 | QRect scaleToAspect(QRect srcRect, int w, int h) const; | ||
140 | QRect calculateDrawFrameRect() const; | ||
141 | diff --git a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp | ||
142 | index 423af9d..de524ec 100644 | ||
143 | --- a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp | ||
144 | +++ b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp | ||
145 | @@ -15,7 +15,9 @@ | ||
146 | along with this library. If not, see <http://www.gnu.org/licenses/>. | ||
147 | */ | ||
148 | |||
149 | +#include <QMouseEvent> | ||
150 | #include <QtGui/QPainter> | ||
151 | +#include <QPaintEvent> | ||
152 | #include <gst/gst.h> | ||
153 | #include "common.h" | ||
154 | #include "message.h" | ||
155 | @@ -24,6 +26,19 @@ | ||
156 | #include "widgetrenderer.h" | ||
157 | #include "qrgb.h" | ||
158 | |||
159 | +#include <stdio.h> | ||
160 | +#include <stdlib.h> | ||
161 | +#include <errno.h> | ||
162 | +#include <stdint.h> | ||
163 | +#include <fcntl.h> | ||
164 | +#include <sys/ioctl.h> | ||
165 | +#include <unistd.h> | ||
166 | + | ||
167 | +#include <linux/mxcfb.h> | ||
168 | + | ||
169 | +#define MXCFB_GBL_ALPHA 255 | ||
170 | +#define MXCFB_CLR_KEY 0x00000000 // ARGB8888 | ||
171 | + | ||
172 | // support old OpenGL installations (1.2) | ||
173 | // assume that if TEXTURE0 isn't defined, none are | ||
174 | #ifndef GL_TEXTURE0 | ||
175 | @@ -35,26 +50,6 @@ | ||
176 | #ifndef QT_NO_PHONON_VIDEO | ||
177 | QT_BEGIN_NAMESPACE | ||
178 | |||
179 | -static void frameRendered() | ||
180 | -{ | ||
181 | - static QString displayFps = qgetenv("PHONON_GST_FPS"); | ||
182 | - if (displayFps.isEmpty()) | ||
183 | - return; | ||
184 | - | ||
185 | - static int frames = 0; | ||
186 | - static QTime lastTime = QTime::currentTime(); | ||
187 | - QTime time = QTime::currentTime(); | ||
188 | - | ||
189 | - int delta = lastTime.msecsTo(time); | ||
190 | - if (delta > 2000) { | ||
191 | - printf("FPS: %f\n", 1000.0 * frames / qreal(delta)); | ||
192 | - lastTime = time; | ||
193 | - frames = 0; | ||
194 | - } | ||
195 | - | ||
196 | - ++frames; | ||
197 | -} | ||
198 | - | ||
199 | namespace Phonon | ||
200 | { | ||
201 | namespace Gstreamer | ||
202 | @@ -62,20 +57,12 @@ namespace Gstreamer | ||
203 | |||
204 | WidgetRenderer::WidgetRenderer(VideoWidget *videoWidget) | ||
205 | : AbstractRenderer(videoWidget) | ||
206 | - , m_width(0) | ||
207 | - , m_height(0) | ||
208 | { | ||
209 | - videoWidget->backend()->logMessage("Creating QWidget renderer"); | ||
210 | - if ((m_videoSink = GST_ELEMENT(g_object_new(get_type_RGB(), NULL)))) { | ||
211 | - gst_object_ref (GST_OBJECT (m_videoSink)); //Take ownership | ||
212 | + if ((m_videoSink = gst_element_factory_make("mfw_v4lsink", NULL)) && m_videoSink != NULL) { | ||
213 | + gst_object_ref (GST_OBJECT (m_videoSink)); //Take ownership | ||
214 | gst_object_sink (GST_OBJECT (m_videoSink)); | ||
215 | - | ||
216 | - QWidgetVideoSinkBase* sink = reinterpret_cast<QWidgetVideoSinkBase*>(m_videoSink); | ||
217 | - // Let the videosink know which widget to direct frame updates to | ||
218 | - sink->renderWidget = videoWidget; | ||
219 | } | ||
220 | |||
221 | - // Clear the background with black by default | ||
222 | QPalette palette; | ||
223 | palette.setColor(QPalette::Background, Qt::black); | ||
224 | m_videoWidget->setPalette(palette); | ||
225 | @@ -84,65 +71,116 @@ WidgetRenderer::WidgetRenderer(VideoWidget *videoWidget) | ||
226 | m_videoWidget->setAttribute(Qt::WA_PaintOnScreen, false); | ||
227 | } | ||
228 | |||
229 | -void WidgetRenderer::setNextFrame(const QByteArray &array, int w, int h) | ||
230 | +WidgetRenderer::~WidgetRenderer() | ||
231 | { | ||
232 | - if (m_videoWidget->root()->state() == Phonon::LoadingState) | ||
233 | - return; | ||
234 | + if (m_videoSink) { | ||
235 | + gst_object_unref (GST_OBJECT (m_videoSink)); | ||
236 | + m_videoSink = 0; | ||
237 | + } | ||
238 | +} | ||
239 | |||
240 | - m_frame = QImage(); | ||
241 | - { | ||
242 | - m_frame = QImage((uchar *)array.constData(), w, h, QImage::Format_RGB32); | ||
243 | - } | ||
244 | +void WidgetRenderer::setVideoSize(void) | ||
245 | +{ | ||
246 | + | ||
247 | + int adj_x; | ||
248 | + int adj_y; | ||
249 | + | ||
250 | + QSize wSize = m_videoWidget->size(); | ||
251 | + m_drawFrameRect = m_videoWidget->calculateDrawFrameRect(); | ||
252 | + framePos = m_videoWidget->mapToGlobal(QPoint(0,0)); | ||
253 | |||
254 | - m_array = array; | ||
255 | - m_width = w; | ||
256 | - m_height = h; | ||
257 | + //Center the video in the widget | ||
258 | |||
259 | - m_videoWidget->update(); | ||
260 | + adj_x = (wSize.width()/2) - (m_drawFrameRect.width()/2); | ||
261 | + adj_y = (wSize.height()/2) - (m_drawFrameRect.height()/2); | ||
262 | + | ||
263 | + g_object_set(G_OBJECT(m_videoSink), "axis-left",adj_x + framePos.x(),(const char*)NULL); | ||
264 | + g_object_set(G_OBJECT(m_videoSink), "axis-top", adj_y + framePos.y(), (const char*)NULL); | ||
265 | + g_object_set(G_OBJECT(m_videoSink), "disp-width", m_drawFrameRect.width(), (const char*)NULL); | ||
266 | + g_object_set(G_OBJECT(m_videoSink), "disp-height", m_drawFrameRect.height(), (const char*)NULL); | ||
267 | + g_object_set(G_OBJECT(m_videoSink), "setpara", 1, (const char*)NULL); | ||
268 | } | ||
269 | |||
270 | void WidgetRenderer::handleMediaNodeEvent(const MediaNodeEvent *event) | ||
271 | { | ||
272 | switch (event->type()) { | ||
273 | - case MediaNodeEvent::SourceChanged: | ||
274 | - { | ||
275 | - clearFrame(); | ||
276 | - break; | ||
277 | - } | ||
278 | default: | ||
279 | break; | ||
280 | } | ||
281 | } | ||
282 | |||
283 | -void WidgetRenderer::clearFrame() | ||
284 | +void WidgetRenderer::handlePaint(QPaintEvent *event) | ||
285 | { | ||
286 | - m_frame = QImage(); | ||
287 | - m_array = QByteArray(); | ||
288 | - m_videoWidget->update(); | ||
289 | + Q_UNUSED(event); | ||
290 | + QPainter painter(m_videoWidget); | ||
291 | + painter.fillRect(m_videoWidget->rect(), m_videoWidget->palette().background()); | ||
292 | } | ||
293 | |||
294 | -const QImage &WidgetRenderer::currentFrame() const | ||
295 | +int WidgetRenderer::setOverlay(void) | ||
296 | { | ||
297 | - return m_frame; | ||
298 | + struct mxcfb_color_key color_key; | ||
299 | + struct mxcfb_gbl_alpha alpha; | ||
300 | + int fd_fb; | ||
301 | + | ||
302 | + if ((fd_fb = open("/dev/fb0", O_RDWR, 0)) < 0) | ||
303 | + { | ||
304 | + printf("Unable to open %s\n", "/dev/fb0"); | ||
305 | + return -1; | ||
306 | + } | ||
307 | + | ||
308 | + alpha.alpha = MXCFB_GBL_ALPHA; | ||
309 | + alpha.enable = 1; | ||
310 | + | ||
311 | + if (ioctl(fd_fb, MXCFB_SET_GBL_ALPHA, &alpha) < 0) { | ||
312 | + printf("Error in applying Alpha\n"); | ||
313 | + } | ||
314 | + | ||
315 | + color_key.color_key = MXCFB_CLR_KEY & 0x00FFFFFF; | ||
316 | + color_key.enable = 1; | ||
317 | + if ( ioctl(fd_fb, MXCFB_SET_CLR_KEY, &color_key) < 0) { | ||
318 | + printf("Error in applying Color Key\n"); | ||
319 | + return -1; | ||
320 | + } | ||
321 | + close (fd_fb); | ||
322 | + return 0; | ||
323 | } | ||
324 | |||
325 | -void WidgetRenderer::handlePaint(QPaintEvent *event) | ||
326 | +void WidgetRenderer::handleMove( QMoveEvent * event) | ||
327 | { | ||
328 | - Q_UNUSED(event); | ||
329 | - QPainter painter(m_videoWidget); | ||
330 | - m_drawFrameRect = m_videoWidget->calculateDrawFrameRect(); | ||
331 | - painter.drawImage(drawFrameRect(), currentFrame()); | ||
332 | - frameRendered(); | ||
333 | + Q_UNUSED(event); | ||
334 | + | ||
335 | + if (framePos != m_videoWidget->mapToGlobal(QPoint(0,0))) | ||
336 | + setVideoSize(); | ||
337 | } | ||
338 | |||
339 | bool WidgetRenderer::eventFilter(QEvent * event) | ||
340 | { | ||
341 | - if (event->type() == QEvent::User) { | ||
342 | - NewFrameEvent *frameEvent= static_cast <NewFrameEvent *>(event); | ||
343 | - setNextFrame(frameEvent->frame, frameEvent->width, frameEvent->height); | ||
344 | - return true; | ||
345 | - } | ||
346 | - return false; | ||
347 | + if (event->type() == QEvent::Show) { | ||
348 | + setOverlay(); | ||
349 | + return true; | ||
350 | + } else if (event->type() == QEvent::Resize) { | ||
351 | + setVideoSize(); | ||
352 | + return true; | ||
353 | + } | ||
354 | + if (framePos != m_videoWidget->mapToGlobal(QPoint(0,0))) | ||
355 | + setVideoSize(); | ||
356 | + return false; | ||
357 | +} | ||
358 | + | ||
359 | +void WidgetRenderer::aspectRatioChanged(Phonon::VideoWidget::AspectRatio) | ||
360 | +{ | ||
361 | + setVideoSize(); | ||
362 | +} | ||
363 | + | ||
364 | +void WidgetRenderer::scaleModeChanged(Phonon::VideoWidget::ScaleMode) | ||
365 | +{ | ||
366 | + setVideoSize(); | ||
367 | +} | ||
368 | + | ||
369 | +void WidgetRenderer::movieSizeChanged(const QSize &movieSize) | ||
370 | +{ | ||
371 | + Q_UNUSED(movieSize); | ||
372 | + setVideoSize(); | ||
373 | } | ||
374 | |||
375 | } | ||
376 | diff --git a/src/3rdparty/phonon/gstreamer/widgetrenderer.h b/src/3rdparty/phonon/gstreamer/widgetrenderer.h | ||
377 | index 03ee9c0..886975a 100644 | ||
378 | --- a/src/3rdparty/phonon/gstreamer/widgetrenderer.h | ||
379 | +++ b/src/3rdparty/phonon/gstreamer/widgetrenderer.h | ||
380 | @@ -40,20 +40,21 @@ class WidgetRenderer : public AbstractRenderer | ||
381 | { | ||
382 | public: | ||
383 | WidgetRenderer(VideoWidget *videoWidget); | ||
384 | + ~WidgetRenderer(void); | ||
385 | bool eventFilter(QEvent * event); | ||
386 | void handlePaint(QPaintEvent *paintEvent); | ||
387 | void handleMediaNodeEvent(const MediaNodeEvent *event); | ||
388 | - const QImage& currentFrame() const; | ||
389 | QRect drawFrameRect() const { return m_drawFrameRect; } | ||
390 | - void setNextFrame(const QByteArray &array, int width, int height); | ||
391 | - bool frameIsSet() { return !m_array.isNull(); } | ||
392 | - void clearFrame(); | ||
393 | + void aspectRatioChanged(Phonon::VideoWidget::AspectRatio aspectRatio); | ||
394 | + void scaleModeChanged(Phonon::VideoWidget::ScaleMode scaleMode); | ||
395 | + void movieSizeChanged(const QSize &movieSize); | ||
396 | + void setVideoSize(void); | ||
397 | + int setOverlay(void); | ||
398 | + void handleMove(QMoveEvent* event); | ||
399 | private: | ||
400 | - mutable QImage m_frame; | ||
401 | - QByteArray m_array; | ||
402 | - int m_width; | ||
403 | - int m_height; | ||
404 | + void paintEvent ( QPaintEvent * event ); | ||
405 | QRect m_drawFrameRect; | ||
406 | + QPoint framePos; | ||
407 | }; | ||
408 | |||
409 | } | ||
410 | diff --git a/src/3rdparty/phonon/gstreamer/x11renderer.cpp b/src/3rdparty/phonon/gstreamer/x11renderer.cpp | ||
411 | index 968f3a8..2119840 100644 | ||
412 | --- a/src/3rdparty/phonon/gstreamer/x11renderer.cpp | ||
413 | +++ b/src/3rdparty/phonon/gstreamer/x11renderer.cpp | ||
414 | @@ -31,6 +31,8 @@ | ||
415 | #include "mediaobject.h" | ||
416 | #include "message.h" | ||
417 | |||
418 | +#define FSL_GSTREAMER 1 | ||
419 | + | ||
420 | QT_BEGIN_NAMESPACE | ||
421 | |||
422 | namespace Phonon | ||
423 | @@ -83,26 +85,7 @@ X11Renderer::~X11Renderer() | ||
424 | |||
425 | GstElement* X11Renderer::createVideoSink() | ||
426 | { | ||
427 | - GstElement *videoSink = gst_element_factory_make ("xvimagesink", NULL); | ||
428 | - if (videoSink) { | ||
429 | - // Check if the xv sink is usable | ||
430 | - if (gst_element_set_state(videoSink, GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS) { | ||
431 | - gst_object_unref(GST_OBJECT(videoSink)); | ||
432 | - videoSink = 0; | ||
433 | - } else { | ||
434 | - // Note that this should not really be necessary as these are | ||
435 | - // default values, though under certain conditions values are retained | ||
436 | - // even between application instances. (reproducible on 0.10.16/Gutsy) | ||
437 | - g_object_set(G_OBJECT(videoSink), "brightness", 0, (const char*)NULL); | ||
438 | - g_object_set(G_OBJECT(videoSink), "contrast", 0, (const char*)NULL); | ||
439 | - g_object_set(G_OBJECT(videoSink), "hue", 0, (const char*)NULL); | ||
440 | - g_object_set(G_OBJECT(videoSink), "saturation", 0, (const char*)NULL); | ||
441 | - } | ||
442 | - } | ||
443 | - | ||
444 | - if (!videoSink) | ||
445 | - videoSink = gst_element_factory_make ("ximagesink", NULL); | ||
446 | - | ||
447 | + GstElement *videoSink = gst_element_factory_make ("mfw_v4lsink", NULL); | ||
448 | gst_object_ref (GST_OBJECT (videoSink)); //Take ownership | ||
449 | gst_object_sink (GST_OBJECT (videoSink)); | ||
450 | |||
451 | -- | ||
452 | 1.7.1 | ||
453 | |||