Fix for QuickTime 7 media player backend
Fix build on Mac 10.6 (32bits) Task-number: QTBUG-27179 Change-Id: If0b83605650966bf801b5fbb06d02c113d0b4214 Reviewed-by: Andy Nichols <andy.nichols@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
700b4cdf42
commit
8907cecc0d
@@ -55,6 +55,8 @@
|
|||||||
#include <qabstractvideosurface.h>
|
#include <qabstractvideosurface.h>
|
||||||
#include <qvideosurfaceformat.h>
|
#include <qvideosurfaceformat.h>
|
||||||
|
|
||||||
|
#include <QtOpenGl/QGLContext>
|
||||||
|
|
||||||
QT_USE_NAMESPACE
|
QT_USE_NAMESPACE
|
||||||
|
|
||||||
//#define USE_MAIN_MONITOR_COLOR_SPACE 1
|
//#define USE_MAIN_MONITOR_COLOR_SPACE 1
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ class QT7PlayerSession;
|
|||||||
class QT7PlayerService;
|
class QT7PlayerService;
|
||||||
class QGLWidget;
|
class QGLWidget;
|
||||||
class QGLFramebufferObject;
|
class QGLFramebufferObject;
|
||||||
|
class QWindow;
|
||||||
|
class QOpenGLContext;
|
||||||
|
|
||||||
class QT7MovieViewRenderer : public QT7VideoRendererControl
|
class QT7MovieViewRenderer : public QT7VideoRendererControl
|
||||||
{
|
{
|
||||||
@@ -88,7 +90,8 @@ private:
|
|||||||
QSize m_nativeSize;
|
QSize m_nativeSize;
|
||||||
QAbstractVideoSurface *m_surface;
|
QAbstractVideoSurface *m_surface;
|
||||||
QVideoFrame m_currentFrame;
|
QVideoFrame m_currentFrame;
|
||||||
QGLWidget *m_glWidget;
|
QWindow *m_window;
|
||||||
|
QOpenGLContext *m_context;
|
||||||
QGLFramebufferObject *m_fbo;
|
QGLFramebufferObject *m_fbo;
|
||||||
CIContext *m_ciContext;
|
CIContext *m_ciContext;
|
||||||
|
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ private:
|
|||||||
@interface HiddenQTMovieView : QTMovieView
|
@interface HiddenQTMovieView : QTMovieView
|
||||||
{
|
{
|
||||||
@private
|
@private
|
||||||
QWidget *m_window;
|
QWindow *m_window;
|
||||||
QT7MovieViewRenderer *m_renderer;
|
QT7MovieViewRenderer *m_renderer;
|
||||||
QReadWriteLock m_rendererLock;
|
QReadWriteLock m_rendererLock;
|
||||||
}
|
}
|
||||||
@@ -160,10 +160,10 @@ private:
|
|||||||
QWriteLocker lock(&self->m_rendererLock);
|
QWriteLocker lock(&self->m_rendererLock);
|
||||||
self->m_renderer = renderer;
|
self->m_renderer = renderer;
|
||||||
|
|
||||||
self->m_window = new QWidget;
|
self->m_window = new QWindow;
|
||||||
self->m_window->setWindowOpacity(0.0);
|
self->m_window->setOpacity(0.0);
|
||||||
self->m_window->show();
|
self->m_window->setGeometry(0,0,1,1);
|
||||||
self->m_window->hide();
|
self->m_window->create();
|
||||||
|
|
||||||
[(NSView *)(self->m_window->winId()) addSubview:self];
|
[(NSView *)(self->m_window->winId()) addSubview:self];
|
||||||
[self setDrawRect:QRect(0,0,1,1)];
|
[self setDrawRect:QRect(0,0,1,1)];
|
||||||
@@ -173,7 +173,7 @@ private:
|
|||||||
|
|
||||||
- (void) dealloc
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
delete self->m_window;
|
self->m_window->deleteLater();
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,7 +273,8 @@ QT7MovieViewRenderer::QT7MovieViewRenderer(QObject *parent)
|
|||||||
m_movie(0),
|
m_movie(0),
|
||||||
m_movieView(0),
|
m_movieView(0),
|
||||||
m_surface(0),
|
m_surface(0),
|
||||||
m_glWidget(0),
|
m_window(0),
|
||||||
|
m_context(0),
|
||||||
m_fbo(0),
|
m_fbo(0),
|
||||||
m_ciContext(0),
|
m_ciContext(0),
|
||||||
m_pendingRenderEvent(false)
|
m_pendingRenderEvent(false)
|
||||||
@@ -289,7 +290,7 @@ QT7MovieViewRenderer::~QT7MovieViewRenderer()
|
|||||||
[(HiddenQTMovieView*)m_movieView release];
|
[(HiddenQTMovieView*)m_movieView release];
|
||||||
[m_ciContext release];
|
[m_ciContext release];
|
||||||
delete m_fbo;
|
delete m_fbo;
|
||||||
delete m_glWidget;
|
delete m_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QT7MovieViewRenderer::setupVideoOutput()
|
void QT7MovieViewRenderer::setupVideoOutput()
|
||||||
@@ -364,24 +365,35 @@ QVideoFrame QT7MovieViewRenderer::convertCIImageToGLTexture(const QVideoFrame &f
|
|||||||
if (frame.handleType() != QAbstractVideoBuffer::CoreImageHandle)
|
if (frame.handleType() != QAbstractVideoBuffer::CoreImageHandle)
|
||||||
return QVideoFrame();
|
return QVideoFrame();
|
||||||
|
|
||||||
if (!m_glWidget) {
|
if (!m_window) {
|
||||||
QOpenGLContext *qGlContext = 0;
|
QOpenGLContext *qGlContext = 0;
|
||||||
|
|
||||||
if (m_surface)
|
if (m_surface)
|
||||||
qGlContext = qobject_cast<QOpenGLContext*>(m_surface->property("GLContext").value<QObject*>());
|
qGlContext = qobject_cast<QOpenGLContext*>(m_surface->property("GLContext").value<QObject*>());
|
||||||
|
|
||||||
if (qGlContext) {
|
if (qGlContext) {
|
||||||
QGLContext *surfaceContext = QGLContext::fromOpenGLContext(qGlContext);
|
m_window = new QWindow();
|
||||||
m_glWidget = new QGLWidget();
|
|
||||||
|
|
||||||
QGLContext *context = new QGLContext(surfaceContext->format());
|
QSurfaceFormat format(qGlContext->format());
|
||||||
m_glWidget->setContext(context, surfaceContext);
|
|
||||||
|
m_context = new QOpenGLContext(m_window);
|
||||||
|
m_context->setShareContext(qGlContext);
|
||||||
|
m_context->setFormat(format);
|
||||||
|
m_context->create();
|
||||||
|
|
||||||
|
m_window->setFormat(format);
|
||||||
|
m_window->setGeometry(0, 0, 1, 1);
|
||||||
|
m_window->setSurfaceType(QWindow::OpenGLSurface);
|
||||||
|
m_window->create();
|
||||||
} else {
|
} else {
|
||||||
return QVideoFrame();
|
return QVideoFrame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_glWidget->makeCurrent();
|
if (!m_context)
|
||||||
|
return QVideoFrame();
|
||||||
|
|
||||||
|
m_context->makeCurrent(m_window);
|
||||||
|
|
||||||
if (!m_fbo || m_fbo->size() != frame.size()) {
|
if (!m_fbo || m_fbo->size() != frame.size()) {
|
||||||
delete m_fbo;
|
delete m_fbo;
|
||||||
@@ -414,6 +426,7 @@ QVideoFrame QT7MovieViewRenderer::convertCIImageToGLTexture(const QVideoFrame &f
|
|||||||
|
|
||||||
[m_ciContext drawImage:ciImg inRect:dRect fromRect:sRect];
|
[m_ciContext drawImage:ciImg inRect:dRect fromRect:sRect];
|
||||||
}
|
}
|
||||||
|
|
||||||
p.endNativePainting();
|
p.endNativePainting();
|
||||||
|
|
||||||
QAbstractVideoBuffer *buffer = new TextureVideoBuffer(m_fbo->texture());
|
QAbstractVideoBuffer *buffer = new TextureVideoBuffer(m_fbo->texture());
|
||||||
@@ -462,7 +475,6 @@ void QT7MovieViewRenderer::setSurface(QAbstractVideoSurface *surface)
|
|||||||
|
|
||||||
void QT7MovieViewRenderer::renderFrame(const QVideoFrame &frame)
|
void QT7MovieViewRenderer::renderFrame(const QVideoFrame &frame)
|
||||||
{
|
{
|
||||||
|
|
||||||
QMutexLocker locker(&m_mutex);
|
QMutexLocker locker(&m_mutex);
|
||||||
m_currentFrame = frame;
|
m_currentFrame = frame;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user