+2009-03-03 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Fix for <rdar://problem/6641045>
+ Don't call QTKit to get movie properties until movie metadata has been loaded.
+
+ * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
+ (WebCore::MediaPlayerPrivate::metaDataAvailable): defined
+ * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+ (WebCore::MediaPlayerPrivate::createQTTime): return default if !metaDataAvailable.
+ (WebCore::MediaPlayerPrivate::play): Ditto.
+ (WebCore::MediaPlayerPrivate::pause): Ditto.
+ (WebCore::MediaPlayerPrivate::duration): Ditto.
+ (WebCore::MediaPlayerPrivate::currentTime): Ditto.
+ (WebCore::MediaPlayerPrivate::seek): Ditto.
+ (WebCore::MediaPlayerPrivate::seekTimerFired): Ditto.
+ (WebCore::MediaPlayerPrivate::paused): Ditto.
+ (WebCore::MediaPlayerPrivate::seeking): Ditto.
+ (WebCore::MediaPlayerPrivate::naturalSize): Ditto.
+ (WebCore::MediaPlayerPrivate::hasVideo): Ditto.
+ (WebCore::MediaPlayerPrivate::setVolume): Ditto.
+ (WebCore::MediaPlayerPrivate::setRate): Ditto.
+ (WebCore::MediaPlayerPrivate::dataRate): Ditto.
+ (WebCore::MediaPlayerPrivate::maxTimeLoaded): Ditto.
+ (WebCore::MediaPlayerPrivate::totalBytes): Ditto.
+
2009-03-03 Kevin McCullough <kmccullough@apple.com>
- Spelling fix.
QTTime MediaPlayerPrivate::createQTTime(float time) const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return QTMakeTime(0, 600);
long timeScale = [[m_qtMovie.get() attributeForKey:QTMovieTimeScaleAttribute] longValue];
return QTMakeTime(time * timeScale, timeScale);
void MediaPlayerPrivate::play()
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return;
m_startedPlaying = true;
#if DRAW_FRAME_RATE
void MediaPlayerPrivate::pause()
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return;
m_startedPlaying = false;
#if DRAW_FRAME_RATE
float MediaPlayerPrivate::duration() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return 0;
QTTime time = [m_qtMovie.get() duration];
if (time.flags == kQTTimeIsIndefinite)
float MediaPlayerPrivate::currentTime() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return 0;
QTTime time = [m_qtMovie.get() currentTime];
return min(static_cast<float>(time.timeValue) / time.timeScale, m_endTime);
{
cancelSeek();
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return;
if (time > duration())
void MediaPlayerPrivate::seekTimerFired(Timer<MediaPlayerPrivate>*)
{
- if (!m_qtMovie || !seeking() || currentTime() == m_seekTo) {
+ if (!metaDataAvailable()|| !seeking() || currentTime() == m_seekTo) {
cancelSeek();
updateStates();
m_player->timeChanged();
bool MediaPlayerPrivate::paused() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return true;
return [m_qtMovie.get() rate] == 0;
}
bool MediaPlayerPrivate::seeking() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return false;
return m_seekTo >= 0;
}
IntSize MediaPlayerPrivate::naturalSize() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return IntSize();
return IntSize([[m_qtMovie.get() attributeForKey:QTMovieNaturalSizeAttribute] sizeValue]);
}
bool MediaPlayerPrivate::hasVideo() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return false;
return [[m_qtMovie.get() attributeForKey:QTMovieHasVideoAttribute] boolValue];
}
void MediaPlayerPrivate::setVolume(float volume)
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return;
[m_qtMovie.get() setVolume:volume];
}
void MediaPlayerPrivate::setRate(float rate)
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return;
if (!paused())
[m_qtMovie.get() setRate:rate];
int MediaPlayerPrivate::dataRate() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return 0;
return wkQTMovieDataRate(m_qtMovie.get());
}
float MediaPlayerPrivate::maxTimeLoaded() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return 0;
return wkQTMovieMaxTimeLoaded(m_qtMovie.get());
}
unsigned MediaPlayerPrivate::totalBytes() const
{
- if (!m_qtMovie)
+ if (!metaDataAvailable())
return 0;
return [[m_qtMovie.get() attributeForKey:QTMovieDataSizeAttribute] intValue];
}