qtmobility/plugins/multimedia/qt7/qt7movieviewoutput.mm
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
--- 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