/*
 * Copyright 2018 Zebediah Figura
 *
 * 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
 */

import "mediaobj.idl";
import "strmif.idl";

cpp_quote("DEFINE_GUID(MEDIASUBTYPE_I420,0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_MSAUDIO1,0x00000160,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMAUDIO2,0x00000161,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMAUDIO3,0x00000162,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMAUDIO_LOSSLESS,0x00000163,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_V216,0x36313256,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_V410,0x30313456,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_Y41T,0x54313459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_Y42T,0x54323459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMV1,0x31564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMV2,0x32564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMV3,0x33564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMVA,0x41564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMVP,0x50564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WMVR,0x52564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WVC1,0x31435657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
cpp_quote("DEFINE_GUID(MEDIASUBTYPE_WVP2,0x32505657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")

[
    uuid(bbeea841-0a63-4f52-a7ab-a9b3a84ed38a)
]
coclass CMP3DecMediaObject {}

[
    uuid(f447b69e-1884-4a7e-8055-346f74d6edb3)
]
coclass CResamplerMediaObject {}

[
    uuid(62ce7e72-4c71-4d20-b15d-452831a87d9d)
]
coclass CMSH264DecoderMFT {}

[
    threading(both),
    uuid(6ca50344-051a-4ded-9779-a43305165e35)
]
coclass CMSH264EncoderMFT {}

[
    uuid(2d709e52-123f-49b5-9cbc-9af5cde28fb9)
]
coclass CMSMPEGDecoderMFT {}

[
    uuid(2eeb4adf-4578-4d10-bca7-bb955f56320a)
]
coclass CWMADecMediaObject {}

[
    uuid(70f598e9-f4ab-495a-99e2-a7c4d3d89abf)
]
coclass CWMAEncMediaObject {}

[
    uuid(93af0c51-2275-45d2-a35b-f2ba21caed00)
]
coclass AACMFTEncoder {}

[
    uuid(98230571-0087-4204-b020-3282538e57d3)
]
coclass CColorConvertDMO {}

[
    uuid(d23b90d0-144f-46bd-841d-59e4eb19dc59)
]
coclass CWMV9EncMediaObject {}

[
    uuid(82d353df-90bd-4382-8bc2-3f6192b76e34)
]
coclass CWMVDecMediaObject {}

[
    uuid(7e320092-596a-41b2-bbeb-175d10504eb6)
]
coclass CWMVXEncMediaObject {}

typedef float ChMtxType;

[
    local,
    object,
    uuid(e7e9984f-f09f-4da4-903f-6e2e0efe56b5),
]
interface IWMResamplerProps : IUnknown
{
    HRESULT SetHalfFilterLength(LONG length);
    HRESULT SetUserChannelMtx(ChMtxType *conversion_matrix);
}
