Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

542 lines
22 KiB

//*****************************************************************************
//
// Microsoft Windows Media
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// FileName: wmspacket.idl
//
// Abstract:
//
//*****************************************************************************
cpp_quote("//*****************************************************************************")
cpp_quote("//")
cpp_quote("// Microsoft Windows Media")
cpp_quote("// Copyright (C) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("// Automatically generated by Midl from wmspacket.idl" )
cpp_quote("//")
cpp_quote("// DO NOT EDIT THIS FILE.")
cpp_quote("//")
cpp_quote("//*****************************************************************************")
cpp_quote("#if _MSC_VER > 1000")
cpp_quote("#pragma once")
cpp_quote("#endif // _MSC_VER > 1000")
import "objidl.idl";
import "WMSBuffer.idl";
import "WMSContext.idl";
cpp_quote( "EXTERN_GUID( IID_IWMSPacket, 0x3309C901,0x10A4,0x11d2,0x9E,0xEE,0x00,0x60,0x97,0xD2,0xD7,0xCF );" )
cpp_quote( "EXTERN_GUID( IID_IWMSPacketList, 0x3309C902,0x10A4,0x11d2,0x9E,0xEE,0x00,0x60,0x97,0xD2,0xD7,0xCF );" )
cpp_quote( "EXTERN_GUID( IID_IWMSPacketParser, 0x8b59f7e1, 0x5411, 0x11d2, 0x9e, 0xff, 0x0, 0x60, 0x97, 0xd2, 0xd7, 0xcf );" )
cpp_quote( "EXTERN_GUID( IID_IWMSPacketListCallback, 0x49c2a6f1, 0x64b8, 0x11d2, 0x9f, 0xe, 0x0, 0x60, 0x97, 0xd2, 0xd7, 0xcf );" )
cpp_quote( "EXTERN_GUID( IID_IWMSStreamSignalHandler, 0x7B10F261,0x26AA,0x11d2,0x9E,0xF2,0x00,0x60,0x97,0xD2,0xD7,0xCF );" )
// These are the defined packet attributes.
// WMSPACKETDESC structure is using the fact that first N fields have exact order.
// DO NOT MODIFY ORDER ON ENUM WITHOUT UPDATING WMSPACKETDESC
typedef [public] enum WMS_PACKET_ATTRIBUTES
{
WMS_PACKET_PACKET_NUM = 0,
WMS_PACKET_NUM_BUFFERS,
WMS_PACKET_LENGTH,
WMS_PACKET_SEND_TIME_HI,
WMS_PACKET_SEND_TIME,
WMS_PACKET_STREAM_NUM,
WMS_PACKET_FLAGS,
WMS_PACKET_NET_SEQUENCE_NUMBER,
WMS_PACKET_PRESENT_TIME_HI,
WMS_PACKET_PRESENT_TIME,
WMS_PACKET_RECV_TIME,
WMS_PACKET_NUM_NACKS,
WMS_PACKET_DURATION,
WMS_PACKET_ERASURES_DETECTED,
WMS_PACKET_SEND_TIME_ADJUSTMENT,
WMS_PACKET_PACKETIZED_HDRLEN,
[hidden] WMS_LAST_PACKET_ATTRIBUTE = WMS_PACKET_PACKETIZED_HDRLEN,
} WMS_PACKET_ATTRIBUTES;
// These are the packet flags.
typedef [public] enum WMS_PACKET_FLAG_TYPES
{
WMS_KEY_FRAME_PACKET = 0x0001, // used by server, intrinsic media packet property
WMS_RETRANSMITTED_PACKET = 0x0002, // used by network receiver and netsource
WMS_PACKET_REPORTED = 0x0004, // used by netsource
WMS_PACKET_PACKETIZED = 0x0008, // used by network sender
WMS_RECOVERED_PACKET = 0x0010, // used by fec protocol parser and netsource
WMS_FEC_PACKET = 0x0020, // used by networksender
WMS_FEC_ENCODED_PACKET = 0x0040, // used by network sender and makes sense only if it is a fecpacket
WMS_PACKET_BURST_FLAG = 0x0080, // used by network sender and control protocol packetizer
WMS_PACKET_FIRST_PAYLOAD_FLAG = 0x0100, // used by server, intrinsic media packet property
} WMS_PACKET_FLAG_TYPES;
// These are the defined packet list attributes.
typedef [public] enum WMS_PACKET_LIST_ATTRIBUTES
{
WMS_PACKET_LIST_FLAGS = 0,
WMS_STREAM_SIGNAL = 1,
WMS_PACKET_LIST_GENID = 2,
WMS_PACKET_LIST_SEND_TIME = 3,
WMS_PACKET_LIST_SEND_TIME_HI = 4,
WMS_PACKET_LIST_PLAYLIST_GEN_ID = 5,
[hidden] WMS_LAST_PACKET_LIST_ATTRIBUTE = WMS_PACKET_LIST_PLAYLIST_GEN_ID
} WMS_PACKET_LIST_ATTRIBUTES;
// These are the packet list flags.
typedef [public] enum WMS_PACKET_LIST_FLAG_TYPES
{
WMS_PACKET_LIST_NEEDS_FIXUP = 0x0001,
WMS_PACKET_LIST_UDP_RESEND = 0x0002,
WMS_PACKET_LIST_PRESTUFF = 0x0004,
WMS_PACKET_LIST_PLAYLIST_CHANGE_RECEDING = 0x0008,
} WMS_PACKET_LIST_FLAG_TYPES;
typedef [public] enum WMS_PACKET_LIST_EX_FLAGS
{
WMS_NO_ADDREF = 0x80000000,
WMS_PACKET_NO_ADDREF = 0x80000000,
WMS_PACKET_NO_RELEASE = 0x40000000,
WMS_PLIST_BUFFER_NO_ADDREF = 0x80000000,
WMS_PLIST_BUFFER_NO_RELEASE = 0x40000000,
WMS_PLIST_NO_ADDREF = 0x80000000,
} WMS_PACKET_LIST_EX_FLAGS;
typedef [public] enum WMS_PACKET_BUFFER_FLAGS
{
WMS_INSERT_BUFFER_AT_END = 0xFFFFFFFF
} WMS_PACKET_BUFFER_FLAGS;
typedef [public] enum WMS_PACKET_BUFFER_EX_FLAGS
{
WMS_BUFFER_NO_ADDREF = 0x80000000,
WMS_BUFFER_NO_RELEASE = 0x40000000,
WMS_BUFFER_NO_REFCOUNT = 0x20000000,
WMS_BUFFER_COMBINE = 0x10000000,
} WMS_PACKET_BUFFER_EX_FLAGS;
typedef [public] enum WMS_PACKET_STATUS_FLAGS
{
WMS_START_NEXT_READ = 0x0001,
WMS_WRITE_COMPLETED = 0x0002,
WMS_REQUEST_BUFFER = 0x0004,
WMS_HEADER_BUFFER = 0x0008,
} WMS_PACKET_STATUS_FLAGS;
typedef [public] enum WMS_PARSER_FLAG_TYPES
{
WMS_PARSER_PRESERVE_PADDING = 0x0001,
} WMS_PARSER_FLAG_TYPES;
typedef unsigned __int64 QWORD;
interface IWMSPacketParser;
interface IWMSPacketList;
interface IWMSPacketListCallback;
//////////////////////////////////////////////////////////////////////////////
//
// PACKETS
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
[
object,
pointer_default(unique),
uuid(3309C901-10A4-11d2-9EEE-006097D2D7CF),
version(9.0),
helpstring("Contains methods for managing the buffers, attributes, and headers associated with a packet.")
]
interface IWMSPacket : IUnknown
{
typedef struct
{
INSSBuffer * pBuffer;
DWORD dwBufferOffset;
DWORD dwBufferLen;
WORD wFlags;
} WMSBUFFERDESC;
// Every packet can be a scatter/gather list. Packets
// are variable size, but the raw IO reads fixed sized
// buffers. Note, the buffer pointer is not marshalled,
// so this won't work over dcom.
[helpstring("Retrieves an array of WMSBUFFERDESC structures. Each WMSBUFFERDESC structure contains the location and size of a specific buffer region that contains the packet's data.")] HRESULT
GetAllBuffers(
[in] DWORD dwMaxNumBuffers,
[out] WMSBUFFERDESC *pDesc,
[out] DWORD *pdwNumBuffers,
[in] DWORD dwExFlags
);
[helpstring("Retrieves the location of a specific buffer region that contains the packet's data.")] HRESULT
GetBuffer(
[in] DWORD dwBufferNum,
[out] INSSBuffer **ppBuffer,
[out] DWORD *pdwBufferOffset,
[out] DWORD *pdwBufferLen,
[out] WORD *pwFlags,
[in, defaultvalue(0)] DWORD dwExFlags
);
[helpstring("Adds a new region in a buffer to the collection of buffer regions associated with the packet.")] HRESULT
InsertBuffer(
[in] DWORD dwBufferNum, // -1 means at the end
[in] INSSBuffer *pBuffer,
[in] DWORD dwBufferOffset,
[in] DWORD dwBufferLen,
[in] WORD wFlags,
[in, defaultvalue(0)] DWORD dwExFlags
);
[helpstring("Removes the specified region in a buffer from the collection of buffer regions associated with the packet.")] HRESULT
RemoveBuffer( [in] DWORD dwBufferNum);
[helpstring("Removes all of the buffer regions associated with the packet.")] HRESULT
RemoveAllBuffers();
// Packet attributes. Different parts of the server may read
// and write these attributes.
[helpstring("Retrieves the value for a packet attribute defined by WMS_PACKET_ATTRIBUTES.")] HRESULT
GetAttribute( [in] DWORD dwValueName, [out] DWORD *pdwValue );
[helpstring("Specifies the value for a packet attribute defined by WMS_PACKET_ATTRIBUTES.")] HRESULT
SetAttribute( [in] DWORD dwValueName, [in] DWORD dwValue );
[helpstring("Retrieves the value for an extended packet attribute defined by a plug-in.")] HRESULT
GetExtendedAttribute(
[in] DWORD dwValueName,
[out] VARIANT *pVariantValue );
[helpstring("Retrieves the name and value for an extended packet attribute defined by a plug-in.")] HRESULT
GetExtendedAttributeByIndex(
[in] DWORD dwIndex,
[out] DWORD * pdwValueName,
[out] VARIANT *pVariantValue );
[helpstring("Specifies the name and value for an extended packet attribute defined by a plug-in.")] HRESULT
SetExtendedAttribute(
[in] DWORD dwValueName,
[in] VARIANT VariantValue );
[helpstring("Retrieves the number of extended packet attributes.")] HRESULT
GetExtendedAttributeCount(
[out] DWORD * pdwAttrs );
[helpstring("Copies the specified attributes to another packet.")] HRESULT
CopyAttributes(
[in] IWMSPacket * pDest,
[in, defaultvalue(NULL)] DWORD * pdwAttrNames,
[in, defaultvalue(0)] DWORD dwNumAttr,
[in, defaultvalue(FALSE)] BOOL fCopyExtAttr );
// Packet header manipulation. Appends header to first buffer in packet or creates new buffer and writes header to it
[helpstring("Appends header data to the first buffer region associated with the packet or to a new buffer.")] HRESULT
AppendHeader(
[in] IWMSBufferAllocator * pAlloc,
[in] DWORD dwHeaderLen,
[in] BYTE * pbHeader );
// Packet header manipulation. Copies data to specific location within packet header
[helpstring("Copies data to specific location within packet header.")] HRESULT
SetInHeader(
[in] DWORD cbOffset,
[in] BYTE * pbData,
[in] DWORD cbData );
};
//////////////////////////////////////////////////////////////////////////////
//
// PACKET LISTS
//
// Each packet lists contains data from exactly one buffer.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
[
object,
pointer_default(unique),
uuid(49C2A6F1-64B8-11d2-9F0E-006097D2D7CF),
version(9.0),
helpstring("Contains a method to respond to the IWMSPacketList::ReportStatus method call.")
]
interface IWMSPacketListCallback : IUnknown
{
[helpstring("Specifies the results of the the IWMSPacketList::ReportStatus method call.")] HRESULT
OnReportPacketListStatus( [in] IWMSPacketList *pBuffer,
[in] DWORD dwStatus );
};
//////////////////////////////////////////////////////////////////////////////
[
object,
pointer_default(unique),
uuid(3309C902-10A4-11d2-9EEE-006097D2D7CF),
version(9.0),
helpstring("Contains methods for managing the packets, attributes, and buffers associated with a packet list.")
]
interface IWMSPacketList : IWMSBufferAllocator
{
typedef struct
{
IWMSPacket * pPacket;
struct {
DWORD dwPacketNum; // WMS_PACKET_PACKET_NUM = 0,
DWORD dwPacketNumBuffers; //WMS_PACKET_NUM_BUFFERS,
DWORD dwPacketLength; //WMS_PACKET_LENGTH,
DWORD dwPacketSendTimeHi; //WMS_PACKET_SEND_TIME_HI,
DWORD dwPacketSendTime; //WMS_PACKET_SEND_TIME,
DWORD dwPacketStreamNum;//WMS_PACKET_STREAM_NUM,
DWORD dwPacketFlags; //WMS_PACKET_FLAGS,
DWORD dwPacketNetSequenceNum;//WMS_PACKET_NET_SEQUENCE_NUMBER,
} Attrs;
} WMSPACKETDESC;
[helpstring("Retrieves the number of packets in the packet list.")] HRESULT
GetPacketCount(
[out] DWORD *pdwNumPackets );
[helpstring("Retrieves a specific packet.")] HRESULT
GetPacket(
[in] DWORD dwPacketNum,
[out] IWMSPacket **ppPacket,
[in, defaultvalue(0)] DWORD dwExFlags );
[helpstring("Retrieves either an array of WMSPACKETDESC structures or an array of packets in the packet list.")] HRESULT
GetAllPackets(
[in] DWORD dwFirstPacket,
[in] DWORD dwMaxNumPackets,
[out] WMSPACKETDESC * pPacketDesc,
[out] IWMSPacket ** ppPacket,
[out] DWORD * pdwDescNum,
[in] DWORD dwExFlags );
[helpstring("Adds a packet to the packet list at the specified location.")] HRESULT
InsertPacket(
[in] DWORD dwPacketNum,
[in] IWMSPacket *pPacket,
[in, defaultvalue(0)] DWORD dwExFlags );
[helpstring("Adds a packet to the end of the packet list.")] HRESULT
AppendPacket(
[in] IWMSPacket *pPacket,
[in, defaultvalue(0)] DWORD dwExFlags );
[helpstring("Removes the specified packet from the packet list.")] HRESULT
RemovePacket(
[in] DWORD dwPacketNum );
[helpstring("Removes all of the packets from the packet list.")] HRESULT
RemoveAllPackets(
[in, defaultvalue(0)] DWORD dwExFlags );
// Packet list attributes. Different parts of the server may read
// and write these attributes.
[helpstring("Retrieves the value for a packet list attribute defined by WMS_PACKET_LIST_ATTRIBUTES.")] HRESULT
GetAttribute( [in] DWORD dwValueName, [in] DWORD *pdwValue );
[helpstring("Specifies the value for a packet list attribute defined by WMS_PACKET_LIST_ATTRIBUTES.")] HRESULT
SetAttribute( [in] DWORD dwValueName, [in] DWORD dwValue );
[helpstring("Retrieves the stream signal defined by WMS_STREAM_SIGNAL_TYPE.")] HRESULT
GetStreamSignalParam( [out] VARIANT *pParameter );
[helpstring("Specifies the stream signal defined by WMS_STREAM_SIGNAL_TYPE.")] HRESULT
SetStreamSignalParam( [in] VARIANT *pParameter );
[helpstring("Retrieves the packet parser object that created the packet list.")] HRESULT
GetPacketParser(
[out] IWMSPacketParser **ppSource,
[in, defaultvalue(0)] DWORD dwExFlags );
[helpstring("Specifies the packet parser object that created the packet list.")] HRESULT
SetPacketParser(
[in] IWMSPacketParser *pSource );
[helpstring("Retrieves the buffer associated with this packet list.")] HRESULT
GetBuffer(
[out] INSSBuffer **ppBuffer,
[in, defaultvalue(0)] DWORD dwExFlags );
[helpstring("Specifies the buffer associated with this packet list.")] HRESULT
SetBuffer(
[in] INSSBuffer *pBuffer );
[helpstring("Specifies the callback object that is used to respond to the ReportStatus method call.")] HRESULT
SetCompletionCallback( [in] IWMSPacketListCallback *pCallback );
[helpstring("Retrieves the callback object that is used to respond to the ReportStatus method call.")] HRESULT
GetCompletionCallback( [out] IWMSPacketListCallback **ppCallback );
[helpstring("Retrieves the value for an extended packet list attribute defined by a plug-in.")] HRESULT
GetExtendedAttribute(
[in] DWORD dwValueName,
[out] VARIANT *pVariantValue );
[helpstring("Retrieves the name and value for an extended packet attribute defined by a plug-in.")] HRESULT
GetExtendedAttributeByIndex(
[in] DWORD dwIndex,
[out] DWORD * pdwValueName,
[out] VARIANT *pVariantValue );
[helpstring("Specifies the value for an extended packet attribute defined by a plug-in.")] HRESULT
SetExtendedAttribute(
[in] DWORD dwValueName,
[in] VARIANT VariantValue );
[helpstring("Retrieves the number of extended attributes.")] HRESULT
GetExtendedAttributeCount(
[out] DWORD * pdwAttrs );
[helpstring("Requests the status for a packet list.")] HRESULT
ReportStatus( [in] DWORD dwStatus );
[helpstring("Creates a copy of the packet list.")] HRESULT
ClonePacketList( [out] IWMSPacketList **ppClonedPacketList );
[helpstring("Allocates a new packet.")] HRESULT
AllocPacket( [out] IWMSPacket **ppPacket );
};
//////////////////////////////////////////////////////////////////////////////
//
// PACKET PARSERS
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
[
object,
pointer_default(unique),
uuid(8B59F7E1-5411-11d2-9EFF-006097D2D7CF),
version(9.0),
helpstring("Provides methods to manipulate individual packets. This interface is implemented by a media parser plug-in.")
]
interface IWMSPacketParser : IUnknown
{
// Call this if you change packet attributes.
[helpstring("Updates the packet data to reflect the packets attribute values.")] HRESULT
UpdatePacket( [in] IWMSPacket *pPacket );
[helpstring("Adds an array of packets to a packet list.")] HRESULT
CombinePackets(
[in] DWORD dwNumInputPackets,
[in] IWMSPacket **pInputPacketArray,
[in] IWMSPacketList *pPacketList,
[in] DWORD dwFlags
);
}
//////////////////////////////////////////////////////////////////////////////
//
// STREAM EVENT INTERFACES
//
//////////////////////////////////////////////////////////////////////////////
// These specify types of stream signals
typedef [public] enum WMS_STREAM_SIGNAL_TYPE
{
WMS_NO_STREAM_CHANGE, // 0x0
// Param: None
// There are different errors passed in hr:
// 1. the source crashed
// 2. we hit the last packet, but the source is still
// running so it may be seeked back to the beginning.
WMS_STREAM_ERROR, // 0x1
// Param: None
// This happens when a stream error causes a fail-over in
// a playlist. This will be followed by a playlistchange.
WMS_STREAM_ERROR_HANDLED_BY_PLAYLIST, // 0x2
// Param: The header of the new stream
// This happens when a playlist changes its active entry.
WMS_PLAYLIST_CHANGED, // 0x3
// Param: see below for EOS type or none
WMS_END_OF_STREAM, // 0x4
// Param: The header of the queued stream
WMS_PLAYLIST_STREAM_QUEUED, // 0x5
// Param: The expected amount of dead air in milliseconds
WMS_BEGIN_NO_DATA_PERIOD, // 0x6
// Param: The name of the event as a BSTR
WMS_PLAYLIST_EVENT, // 0x7
// Param: The name of the event as a BSTR
WMS_PLAYLIST_CUE_EVENT, // 0x8
// Param: The name of the event as a BSTR
WMS_PLAYLIST_UNCUE_EVENT, // 0x9
// Param: The name of the element as a BSTR
WMS_PLAYLIST_BEGIN_ELEMENT_EVENT, // 0xA
// Param: The name of the element as a BSTR
WMS_PLAYLIST_END_ELEMENT_EVENT, // 0xB
// Param: None
WMS_STREAM_SWITCH_DONE, // 0xC
// Param: None
WMS_RESET_TO_REAL_TIME, // 0xD
// Param : QWORD, first DWORD contains the number of packets lost
// while second DWORD contains the total packets recieved so far
WMS_DATA_LOSS_DETECTED, // 0xE
WMS_REUSE_ACCEL_PARAMS // 0xf
} WMS_STREAM_SIGNAL_TYPE;
// These are the EOS types.
typedef [public] enum WMS_STREAM_SIGNAL_EOS_TYPE
{
WMS_STREAM_SIGNAL_EOS_RESERVED = 1, // internal type don't use
WMS_STREAM_SIGNAL_EOS_RECEDING = 2,
}WMS_STREAM_SIGNAL_EOS_TYPE;
//////////////////////////////////////////////////////////////////////////////
[
object,
pointer_default(unique),
uuid(7B10F261-26AA-11d2-9EF2-006097D2D7CF),
version(9.0),
helpstring("Contains a method to provide notification of stream signals defined by WMS_STREAM_SIGNAL_TYPE.")
]
interface IWMSStreamSignalHandler : IUnknown
{
//
// The input parameter dwSignalType should have one of the enumerated values
// in WMS_STREAM_SIGNAL_TYPE.
//
[helpstring("Provides notification of a stream signal defined by WMS_STREAM_SIGNAL_TYPE.")] HRESULT
OnStreamSignal(
[in] DWORD dwSignalType, // WMS_STREAM_SIGNAL_TYPE
[in] VARIANT *pSignalParameter,
[in] IWMSContext *pPresentation
);
};