Home | History | Annotate | Download | only in win
      1 /*
      2  * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef QTMovieVisualContext_h
     27 #define QTMovieVisualContext_h
     28 
     29 #ifdef QTMOVIEWIN_EXPORTS
     30 #define QTMOVIEWIN_API __declspec(dllexport)
     31 #else
     32 #define QTMOVIEWIN_API __declspec(dllimport)
     33 #endif
     34 
     35 #include "QTMovie.h"
     36 #include "QTMovieTask.h"
     37 #include "QTPixelBuffer.h"
     38 #include <WTF/OwnPtr.h>
     39 #include <WTF/RefCounted.h>
     40 
     41 typedef const struct __CFDictionary* CFDictionaryRef;
     42 typedef struct OpaqueQTVisualContext*   QTVisualContextRef;
     43 
     44 // QTCVTimeStamp is a struct containing only a CVTimeStamp.  This is to
     45 // work around the inability of CVTimeStamp to be forward declared, in
     46 // addition to it being declared in different header files when building
     47 // the QTMovieWin and WebCore projects.
     48 struct QTCVTimeStamp;
     49 
     50 class QTMovieVisualContextClient {
     51 public:
     52     virtual void imageAvailableForTime(const QTCVTimeStamp*) = 0;
     53 };
     54 
     55 class QTMOVIEWIN_API QTMovieVisualContext : public RefCounted<QTMovieVisualContext> {
     56 public:
     57     static PassRefPtr<QTMovieVisualContext> create(QTMovieVisualContextClient*, QTPixelBuffer::Type);
     58     ~QTMovieVisualContext();
     59 
     60     bool isImageAvailableForTime(const QTCVTimeStamp*) const;
     61     QTPixelBuffer imageForTime(const QTCVTimeStamp*);
     62     void task();
     63 
     64     QTVisualContextRef visualContextRef();
     65 
     66     void setMovie(PassRefPtr<QTMovie>);
     67     QTMovie* movie() const;
     68 
     69     static double currentHostTime();
     70 
     71 protected:
     72     QTMovieVisualContext(QTMovieVisualContextClient*, QTPixelBuffer::Type);
     73     void setupVisualContext();
     74 
     75     friend class QTMovieVisualContextPriv;
     76     OwnPtr<QTMovieVisualContextPriv> m_private;
     77 };
     78 
     79 #endif
     80