aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/utils/win/SkAutoCoInitialize.h8
-rw-r--r--src/ports/SkImageDecoder_WIC.cpp16
-rw-r--r--src/utils/win/SkAutoCoInitialize.cpp8
3 files changed, 21 insertions, 11 deletions
diff --git a/include/utils/win/SkAutoCoInitialize.h b/include/utils/win/SkAutoCoInitialize.h
index 2114043a75..709fa6bab9 100644
--- a/include/utils/win/SkAutoCoInitialize.h
+++ b/include/utils/win/SkAutoCoInitialize.h
@@ -18,13 +18,13 @@
* An instance of this class initializes COM on creation
* and closes the COM library on destruction.
*/
-class AutoCoInitialize : SkNoncopyable {
+class SkAutoCoInitialize : SkNoncopyable {
private:
HRESULT fHR;
public:
- AutoCoInitialize();
- ~AutoCoInitialize();
- HRESULT getHR();
+ SkAutoCoInitialize();
+ ~SkAutoCoInitialize();
+ bool succeeded();
};
#endif
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;
+}