//
// Copyright (c) Microsoft Corporation. All rights reserved.

cpp_quote("/* Copyright (c) Microsoft Corporation. All rights reserved. */")

#ifndef __TAPI3DS_IDL__
#define __TAPI3DS_IDL__

import "oaidl.idl";
import "strmif.idl";

// this is exposed by the Media Streaming Terminal (MST) samples
[
    uuid( 0364EB00-4A77-11D1-A671-006097C9A2E8 ),
    helpstring("TAPI 3.0 ITAMMediaFormat interface"),
]
interface ITAMMediaFormat : IUnknown
{
    [propget, id(1), helpstring("property Media Format")]
    HRESULT MediaFormat(
            [out, retval] AM_MEDIA_TYPE **ppmt
            );

    [propput, id(1), helpstring("property Media Format")]
    HRESULT MediaFormat(
            [in] const AM_MEDIA_TYPE *pmt
            );
};  


// exposes the allocator properties of the Media Streaming Terminal (MST)
// to a user. A user only needs to use this interface when he needs to
// use his own buffers or needs to operate with a fixed set of samples
[
    uuid( C1BC3C90-BCFE-11D1-9745-00C04FD91AC0 ),
    helpstring("TAPI 3.0 ITAllocatorProperties interface"),
]
interface ITAllocatorProperties : IUnknown
{
    // this method may only be called before connection and will
    // force the MST to use these values during filter negotiation
    // if the connecting filter doesn't accept these, the connection
    // shall not be established
    [id(1), helpstring("method SetAllocatorProperties")]
    HRESULT SetAllocatorProperties(
        [in] ALLOCATOR_PROPERTIES *pAllocProperties
        );

    // gets current values for the allocator properties
    // after connection, this provides the negotiated values
    // it is invalid before connection. The MST will accept
    // any values suggested by the filters it connects to
    [id(2), helpstring("method GetAllocatorProperties")]
    HRESULT GetAllocatorProperties(
        [out] ALLOCATOR_PROPERTIES *pAllocProperties
        );

    // TRUE by default. when set to FALSE, the sample allocated
    // by the MST don't have any buffers and they must be supplied
    // before Update is called on the samples
    [id(3), helpstring("method SetAllocateBuffers")]
    HRESULT SetAllocateBuffers(
        [in] BOOL bAllocBuffers
        );

    // returns the current value of this boolean configuration parameter
    [id(4), helpstring("method GetAllocateBuffers")]
    HRESULT GetAllocateBuffers(
        [out] BOOL *pbAllocBuffers
        );

    // this size is used for allocating buffers when AllocateSample is
	// called. this is only valid when we have been told to allocate buffers
    [id(5), helpstring("method SetBufferSize")]
    HRESULT SetBufferSize(
        [in] DWORD	BufferSize
        );

    // returns the value used to allocate buffers when AllocateSample is
	// called. this is only valid when we have been told to allocate buffers
    [id(6), helpstring("method GetBufferSize")]
    HRESULT GetBufferSize(
        [out] DWORD	*pBufferSize
        );		
};

#endif

