Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Side by Side Diff: Source/WebCore/platform/graphics/win/QTMovieVisualContext.cpp

Issue 13642009: WebCore: Remove PLATFORM(WIN) files we do not use. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 #include "config.h"
26
27 #include "QTMovieVisualContext.h"
28
29 #include "QTMovieTask.h"
30 #include <CVBase.h>
31 #include <CVHostTime.h>
32 #include <ImageCompression.h>
33 #include <Movies.h>
34 #include <windows.h>
35 #include <wtf/PassOwnPtr.h>
36
37 struct QTCVTimeStamp {
38 CVTimeStamp t;
39 };
40
41 class QTMovieVisualContextPriv {
42 public:
43 QTMovieVisualContextPriv(QTMovieVisualContext* parent, QTMovieVisualContextC lient* client, QTPixelBuffer::Type contextType);
44 ~QTMovieVisualContextPriv();
45
46 bool isImageAvailableForTime(const QTCVTimeStamp*) const;
47 QTPixelBuffer imageForTime(const QTCVTimeStamp*);
48 void task();
49
50 QTVisualContextRef visualContextRef();
51
52 void setMovie(PassRefPtr<QTMovie>);
53 QTMovie* movie() const;
54
55 static void imageAvailableCallback(QTVisualContextRef visualContext, const C VTimeStamp *timeStamp, void *refCon);
56
57 private:
58 QTMovieVisualContext* m_parent;
59 QTMovieVisualContextClient* m_client;
60 QTVisualContextRef m_visualContext;
61 RefPtr<QTMovie> m_movie;
62
63 };
64
65 static CFDictionaryRef createPixelBufferOptionsDictionary(QTPixelBuffer::Type co ntextType)
66 {
67 const void* key = kQTVisualContextPixelBufferAttributesKey;
68 const void* value = QTPixelBuffer::createPixelBufferAttributesDictionary(con textType);
69 CFDictionaryRef pixelBufferOptions = CFDictionaryCreate(kCFAllocatorDefault, &key, &value, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBac ks);
70 CFRelease(value);
71 return pixelBufferOptions;
72 }
73
74 static CFDictionaryRef pixelBufferCreationOptions(QTPixelBuffer::Type contextTyp e)
75 {
76 if (contextType == QTPixelBuffer::ConfigureForCAImageQueue) {
77 static CFDictionaryRef imageQueueOptions = createPixelBufferOptionsDicti onary(contextType);
78 return imageQueueOptions;
79 }
80
81 ASSERT(contextType == QTPixelBuffer::ConfigureForCGImage);
82 static CFDictionaryRef cgImageOptions = createPixelBufferOptionsDictionary(c ontextType);
83 return cgImageOptions;
84 }
85
86 QTMovieVisualContextPriv::QTMovieVisualContextPriv(QTMovieVisualContext* parent, QTMovieVisualContextClient* client, QTPixelBuffer::Type contextType)
87 : m_parent(parent)
88 , m_client(client)
89 , m_visualContext(0)
90 {
91 typedef OSStatus ( __cdecl *pfnQTPixelBufferContextCreate)(CFAllocatorRef, C FDictionaryRef, QTVisualContextRef*);
92 static pfnQTPixelBufferContextCreate pPixelBufferContextCreate = 0;
93 if (!pPixelBufferContextCreate) {
94 HMODULE qtmlDLL = ::LoadLibraryW(L"QTMLClient.dll");
95 if (!qtmlDLL)
96 return;
97 pPixelBufferContextCreate = reinterpret_cast<pfnQTPixelBufferContextCrea te>(GetProcAddress(qtmlDLL, "QTPixelBufferContextCreate"));
98 if (!pPixelBufferContextCreate)
99 return;
100 }
101
102 OSStatus status = pPixelBufferContextCreate(kCFAllocatorDefault, pixelBuffer CreationOptions(contextType), &m_visualContext);
103 if (status == noErr && m_visualContext)
104 QTVisualContextSetImageAvailableCallback(m_visualContext, &QTMovieVisual ContextPriv::imageAvailableCallback, static_cast<void*>(this));
105 }
106
107 QTMovieVisualContextPriv::~QTMovieVisualContextPriv()
108 {
109 if (m_visualContext)
110 QTVisualContextSetImageAvailableCallback(m_visualContext, 0, 0);
111 }
112
113 bool QTMovieVisualContextPriv::isImageAvailableForTime(const QTCVTimeStamp* time Stamp) const
114 {
115 if (!m_visualContext)
116 return false;
117
118 return QTVisualContextIsNewImageAvailable(m_visualContext, reinterpret_cast< const CVTimeStamp*>(timeStamp));
119 }
120
121 QTPixelBuffer QTMovieVisualContextPriv::imageForTime(const QTCVTimeStamp* timeSt amp)
122 {
123 QTPixelBuffer pixelBuffer;
124 if (m_visualContext) {
125 CVImageBufferRef newImage = 0;
126 OSStatus status = QTVisualContextCopyImageForTime(m_visualContext, kCFAl locatorDefault, reinterpret_cast<const CVTimeStamp*>(timeStamp), &newImage);
127 if (status == noErr)
128 pixelBuffer.adopt(newImage);
129 }
130 return pixelBuffer;
131 }
132
133 void QTMovieVisualContextPriv::task()
134 {
135 if (m_visualContext)
136 QTVisualContextTask(m_visualContext);
137 }
138
139 QTVisualContextRef QTMovieVisualContextPriv::visualContextRef()
140 {
141 return m_visualContext;
142 }
143
144 void QTMovieVisualContextPriv::setMovie(PassRefPtr<QTMovie> movie)
145 {
146 if (movie == m_movie)
147 return;
148
149 if (m_movie) {
150 SetMovieVisualContext(m_movie->getMovieHandle(), 0);
151 m_movie = 0;
152 }
153
154 if (movie)
155 OSStatus status = SetMovieVisualContext(movie->getMovieHandle(), m_visua lContext);
156
157 m_movie = movie;
158 }
159
160 QTMovie* QTMovieVisualContextPriv::movie() const
161 {
162 return m_movie.get();
163 }
164
165 void QTMovieVisualContextPriv::imageAvailableCallback(QTVisualContextRef visualC ontext, const CVTimeStamp *timeStamp, void *refCon)
166 {
167 if (!refCon)
168 return;
169
170 QTMovieVisualContextPriv* vc = static_cast<QTMovieVisualContextPriv*>(refCon );
171 if (!vc->m_client)
172 return;
173
174 vc->m_client->imageAvailableForTime(reinterpret_cast<const QTCVTimeStamp*>(t imeStamp));
175 }
176
177 PassRefPtr<QTMovieVisualContext> QTMovieVisualContext::create(QTMovieVisualConte xtClient* client, QTPixelBuffer::Type contextType)
178 {
179 return adoptRef(new QTMovieVisualContext(client, contextType));
180 }
181
182 QTMovieVisualContext::QTMovieVisualContext(QTMovieVisualContextClient* client, Q TPixelBuffer::Type contextType)
183 : m_private(adoptPtr(new QTMovieVisualContextPriv(this, client, contextType) ))
184 {
185 }
186
187 QTMovieVisualContext::~QTMovieVisualContext()
188 {
189 }
190
191 bool QTMovieVisualContext::isImageAvailableForTime(const QTCVTimeStamp* timeStam p) const
192 {
193 return m_private->isImageAvailableForTime(timeStamp);
194 }
195
196 QTPixelBuffer QTMovieVisualContext::imageForTime(const QTCVTimeStamp* timeStamp)
197 {
198 return m_private->imageForTime(timeStamp);
199 }
200
201 void QTMovieVisualContext::task()
202 {
203 m_private->task();
204 }
205
206 QTVisualContextRef QTMovieVisualContext::visualContextRef()
207 {
208 return m_private->visualContextRef();
209 }
210
211 void QTMovieVisualContext::setMovie(PassRefPtr<QTMovie> movie)
212 {
213 m_private->setMovie(movie);
214 }
215
216 QTMovie* QTMovieVisualContext::movie() const
217 {
218 return m_private->movie();
219 }
220
221 double QTMovieVisualContext::currentHostTime()
222 {
223 return CVGetCurrentHostTime() / CVGetHostClockFrequency();
224 }
OLDNEW
« no previous file with comments | « Source/WebCore/platform/graphics/win/QTMovieVisualContext.h ('k') | Source/WebCore/platform/graphics/win/QTMovieWinTimer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698