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

Unified Diff: src/ports/SkImageDecoder_CG.cpp

Issue 14363003: Updates to skimage tool to use it for testing. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Implement onGetFormat for other decoders. 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 side-by-side diff with in-line comments
Download patch
Index: src/ports/SkImageDecoder_CG.cpp
diff --git a/src/ports/SkImageDecoder_CG.cpp b/src/ports/SkImageDecoder_CG.cpp
index 9fc49a445f264ffab1f2431dbb9bc6ca43a6af37..7ad34d75014e621cadff5946b640f05d99e2ec2e 100644
--- a/src/ports/SkImageDecoder_CG.cpp
+++ b/src/ports/SkImageDecoder_CG.cpp
@@ -25,6 +25,31 @@
#include <MobileCoreServices/MobileCoreServices.h>
#endif
+struct FormatConversion {
+ CFStringRef fUTType;
+ SkImageDecoder::Format fFormat;
+};
+
+// Array of the types supported by the decoder.
+static const FormatConversion gFormatConversions[] = {
+ { kUTTypeBMP, SkImageDecoder::kBMP_Format },
+ { kUTTypeGIF, SkImageDecoder::kGIF_Format },
+ { kUTTypeICO, SkImageDecoder::kICO_Format },
+ { kUTTypeJPEG, SkImageDecoder::kJPEG_Format },
+ // Also include JPEG2000
+ { kUTTypeJPEG2000, SkImageDecoder::kJPEG_Format },
+ { kUTTypePNG, SkImageDecoder::kPNG_Format },
+};
+
+static SkImageDecoder::Format UTType_to_Format(const CFStringRef uttype) {
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gFormatConversions); i++) {
+ if (CFStringCompare(uttype, gFormatConversions[i].fUTType, 0) == kCFCompareEqualTo) {
+ return gFormatConversions[i].fFormat;
+ }
+ }
+ return SkImageDecoder::kUnknown_Format;
+}
+
static void malloc_release_proc(void* info, const void* data, size_t size) {
sk_free(info);
}
@@ -46,10 +71,26 @@ static CGImageSourceRef SkStreamToCGImageSource(SkStream* stream) {
}
class SkImageDecoder_CG : public SkImageDecoder {
+public:
+ virtual Format getFormat() const SK_OVERRIDE { return kMultiple_Formats; }
+ Format onGetFormat(SkStream* stream) const SK_OVERRIDE;
+
protected:
virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode);
};
+SkImageDecoder::Format SkImageDecoder_CG::onGetFormat(SkStream *stream) const {
+ CGImageSourceRef imageSrc = SkStreamToCGImageSource(stream);
+
+ if (NULL == imageSrc) {
+ return kUnknown_Format;
+ }
+
+ SkAutoTCallVProc<const void, CFRelease> arsrc(imageSrc);
+ const CFStringRef name = CGImageSourceGetType(imageSrc);
+ return UTType_to_Format(name);
epoger 2013/04/23 16:03:41 Oh. I guess this is why the SkImageDecoder subcla
scroggo 2013/04/23 20:55:18 In general, you are correct. The typical client wi
+}
+
#define BITMAP_INFO (kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast)
bool SkImageDecoder_CG::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {

Powered by Google App Engine
This is Rietveld 408576698