18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#ifndef QTMovie_h
276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#define QTMovie_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2968513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "QTTrack.h"
3068513a70bcd92384395513322f1b801e7bf9c729Steve Block#include <WTF/Vector.h>
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef QTMOVIEWIN_EXPORTS
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define QTMOVIEWIN_API __declspec(dllexport)
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define QTMOVIEWIN_API __declspec(dllimport)
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass QTMovie;
396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass QTMoviePrivate;
406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentypedef struct MovieType** Movie;
4168513a70bcd92384395513322f1b801e7bf9c729Steve Blocktypedef Vector<RefPtr<QTTrack>> QTTrackArray;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass QTMovieClient {
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void movieEnded(QTMovie*) = 0;
466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void movieLoadStateChanged(QTMovie*) = 0;
476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void movieTimeChanged(QTMovie*) = 0;
48d0825bca7fe65beaee391d30da42e937db621564Steve Block};
49d0825bca7fe65beaee391d30da42e937db621564Steve Block
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum {
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QTMovieLoadStateError = -1L,
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QTMovieLoadStateLoaded  = 2000L,
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QTMovieLoadStatePlayable = 10000L,
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QTMovieLoadStatePlaythroughOK = 20000L,
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QTMovieLoadStateComplete = 100000L
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef const struct __CFURL * CFURLRef;
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass QTMOVIEWIN_API QTMovie : public RefCounted<QTMovie> {
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static bool initializeQuickTime();
63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    static void taskTimerFired();
64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
6568513a70bcd92384395513322f1b801e7bf9c729Steve Block    static void disableComponent(uint32_t[5]);
6668513a70bcd92384395513322f1b801e7bf9c729Steve Block
676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QTMovie(QTMovieClient*);
686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    ~QTMovie();
696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void addClient(QTMovieClient*);
716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void removeClient(QTMovieClient*);
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
732bde8e466a4451c7319e3a072d118917957d6554Steve Block    void loadPath(const UChar* url, int len, bool preservesPitch);
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void load(const UChar* url, int len, bool preservesPitch);
756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void load(CFURLRef, bool preservesPitch);
766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    long loadState() const;
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float maxTimeLoaded() const;
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void play();
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void pause();
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float rate() const;
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setRate(float);
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float duration() const;
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float currentTime() const;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setCurrentTime(float) const;
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setVolume(float);
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setPreservesPitch(bool);
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    unsigned dataSize() const;
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void getNaturalSize(int& width, int& height);
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void disableUnsupportedTracks(unsigned& enabledTrackCount, unsigned& totalTrackCount);
986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    bool isDisabled() const;
1005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void setDisabled(bool);
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool hasVideo() const;
103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    bool hasAudio() const;
104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
10568513a70bcd92384395513322f1b801e7bf9c729Steve Block    QTTrackArray videoTracks() const;
10668513a70bcd92384395513322f1b801e7bf9c729Steve Block
107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool hasClosedCaptions() const;
108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void setClosedCaptionsVisible(bool);
109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static unsigned countSupportedTypes();
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void getSupportedType(unsigned index, const UChar*& str, unsigned& len);
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11368513a70bcd92384395513322f1b801e7bf9c729Steve Block    CGAffineTransform getTransform() const;
11468513a70bcd92384395513322f1b801e7bf9c729Steve Block    void setTransform(CGAffineTransform);
11568513a70bcd92384395513322f1b801e7bf9c729Steve Block    void resetTransform();
11668513a70bcd92384395513322f1b801e7bf9c729Steve Block
1176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Movie getMovieHandle() const;
118d0825bca7fe65beaee391d30da42e937db621564Steve Block
11928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    long timeScale() const;
12028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void setPrivateBrowsingMode(bool);
12281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
1246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QTMoviePrivate* m_private;
1256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    friend class QTMoviePrivate;
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
129