Home | History | Annotate | Download | only in images
      1 
      2 /*
      3  * Copyright 2009 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #include "SkImageEncoder.h"
     11 #include "SkTRegistry.h"
     12 
     13 typedef SkTRegistry<SkImageEncoder*, SkImageEncoder::Type> EncodeReg;
     14 
     15 // Can't use the typedef here because of complex C++ corner cases
     16 template EncodeReg* SkTRegistry<SkImageEncoder*, SkImageEncoder::Type>::gHead;
     17 
     18 #ifdef SK_ENABLE_LIBPNG
     19     extern SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type);
     20 #endif
     21 
     22 SkImageEncoder* SkImageEncoder::Create(Type t) {
     23     SkImageEncoder* codec = NULL;
     24     const EncodeReg* curr = EncodeReg::Head();
     25     while (curr) {
     26         if ((codec = curr->factory()(t)) != NULL) {
     27             return codec;
     28         }
     29         curr = curr->next();
     30     }
     31 #ifdef SK_ENABLE_LIBPNG
     32     if ((codec = sk_libpng_efactory(t)) != NULL) {
     33         return codec;
     34     }
     35 #endif
     36     return NULL;
     37 }
     38