/*
 * COM Classes for amstream
 *
 * Copyright 2010 Alexandre Julliard
 *
 * 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
 */

[
    helpstring("SFilter Class"),
    threading(both),
    uuid(49c47ce0-9ba4-11d0-8212-00c04fc32c45)
]
coclass MediaStreamFilter { interface IMediaStreamFilter; }

[
    helpstring("Stream Class"),
    threading(both),
    uuid(49c47ce4-9ba4-11d0-8212-00c04fc32c45)
]
coclass AMDirectDrawStream { interface IAMMultiMediaStream; }

[
    helpstring("MMStream Class"),
    threading(both),
    uuid(49c47ce5-9ba4-11d0-8212-00c04fc32c45)
]
coclass AMMultiMediaStream { interface IAMMultiMediaStream; }

[
    helpstring("AuStream Class"),
    threading(both),
    uuid(f2468580-af8a-11d0-8212-00c04fc32c45)
]
coclass AMAudioData { interface IAudioData; }
