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 "SkTypes.h" |
10 | 10 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 * Helper function to decode an SkStream. | 60 * Helper function to decode an SkStream. |
61 * @param stream SkStream to decode. Must be at the beginning. | 61 * @param stream SkStream to decode. Must be at the beginning. |
62 * @param bm SkBitmap to decode into. Only used if wicMode is kDecodeBoun
ds_WICMode or | 62 * @param bm SkBitmap to decode into. Only used if wicMode is kDecodeBoun
ds_WICMode or |
63 * kDecodePixels_WICMode, in which case it must not be NULL. | 63 * kDecodePixels_WICMode, in which case it must not be NULL. |
64 * @param format Out parameter for the SkImageDecoder::Format of the SkStre
am. Only used if | 64 * @param format Out parameter for the SkImageDecoder::Format of the SkStre
am. Only used if |
65 * wicMode is kDecodeFormat_WICMode. | 65 * wicMode is kDecodeFormat_WICMode. |
66 */ | 66 */ |
67 bool decodeStream(SkStream* stream, SkBitmap* bm, WICModes wicMode, Format*
format) const; | 67 bool decodeStream(SkStream* stream, SkBitmap* bm, WICModes wicMode, Format*
format) const; |
68 | 68 |
69 protected: | 69 protected: |
70 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE
; | 70 virtual Result onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRI
DE; |
71 }; | 71 }; |
72 | 72 |
73 struct FormatConversion { | 73 struct FormatConversion { |
74 GUID fGuidFormat; | 74 GUID fGuidFormat; |
75 SkImageDecoder::Format fFormat; | 75 SkImageDecoder::Format fFormat; |
76 }; | 76 }; |
77 | 77 |
78 static const FormatConversion gFormatConversions[] = { | 78 static const FormatConversion gFormatConversions[] = { |
79 { GUID_ContainerFormatBmp, SkImageDecoder::kBMP_Format }, | 79 { GUID_ContainerFormatBmp, SkImageDecoder::kBMP_Format }, |
80 { GUID_ContainerFormatGif, SkImageDecoder::kGIF_Format }, | 80 { GUID_ContainerFormatGif, SkImageDecoder::kGIF_Format }, |
81 { GUID_ContainerFormatIco, SkImageDecoder::kICO_Format }, | 81 { GUID_ContainerFormatIco, SkImageDecoder::kICO_Format }, |
82 { GUID_ContainerFormatJpeg, SkImageDecoder::kJPEG_Format }, | 82 { GUID_ContainerFormatJpeg, SkImageDecoder::kJPEG_Format }, |
83 { GUID_ContainerFormatPng, SkImageDecoder::kPNG_Format }, | 83 { GUID_ContainerFormatPng, SkImageDecoder::kPNG_Format }, |
84 }; | 84 }; |
85 | 85 |
86 static SkImageDecoder::Format GuidContainerFormat_to_Format(REFGUID guid) { | 86 static SkImageDecoder::Format GuidContainerFormat_to_Format(REFGUID guid) { |
87 for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) { | 87 for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) { |
88 if (IsEqualGUID(guid, gFormatConversions[i].fGuidFormat)) { | 88 if (IsEqualGUID(guid, gFormatConversions[i].fGuidFormat)) { |
89 return gFormatConversions[i].fFormat; | 89 return gFormatConversions[i].fFormat; |
90 } | 90 } |
91 } | 91 } |
92 return SkImageDecoder::kUnknown_Format; | 92 return SkImageDecoder::kUnknown_Format; |
93 } | 93 } |
94 | 94 |
95 bool SkImageDecoder_WIC::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { | 95 SkImageDecoder::Result SkImageDecoder_WIC::onDecode(SkStream* stream, SkBitmap*
bm, Mode mode) { |
96 WICModes wicMode; | 96 WICModes wicMode; |
97 switch (mode) { | 97 switch (mode) { |
98 case SkImageDecoder::kDecodeBounds_Mode: | 98 case SkImageDecoder::kDecodeBounds_Mode: |
99 wicMode = kDecodeBounds_WICMode; | 99 wicMode = kDecodeBounds_WICMode; |
100 break; | 100 break; |
101 case SkImageDecoder::kDecodePixels_Mode: | 101 case SkImageDecoder::kDecodePixels_Mode: |
102 wicMode = kDecodePixels_WICMode; | 102 wicMode = kDecodePixels_WICMode; |
103 break; | 103 break; |
104 } | 104 } |
105 return this->decodeStream(stream, bm, wicMode, NULL); | 105 return this->decodeStream(stream, bm, wicMode, NULL) ? kSuccess : kFailure; |
106 } | 106 } |
107 | 107 |
108 bool SkImageDecoder_WIC::decodeStream(SkStream* stream, SkBitmap* bm, WICModes w
icMode, | 108 bool SkImageDecoder_WIC::decodeStream(SkStream* stream, SkBitmap* bm, WICModes w
icMode, |
109 Format* format) const { | 109 Format* format) const { |
110 //Initialize COM. | 110 //Initialize COM. |
111 SkAutoCoInitialize scopedCo; | 111 SkAutoCoInitialize scopedCo; |
112 if (!scopedCo.succeeded()) { | 112 if (!scopedCo.succeeded()) { |
113 return false; | 113 return false; |
114 } | 114 } |
115 | 115 |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 static SkImageDecoder::Format get_format_wic(SkStreamRewindable* stream) { | 455 static SkImageDecoder::Format get_format_wic(SkStreamRewindable* stream) { |
456 SkImageDecoder::Format format; | 456 SkImageDecoder::Format format; |
457 SkImageDecoder_WIC codec; | 457 SkImageDecoder_WIC codec; |
458 if (!codec.decodeStream(stream, NULL, SkImageDecoder_WIC::kDecodeFormat_WICM
ode, &format)) { | 458 if (!codec.decodeStream(stream, NULL, SkImageDecoder_WIC::kDecodeFormat_WICM
ode, &format)) { |
459 format = SkImageDecoder::kUnknown_Format; | 459 format = SkImageDecoder::kUnknown_Format; |
460 } | 460 } |
461 return format; | 461 return format; |
462 } | 462 } |
463 | 463 |
464 static SkImageDecoder_FormatReg gFormatReg(get_format_wic); | 464 static SkImageDecoder_FormatReg gFormatReg(get_format_wic); |
OLD | NEW |