//------------------------------------------------------------------------------
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// The use and distribution terms for this software are covered by the
// Microsoft Limited Public License (Ms-LPL)
// http://www.microsoft.com/resources/sharedsource/licensingbasics/limitedpubliclicense.mspx
// which can be found in the file MS-LPL.txt at the root of this distribution.
// By using this software in any fashion, you are agreeing to be bound by
// the terms of this license.
//
// You must not remove this notice, or any other, from this software.
//
//
//
// DShow MPEG-2 Demux filter for Windows CE
//
//------------------------------------------------------------------------------
//
//
//------------------------------------------------------------------------------
// File: DShowFix.idl
//
// Desc: Define latest DShow interfaces that don't exist on CE 5.0
//
//------------------------------------------------------------------------------
import "unknwn.idl";
import "objidl.idl"; // for IPersist (IFilter's root)
import "strmif.idl";
// some GUIDS that aren't part of the standard CE 5.0 dshow headers
cpp_quote ("// {afb6c280-2c41-11d3-8a60-0000f81e0e4a}")
cpp_quote ("DEFINE_GUID(CLSID_MPEG2Demultiplexer,")
cpp_quote ("0xafb6c280, 0x2c41, 0x11d3, 0x8a, 0x60, 0x00, 0x00, 0xf8, 0x1e, 0x0e, 0x4a);")
cpp_quote ("// 138AA9A4-1EE2-4c5b-988E-19ABFDBC8A11")
cpp_quote ("DEFINE_GUID(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE,")
cpp_quote ("0x138aa9a4, 0x1ee2, 0x4c5b, 0x98, 0x8e, 0x19, 0xab, 0xfd, 0xbc, 0x8a, 0x11);")
cpp_quote ("// {3ae86b20-7be8-11d1-abe6-00a0c905f375}")
cpp_quote ("DEFINE_GUID(CLSID_MMSPLITTER,")
cpp_quote ("0x3ae86b20, 0x7be8, 0x11d1, 0xab, 0xe6, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75);")
// forward declarations - these are the interfaces declared in this file
interface IAMPushSource;
interface IAMLatency;
interface IMpeg2Demultiplexer ;
interface IMPEG2StreamIdMap ;
interface IEnumStreamIdMap ;
//---------------------------------------------------------------------
//
// IAMPushSource interface
//
// Provides a means for source filters to describe information about the
// data that they source, such as whether the data is live or not, and
// what type of clock was used for timestamps. This information may be
// needed by other clocks in the graph in order to provide accurate
// synchronization. Also provides a way to specify an offset value for
// the filter to use when timestamping the streams it sources. Provides
// support for the IAMLatency interface as well.
//
//---------------------------------------------------------------------
enum _AM_PUSHSOURCE_FLAGS {
//
// The default assumption is that the data is from a live source,
// time stamped with the graph clock, and the source does not
// attempt to rate match the data it delivers.
// The following flags can be used to override this assumption.
//
// capability flags
AM_PUSHSOURCECAPS_INTERNAL_RM = 0x00000001, // source provides internal support for rate matching
AM_PUSHSOURCECAPS_NOT_LIVE = 0x00000002, // don't treat source data as live
AM_PUSHSOURCECAPS_PRIVATE_CLOCK = 0x00000004, // source data timestamped with clock not
// exposed to the graph
// request flags, set by user via SetPushSourceFlags method
AM_PUSHSOURCEREQS_USE_STREAM_CLOCK = 0x00010000, // source was requested to timestamp
// using a clock that isn't the graph clock
AM_PUSHSOURCEREQS_USE_CLOCK_CHAIN = 0x00020000, // source requests reference clock chaining
};
//
// Used to set a source filter to run in a "live" mode.
//
[
object,
uuid(F185FE76-E64E-11d2-B76E-00C04FB6BD3D),
pointer_default(unique)
]
interface IAMPushSource : IAMLatency
{
// used to discover push source's capabilities.
// may be any combination of the AM_PUSHSOURCE_FLAGS flags.
HRESULT GetPushSourceFlags (
[out] ULONG *pFlags
);
// used to set request flags for a push source.
// may be a combination of the AM_PUSHSOURCE_REQS_xxx flags.
HRESULT SetPushSourceFlags (
[in] ULONG Flags
);
// specify an offset for push source time stamps
HRESULT SetStreamOffset (
[in] REFERENCE_TIME rtOffset
);
// retrieve the offset this push source is using
HRESULT GetStreamOffset (
[out] REFERENCE_TIME *prtOffset
);
// retrieve the maximum stream offset this push source thinks it can support
HRESULT GetMaxStreamOffset (
[out] REFERENCE_TIME *prtMaxOffset
);
// allows the filter graph to tell a push source the maximum latency allowed on the graph
// this allows pins like the video capture preview pin to be more efficient with the amount
// of buffering required to support the maximum graph latency
HRESULT SetMaxStreamOffset (
[in] REFERENCE_TIME rtMaxOffset
);
};
//---------------------------------------------------------------------
//
// IAMLatency interface
//
// Allows a filter to report the expected latency associated with a data
// stream flowing from its input to output pin. Supported on output pins.
//
//---------------------------------------------------------------------
[
object,
uuid(62EA93BA-EC62-11d2-B770-00C04FB6BD3D),
pointer_default(unique)
]
interface IAMLatency : IUnknown
{
HRESULT GetLatency(
[in] REFERENCE_TIME *prtLatency
);
}
enum _AM_INTF_SEARCH_FLAGS {
AM_INTF_SEARCH_INPUT_PIN = 0x00000001, // search input pins
AM_INTF_SEARCH_OUTPUT_PIN = 0x00000002, // search output pins
AM_INTF_SEARCH_FILTER = 0x00000004 // search filters
};
/*++
IMpeg2Demultiplexer
This interface is implemented by the MPEG-2 Demultiplexer filter,
irrespective of program vs. transport stream splitting functionality.
--*/
[
object,
local,
uuid (436eee9c-264f-4242-90e1-4e330c107512),
pointer_default(unique)
]
interface IMpeg2Demultiplexer : IUnknown
{
/*++
------------------------------------------------------------------------
purpose: Creates an output pin of the specified media type.
pMediaType media type specifier for the new pin
pszPinName pin name; cannot be a duplicate of an existing pin
ppIPin IPin interface pointer to the newly created pin
--*/
HRESULT
CreateOutputPin (
[in] AM_MEDIA_TYPE * pMediaType,
[in] LPWSTR pszPinName,
[out] IPin ** ppIPin
) ;
/*++
------------------------------------------------------------------------
purpose: Updates the media type of the specified output pin. If no
connection exists, the media type is updated always. If
the pin is connected, the success/failure of the call will
depend on downstream input pin's accetance/rejection of
the specified media type, and subsequent success/failure
of a reconnect.
pszPinName pin name
pMediaType new media type specifier
--*/
HRESULT
SetOutputPinMediaType (
[in] LPWSTR pszPinName,
[in] AM_MEDIA_TYPE * pMediaType
) ;
/*++
------------------------------------------------------------------------
purpose: Deletes the specified output pin.
pszPinName pin name
--*/
HRESULT
DeleteOutputPin (
[in] LPWSTR pszPinName
) ;
} ;
//---------------------------------------------------------------------
// IEnumStreamIdMap interface
//---------------------------------------------------------------------
cpp_quote("#define MPEG2_PROGRAM_STREAM_MAP 0x00000000")
cpp_quote("#define MPEG2_PROGRAM_ELEMENTARY_STREAM 0x00000001")
cpp_quote("#define MPEG2_PROGRAM_DIRECTORY_PES_PACKET 0x00000002")
cpp_quote("#define MPEG2_PROGRAM_PACK_HEADER 0x00000003")
cpp_quote("#define MPEG2_PROGRAM_PES_STREAM 0x00000004")
cpp_quote("#define MPEG2_PROGRAM_SYSTEM_HEADER 0x00000005")
cpp_quote("#define SUBSTREAM_FILTER_VAL_NONE 0x10000000")
typedef struct {
ULONG stream_id ; // mpeg-2 stream_id
DWORD dwMediaSampleContent ; // #define'd above
ULONG ulSubstreamFilterValue ; // filtering value
int iDataOffset ; // offset to elementary stream
} STREAM_ID_MAP ;
/*++
Enumerates the StreamIds mapped on a pin
--*/
[
object,
local,
uuid (945C1566-6202-46fc-96C7-D87F289C6534),
pointer_default(unique)
]
interface IEnumStreamIdMap : IUnknown
{
HRESULT
Next (
[in] ULONG cRequest,
[in, out, size_is (cRequest)] STREAM_ID_MAP * pStreamIdMap,
[out] ULONG * pcReceived
) ;
HRESULT
Skip (
[in] ULONG cRecords
) ;
HRESULT
Reset (
) ;
HRESULT
Clone (
[out] IEnumStreamIdMap ** ppIEnumStreamIdMap
) ;
} ;
/*++
Implemented on the output pin.
Provides the ability to map/unmap a stream_id to/from an output pin.
--*/
[
object,
local,
uuid (D0E04C47-25B8-4369-925A-362A01D95444),
pointer_default(unique)
]
interface IMPEG2StreamIdMap : IUnknown
{
HRESULT
MapStreamId (
[in] ULONG ulStreamId, // mpeg-2 stream_id
[in] DWORD MediaSampleContent, // #define'd above IEnumStreamIdMap
[in] ULONG ulSubstreamFilterValue, // filter value
[in] int iDataOffset // elementary stream offset
) ;
HRESULT
UnmapStreamId (
[in] ULONG culStreamId, // number of stream_id's in pulStreamId
[in] ULONG * pulStreamId // array of stream_id's to unmap
) ;
HRESULT
EnumStreamIdMap (
[out] IEnumStreamIdMap ** ppIEnumStreamIdMap
) ;
} ;