OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkTypes.h" | 9 #include "SkImageDecoder_WIC.h" |
10 | |
11 // Workaround for: | 10 // Workaround for: |
12 // http://connect.microsoft.com/VisualStudio/feedback/details/621653/ | 11 // http://connect.microsoft.com/VisualStudio/feedback/details/621653/ |
13 // http://crbug.com/225822 | 12 // http://crbug.com/225822 |
14 // In VS2010 both intsafe.h and stdint.h define the following without guards. | 13 // In VS2010 both intsafe.h and stdint.h define the following without guards. |
15 // SkTypes brought in windows.h and stdint.h and the following defines are | 14 // SkTypes brought in windows.h and stdint.h and the following defines are |
16 // not used by this file. However, they may be re-introduced by wincodec.h. | 15 // not used by this file. However, they may be re-introduced by wincodec.h. |
17 #undef INT8_MIN | 16 #undef INT8_MIN |
18 #undef INT16_MIN | 17 #undef INT16_MIN |
19 #undef INT32_MIN | 18 #undef INT32_MIN |
20 #undef INT64_MIN | 19 #undef INT64_MIN |
21 #undef INT8_MAX | 20 #undef INT8_MAX |
22 #undef UINT8_MAX | 21 #undef UINT8_MAX |
23 #undef INT16_MAX | 22 #undef INT16_MAX |
24 #undef UINT16_MAX | 23 #undef UINT16_MAX |
25 #undef INT32_MAX | 24 #undef INT32_MAX |
26 #undef UINT32_MAX | 25 #undef UINT32_MAX |
27 #undef INT64_MAX | 26 #undef INT64_MAX |
28 #undef UINT64_MAX | 27 #undef UINT64_MAX |
29 | 28 |
30 #include <wincodec.h> | 29 #include <wincodec.h> |
31 #include "SkAutoCoInitialize.h" | 30 #include "SkAutoCoInitialize.h" |
32 #include "SkImageDecoder.h" | |
33 #include "SkImageEncoder.h" | |
34 #include "SkIStream.h" | 31 #include "SkIStream.h" |
35 #include "SkMovie.h" | |
36 #include "SkStream.h" | 32 #include "SkStream.h" |
37 #include "SkTScopedComPtr.h" | 33 #include "SkTScopedComPtr.h" |
38 #include "SkUnPreMultiply.h" | 34 #include "SkUnPreMultiply.h" |
39 | 35 |
40 //All Windows SDKs back to XPSP2 export the CLSID_WICImagingFactory symbol. | 36 //All Windows SDKs back to XPSP2 export the CLSID_WICImagingFactory symbol. |
41 //In the Windows8 SDK the CLSID_WICImagingFactory symbol is still exported | 37 //In the Windows8 SDK the CLSID_WICImagingFactory symbol is still exported |
42 //but CLSID_WICImagingFactory is then #defined to CLSID_WICImagingFactory2. | 38 //but CLSID_WICImagingFactory is then #defined to CLSID_WICImagingFactory2. |
43 //Undo this #define if it has been done so that we link against the symbols | 39 //Undo this #define if it has been done so that we link against the symbols |
44 //we intended to link against on all SDKs. | 40 //we intended to link against on all SDKs. |
45 #if defined(CLSID_WICImagingFactory) | 41 #if defined(CLSID_WICImagingFactory) |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 if (SkBitmap::ComputeIsOpaque(*bm)) { | 239 if (SkBitmap::ComputeIsOpaque(*bm)) { |
244 bm->setAlphaType(kOpaque_SkAlphaType); | 240 bm->setAlphaType(kOpaque_SkAlphaType); |
245 } | 241 } |
246 } | 242 } |
247 | 243 |
248 return SUCCEEDED(hr); | 244 return SUCCEEDED(hr); |
249 } | 245 } |
250 | 246 |
251 ///////////////////////////////////////////////////////////////////////// | 247 ///////////////////////////////////////////////////////////////////////// |
252 | 248 |
253 extern SkImageDecoder* image_decoder_from_stream(SkStreamRewindable*); | 249 SkImageDecoder* SkCreateImageDecoder_WIC(SkImageDecoder::Format format) { |
254 | 250 SkASSERT(SkImageDecoder::kUnknown_Format != format); |
255 SkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) { | 251 return SkNEW(SkImageDecoder_WIC); |
256 SkImageDecoder* decoder = image_decoder_from_stream(stream); | |
257 if (NULL == decoder) { | |
258 // If no image decoder specific to the stream exists, use SkImageDecoder
_WIC. | |
259 return SkNEW(SkImageDecoder_WIC); | |
260 } else { | |
261 return decoder; | |
262 } | |
263 } | 252 } |
264 | 253 |
265 ///////////////////////////////////////////////////////////////////////// | 254 ///////////////////////////////////////////////////////////////////////// |
266 | |
267 SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) { | |
268 return NULL; | |
269 } | |
270 | |
271 ///////////////////////////////////////////////////////////////////////// | |
272 | 255 |
273 class SkImageEncoder_WIC : public SkImageEncoder { | 256 class SkImageEncoder_WIC : public SkImageEncoder { |
274 public: | 257 public: |
275 SkImageEncoder_WIC(Type t) : fType(t) {} | 258 SkImageEncoder_WIC(Type t) : fType(t) {} |
276 | 259 |
277 protected: | 260 protected: |
278 virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality); | 261 virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality); |
279 | 262 |
280 private: | 263 private: |
281 Type fType; | 264 Type fType; |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 | 413 |
431 if (SUCCEEDED(hr)) { | 414 if (SUCCEEDED(hr)) { |
432 hr = piEncoder->Commit(); | 415 hr = piEncoder->Commit(); |
433 } | 416 } |
434 | 417 |
435 return SUCCEEDED(hr); | 418 return SUCCEEDED(hr); |
436 } | 419 } |
437 | 420 |
438 /////////////////////////////////////////////////////////////////////////////// | 421 /////////////////////////////////////////////////////////////////////////////// |
439 | 422 |
440 static SkImageEncoder* sk_imageencoder_wic_factory(SkImageEncoder::Type t) { | 423 SkImageEncoder* SkCreateImageEncoder_WIC(SkImageEncoder::Type t) { |
441 switch (t) { | 424 switch (t) { |
442 case SkImageEncoder::kBMP_Type: | 425 case SkImageEncoder::kBMP_Type: |
443 case SkImageEncoder::kICO_Type: | 426 case SkImageEncoder::kICO_Type: |
444 case SkImageEncoder::kJPEG_Type: | 427 case SkImageEncoder::kJPEG_Type: |
445 case SkImageEncoder::kPNG_Type: | 428 case SkImageEncoder::kPNG_Type: |
446 break; | 429 break; |
447 default: | 430 default: |
448 return NULL; | 431 return NULL; |
449 } | 432 } |
450 return SkNEW_ARGS(SkImageEncoder_WIC, (t)); | 433 return SkNEW_ARGS(SkImageEncoder_WIC, (t)); |
451 } | 434 } |
452 | 435 |
453 static SkImageEncoder_EncodeReg gEReg(sk_imageencoder_wic_factory); | 436 SkImageDecoder::Format SkDetectFormatImageDecoder_WIC(SkStreamRewindable* stream
) { |
454 | |
455 static SkImageDecoder::Format get_format_wic(SkStreamRewindable* stream) { | |
456 SkImageDecoder::Format format; | 437 SkImageDecoder::Format format; |
457 SkImageDecoder_WIC codec; | 438 SkImageDecoder_WIC codec; |
458 if (!codec.decodeStream(stream, NULL, SkImageDecoder_WIC::kDecodeFormat_WICM
ode, &format)) { | 439 if (!codec.decodeStream(stream, NULL, SkImageDecoder_WIC::kDecodeFormat_WICM
ode, &format)) { |
459 format = SkImageDecoder::kUnknown_Format; | 440 format = SkImageDecoder::kUnknown_Format; |
460 } | 441 } |
461 return format; | 442 return format; |
462 } | 443 } |
463 | |
464 static SkImageDecoder_FormatReg gFormatReg(get_format_wic); | |
OLD | NEW |