--- a/qtmobility/plugins/multimedia/qt7/qt7movieviewoutput.mm Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/plugins/multimedia/qt7/qt7movieviewoutput.mm Wed Jun 23 19:08:38 2010 +0300
@@ -48,6 +48,8 @@
#include "qt7playersession.h"
#include <QtCore/qdebug.h>
+#include <QuartzCore/CIFilter.h>
+#include <QuartzCore/CIVector.h>
QT_USE_NAMESPACE
@@ -62,6 +64,7 @@
- (TransparentQTMovieView *) init;
- (void) setDrawRect:(QRect &)rect;
+- (CIImage *) view:(QTMovieView *)view willDisplayImage:(CIImage *)img;
- (void) setContrast:(qreal) contrast;
@end
@@ -155,6 +158,7 @@
:QT7VideoWindowControl(parent),
m_movie(0),
m_movieView(0),
+ m_layouted(false),
m_winId(0),
m_fullscreen(false),
m_aspectRatioMode(Qt::KeepAspectRatio),
@@ -167,6 +171,8 @@
QT7MovieViewOutput::~QT7MovieViewOutput()
{
+ [(QTMovieView*)m_movieView release];
+ [(QTMovie*)m_movie release];
}
void QT7MovieViewOutput::setupVideoOutput()
@@ -177,7 +183,7 @@
if (m_movie == 0 || m_winId <= 0)
return;
- NSSize size = [[(QTMovie*)m_movie attributeForKey:@"QTMovieCurrentSizeAttribute"] sizeValue];
+ NSSize size = [[(QTMovie*)m_movie attributeForKey:@"QTMovieNaturalSizeAttribute"] sizeValue];
m_nativeSize = QSize(size.width, size.height);
if (!m_movieView)
@@ -187,18 +193,36 @@
[(QTMovieView*)m_movieView setMovie:(QTMovie*)m_movie];
[(NSView *)m_winId addSubview:(QTMovieView*)m_movieView];
+ m_layouted = true;
setDisplayRect(m_displayRect);
}
-void QT7MovieViewOutput::setEnabled(bool)
+void QT7MovieViewOutput::setMovie(void *movie)
{
+ if (m_movie != movie) {
+ if (m_movie) {
+ if (m_movieView)
+ [(QTMovieView*)m_movieView setMovie:nil];
+
+ [(QTMovie*)m_movie release];
+ }
+
+ m_movie = movie;
+
+ if (m_movie)
+ [(QTMovie*)m_movie retain];
+
+ setupVideoOutput();
+ }
}
-void QT7MovieViewOutput::setMovie(void *movie)
+void QT7MovieViewOutput::updateNaturalSize(const QSize &newSize)
{
- m_movie = movie;
- setupVideoOutput();
+ if (m_nativeSize != newSize) {
+ m_nativeSize = newSize;
+ emit nativeSizeChanged();
+ }
}
WId QT7MovieViewOutput::winId() const
@@ -208,8 +232,15 @@
void QT7MovieViewOutput::setWinId(WId id)
{
- m_winId = id;
- setupVideoOutput();
+ if (m_winId != id) {
+ if (m_movieView && m_layouted) {
+ [(QTMovieView*)m_movieView removeFromSuperview];
+ m_layouted = false;
+ }
+
+ m_winId = id;
+ setupVideoOutput();
+ }
}
QRect QT7MovieViewOutput::displayRect() const