diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ports/SkImageDecoder_WIC.cpp | 16 | ||||
-rw-r--r-- | src/utils/win/SkAutoCoInitialize.cpp | 8 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/ports/SkImageDecoder_WIC.cpp b/src/ports/SkImageDecoder_WIC.cpp index 48a927d051..a69ed4a0f1 100644 --- a/src/ports/SkImageDecoder_WIC.cpp +++ b/src/ports/SkImageDecoder_WIC.cpp @@ -25,8 +25,12 @@ protected: bool SkImageDecoder_WIC::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { //Initialize COM. - AutoCoInitialize scopedCo; - HRESULT hr = scopedCo.getHR(); + SkAutoCoInitialize scopedCo; + if (!scopedCo.succeeded()) { + return false; + } + + HRESULT hr = S_OK; //Create Windows Imaging Component ImagingFactory. SkTScopedComPtr<IWICImagingFactory> piImagingFactory; @@ -189,8 +193,12 @@ bool SkImageEncoder_WIC::onEncode(SkWStream* stream } //Initialize COM. - AutoCoInitialize scopedCo; - HRESULT hr = scopedCo.getHR(); + SkAutoCoInitialize scopedCo; + if (!scopedCo.succeeded()) { + return false; + } + + HRESULT hr = S_OK; //Create Windows Imaging Component ImagingFactory. SkTScopedComPtr<IWICImagingFactory> piImagingFactory; diff --git a/src/utils/win/SkAutoCoInitialize.cpp b/src/utils/win/SkAutoCoInitialize.cpp index 460606bb1d..dd6e9368d6 100644 --- a/src/utils/win/SkAutoCoInitialize.cpp +++ b/src/utils/win/SkAutoCoInitialize.cpp @@ -12,16 +12,18 @@ #include <ole2.h> #include "SkAutoCoInitialize.h" -AutoCoInitialize::AutoCoInitialize() : +SkAutoCoInitialize::SkAutoCoInitialize() : fHR( CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE) ) { } -AutoCoInitialize::~AutoCoInitialize() { +SkAutoCoInitialize::~SkAutoCoInitialize() { if (SUCCEEDED(this->fHR)) { CoUninitialize(); } } -HRESULT AutoCoInitialize::getHR() { return this->fHR; } +bool SkAutoCoInitialize::succeeded() { + return SUCCEEDED(this->fHR) || RPC_E_CHANGED_MODE == this->fHR; +} |