/*
 * Copyright 2018 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
// DO NOT USE -- FOR INTERNAL TESTING ONLY

#ifndef sk_imageinfo_DEFINED
#define sk_imageinfo_DEFINED

#include "sk_types.h"

SK_C_PLUS_PLUS_BEGIN_GUARD

typedef enum {
    UNKNOWN_SK_COLORTYPE,
    RGBA_8888_SK_COLORTYPE,
    BGRA_8888_SK_COLORTYPE,
    ALPHA_8_SK_COLORTYPE,
    GRAY_8_SK_COLORTYPE,
    RGBA_F16_SK_COLORTYPE,
    RGBA_F32_SK_COLORTYPE,
} sk_colortype_t;

typedef enum {
    OPAQUE_SK_ALPHATYPE,
    PREMUL_SK_ALPHATYPE,
    UNPREMUL_SK_ALPHATYPE,
} sk_alphatype_t;

/**
 *  Allocate a new imageinfo object. If colorspace is not null, it's owner-count will be
 *  incremented automatically.
 */
sk_imageinfo_t* sk_imageinfo_new(int width, int height, sk_colortype_t ct, sk_alphatype_t at,
                                 sk_colorspace_t* cs);

/**
 *  Free the imageinfo object. If it contains a reference to a colorspace, its owner-count will
 *  be decremented automatically.
 */
void sk_imageinfo_delete(sk_imageinfo_t*);

int32_t          sk_imageinfo_get_width(sk_imageinfo_t*);
int32_t          sk_imageinfo_get_height(sk_imageinfo_t*);
sk_colortype_t   sk_imageinfo_get_colortype(sk_imageinfo_t*);
sk_alphatype_t   sk_imageinfo_get_alphatype(sk_imageinfo_t*);

/**
 *  Return the colorspace object reference contained in the imageinfo, or null if there is none.
 *  Note: this does not modify the owner-count on the colorspace object. If the caller needs to
 *  use the colorspace beyond the lifetime of the imageinfo, it should manually call
 *  sk_colorspace_ref() (and then call unref() when it is done).
 */
sk_colorspace_t* sk_imageinfo_get_colorspace(sk_imageinfo_t*);

SK_C_PLUS_PLUS_END_GUARD

#endif
