summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Koenig <tobias.koenig.qnx@kdab.com>2013-06-04 16:09:32 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-06-05 10:26:53 +0200
commit056fe7e11e36f88e4e9fbe5838742d50aed3eda3 (patch)
tree7de126489dcce79b6ba36583e88e9c7771cb6e32 /src
parent3d45b9147ec93c4af38aef5e6ab2302681bb1425 (diff)
BlackBerry: Fix frame size of video playback
Adapt the frame size dynamically, since mmrenderer resizes the source viewport of the native video window at runtime on some hardware platforms. Task-number: QTBUG-31534 Change-Id: Ie637d7a80697175dacb454535fbe251b2c7a6809 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/blackberry/common/windowgrabber.cpp48
-rw-r--r--src/plugins/blackberry/common/windowgrabber.h1
-rw-r--r--src/plugins/blackberry/mediaplayer/bbplayervideorenderercontrol.cpp8
3 files changed, 49 insertions, 8 deletions
diff --git a/src/plugins/blackberry/common/windowgrabber.cpp b/src/plugins/blackberry/common/windowgrabber.cpp
index db070d8e5..144b5a693 100644
--- a/src/plugins/blackberry/common/windowgrabber.cpp
+++ b/src/plugins/blackberry/common/windowgrabber.cpp
@@ -55,6 +55,8 @@ QT_BEGIN_NAMESPACE
WindowGrabber::WindowGrabber(QObject *parent)
: QObject(parent),
m_screenBuffer(0),
+ m_screenBufferWidth(-1),
+ m_screenBufferHeight(-1),
m_active(false),
m_screenContextInitialized(false),
m_screenPixmapInitialized(false),
@@ -145,7 +147,8 @@ void WindowGrabber::start()
}
int size[2] = { 0, 0 };
- result = screen_get_window_property_iv(m_window, SCREEN_PROPERTY_SIZE, size);
+
+ result = screen_get_window_property_iv(m_window, SCREEN_PROPERTY_SOURCE_SIZE, size);
if (result != 0) {
cleanup();
qWarning() << "WindowGrabber: cannot get window size:" << strerror(errno);
@@ -155,7 +158,18 @@ void WindowGrabber::start()
m_screenBufferWidth = size[0];
m_screenBufferHeight = size[1];
- result = screen_set_pixmap_property_iv(m_screenPixmap, SCREEN_PROPERTY_BUFFER_SIZE, size);
+ updateFrameSize();
+
+ m_timer.start();
+
+ m_active = true;
+}
+
+void WindowGrabber::updateFrameSize()
+{
+ int size[2] = { m_screenBufferWidth, m_screenBufferHeight };
+
+ int result = screen_set_pixmap_property_iv(m_screenPixmap, SCREEN_PROPERTY_BUFFER_SIZE, size);
if (result != 0) {
cleanup();
qWarning() << "WindowGrabber: cannot set pixmap size:" << strerror(errno);
@@ -191,10 +205,6 @@ void WindowGrabber::start()
qWarning() << "WindowGrabber: cannot get pixmap buffer stride:" << strerror(errno);
return;
}
-
- m_timer.start();
-
- m_active = true;
}
void WindowGrabber::stop()
@@ -284,7 +294,31 @@ QByteArray WindowGrabber::windowGroupId() const
void WindowGrabber::grab()
{
- const int result = screen_read_window(m_window, m_screenPixmapBuffer, 0, 0, 0);
+ int size[2] = { 0, 0 };
+
+ int result = screen_get_window_property_iv(m_window, SCREEN_PROPERTY_SOURCE_SIZE, size);
+ if (result != 0) {
+ cleanup();
+ qWarning() << "WindowGrabber: cannot get window size:" << strerror(errno);
+ return;
+ }
+
+ if (m_screenBufferWidth != size[0] || m_screenBufferHeight != size[1]) {
+ // The source viewport size changed, so we have to adapt our buffers
+
+ if (m_screenPixmapBufferInitialized) {
+ screen_destroy_pixmap_buffer(m_screenPixmap);
+ m_screenPixmapBufferInitialized = false;
+ }
+
+ m_screenBufferWidth = size[0];
+ m_screenBufferHeight = size[1];
+
+ updateFrameSize();
+ }
+
+ const int rect[] = { 0, 0, m_screenBufferWidth, m_screenBufferHeight };
+ result = screen_read_window(m_window, m_screenPixmapBuffer, 1, rect, 0);
if (result != 0)
return;
diff --git a/src/plugins/blackberry/common/windowgrabber.h b/src/plugins/blackberry/common/windowgrabber.h
index 547742da1..f8e3686a2 100644
--- a/src/plugins/blackberry/common/windowgrabber.h
+++ b/src/plugins/blackberry/common/windowgrabber.h
@@ -79,6 +79,7 @@ private slots:
private:
void cleanup();
+ void updateFrameSize();
QTimer m_timer;
diff --git a/src/plugins/blackberry/mediaplayer/bbplayervideorenderercontrol.cpp b/src/plugins/blackberry/mediaplayer/bbplayervideorenderercontrol.cpp
index 096ae55ec..d9226d91f 100644
--- a/src/plugins/blackberry/mediaplayer/bbplayervideorenderercontrol.cpp
+++ b/src/plugins/blackberry/mediaplayer/bbplayervideorenderercontrol.cpp
@@ -142,8 +142,14 @@ void BbPlayerVideoRendererControl::resume()
void BbPlayerVideoRendererControl::frameGrabbed(const QImage &frame)
{
if (m_surface) {
- if (!m_surface->isActive())
+ if (!m_surface->isActive()) {
m_surface->start(QVideoSurfaceFormat(frame.size(), QVideoFrame::Format_ARGB32));
+ } else {
+ if (m_surface->surfaceFormat().frameSize() != frame.size()) {
+ m_surface->stop();
+ m_surface->start(QVideoSurfaceFormat(frame.size(), QVideoFrame::Format_ARGB32));
+ }
+ }
m_surface->present(frame.copy());
}