/*
 * Copyright 2010 Damjan Jovanovic
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#pragma makedep proxy
#pragma makedep register

#include "wincodec.idl"

[
    threading(both),
    uuid(00000301-a8f2-4877-ba0a-fd2b6645fb94)  /* IWICFormatConverter */
]
coclass PSFactoryBuffer { interface IFactoryBuffer; }

[
    helpstring("WIC Imaging Factory"),
    threading(both),
    uuid(cacaf262-9370-4615-a13b-9f5539da4c0a)
]
coclass WICImagingFactory { interface IWICImagingFactory; }

[
    helpstring("WIC BMP Decoder"),
    threading(both),
    uuid(6b462062-7cbf-400d-9fdb-813dd10f2778)
]
coclass WICBmpDecoder { interface IWICBitmapDecoder; }

[
    helpstring("WIC PNG Decoder"),
    threading(both),
    uuid(389ea17b-5078-4cde-b6ef-25c15175c751)
]
coclass WICPngDecoder { interface IWICBitmapDecoder; }

[
    helpstring("WIC PNG Encoder"),
    threading(both),
    uuid(27949969-876a-41d7-9447-568f6a35a4dc)
]
coclass WICPngEncoder { interface IWICBitmapEncoder; }

[
    helpstring("WIC BMP Encoder"),
    threading(apartment),
    uuid(69be8bb4-d66d-47c8-865a-ed1589433782)
]
coclass WICBmpEncoder { interface IWICBitmapEncoder; }

[
    helpstring("WIC GIF Decoder"),
    threading(both),
    uuid(381dda3c-9ce9-4834-a23e-1f98f8fc52be)
]
coclass WICGifDecoder { interface IWICBitmapDecoder; }

[
    helpstring("WIC ICO Decoder"),
    threading(both),
    uuid(c61bfcdf-2e0f-4aad-a8d7-e06bafebcdfe)
]
coclass WICIcoDecoder { interface IWICBitmapDecoder; }

[
    helpstring("WIC JPEG Decoder"),
    threading(both),
    uuid(9456a480-e88b-43ea-9e73-0b2d9b71b1ca)
]
coclass WICJpegDecoder { interface IWICBitmapDecoder; }

[
    helpstring("WIC JPEG Encoder"),
    threading(both),
    uuid(1a34f5c1-4a5a-46dc-b644-1f4567e7a676)
]
coclass WICJpegEncoder { interface IWICBitmapEncoder; }

[
    helpstring("WIC TIFF Decoder"),
    threading(both),
    uuid(b54e85d9-fe23-499f-8b88-6acea713752b)
]
coclass WICTiffDecoder { interface IWICBitmapDecoder; }

[
    helpstring("WIC TIFF Encoder"),
    threading(both),
    uuid(0131be10-2001-4c5f-a9b0-cc88fab64ce8)
]
coclass WICTiffEncoder { interface IWICBitmapEncoder; }

[
    helpstring("WIC ICNS Encoder"),
    threading(both),
    uuid(312fb6f1-b767-409d-8a6d-0fc154d4f05c)
]
coclass WICIcnsEncoder { interface IWICBitmapEncoder; }

[
    helpstring("WIC Default Format Converter"),
    threading(both),
    uuid(1a3f11dc-b514-4b17-8c5f-2154513852f1)
]
coclass WICDefaultFormatConverter { interface IWICFormatConverter; }

[
    helpstring("WIC TGA Decoder"),
    threading(both),
    uuid(b11fc79a-67cc-43e6-a9ce-e3d54945d304)
]
coclass WineTgaDecoder { interface IWICBitmapDecoder; }

[
    helpstring("WIC Unknown Metadata Reader"),
    threading(both),
    uuid(699745c2-5066-4b82-a8e3-d40478dbec8c)
]
coclass WICUnknownMetadataReader { interface IWICMetadataReader; }

[
    helpstring("WIC Ifd Metadata Reader"),
    threading(both),
    uuid(8f914656-9d0a-4eb2-9019-0bf96d8a9ee6)
]
coclass WICIfdMetadataReader { interface IWICIfdMetadataReader; }

[
    helpstring("WIC Png gAMA Metadata Reader"),
    threading(both),
    uuid(3692ca39-e082-4350-9e1f-3704cb083cd5)
]
coclass WICPngGamaMetadataReader { interface IWICMetadataReader; }

[
    helpstring("WIC Png tEXt Metadata Reader"),
    threading(both),
    uuid(4b59afcc-b8c3-408a-b670-89e5fab6fda7)
]
coclass WICPngTextMetadataReader { interface IWICMetadataReader; }

[
    helpstring("WIC LSD Metadata Reader"),
    threading(both),
    uuid(41070793-59e4-479a-a1f7-954adc2ef5fc)
]
coclass WICLSDMetadataReader { interface IWICMetadataReader; }

[
    helpstring("WIC IMD Metadata Reader"),
    threading(both),
    uuid(7447a267-0015-42c8-a8f1-fb3b94c68361)
]
coclass WICIMDMetadataReader { interface IWICMetadataReader; }

[
    helpstring("WIC GCE Metadata Reader"),
    threading(both),
    uuid(b92e345d-f52d-41f3-b562-081bc772e3b9)
]
coclass WICGCEMetadataReader { interface IWICMetadataReader; }

[
    helpstring("WIC Application Extension Reader"),
    threading(both),
    uuid(1767b93a-b021-44ea-920f-863c11f4f768)
]
coclass WICAPEMetadataReader { interface IWICMetadataReader; }

[
    helpstring("WIC Comment Extension Reader"),
    threading(both),
    uuid(32557d3b-69dc-4f95-836e-f5972b2f6159)
]
coclass WICGifCommentMetadataReader { interface IWICMetadataReader; }
