diff -r 06b8e2af4411 -r 6fbed849b4f4 qtmobility/plugins/multimedia/qt7/qt7movieviewoutput.mm --- 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 +#include +#include 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