/*** Autogenerated by WIDL 10.8 from include/mpeg2data.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __mpeg2data_h__
#define __mpeg2data_h__

/* Forward declarations */

#ifndef __IMpeg2TableFilter_FWD_DEFINED__
#define __IMpeg2TableFilter_FWD_DEFINED__
typedef interface IMpeg2TableFilter IMpeg2TableFilter;
#ifdef __cplusplus
interface IMpeg2TableFilter;
#endif /* __cplusplus */
#endif

#ifndef __Mpeg2TableFilter_FWD_DEFINED__
#define __Mpeg2TableFilter_FWD_DEFINED__
#ifdef __cplusplus
typedef class Mpeg2TableFilter Mpeg2TableFilter;
#else
typedef struct Mpeg2TableFilter Mpeg2TableFilter;
#endif /* defined __cplusplus */
#endif /* defined __Mpeg2TableFilter_FWD_DEFINED__ */

#ifndef __IMpeg2Data_FWD_DEFINED__
#define __IMpeg2Data_FWD_DEFINED__
typedef interface IMpeg2Data IMpeg2Data;
#ifdef __cplusplus
interface IMpeg2Data;
#endif /* __cplusplus */
#endif

#ifndef __ISectionList_FWD_DEFINED__
#define __ISectionList_FWD_DEFINED__
typedef interface ISectionList ISectionList;
#ifdef __cplusplus
interface ISectionList;
#endif /* __cplusplus */
#endif

#ifndef __IMpeg2Stream_FWD_DEFINED__
#define __IMpeg2Stream_FWD_DEFINED__
typedef interface IMpeg2Stream IMpeg2Stream;
#ifdef __cplusplus
interface IMpeg2Stream;
#endif /* __cplusplus */
#endif

#ifndef __SectionList_FWD_DEFINED__
#define __SectionList_FWD_DEFINED__
#ifdef __cplusplus
typedef class SectionList SectionList;
#else
typedef struct SectionList SectionList;
#endif /* defined __cplusplus */
#endif /* defined __SectionList_FWD_DEFINED__ */

#ifndef __Mpeg2Stream_FWD_DEFINED__
#define __Mpeg2Stream_FWD_DEFINED__
#ifdef __cplusplus
typedef class Mpeg2Stream Mpeg2Stream;
#else
typedef struct Mpeg2Stream Mpeg2Stream;
#endif /* defined __cplusplus */
#endif /* defined __Mpeg2Stream_FWD_DEFINED__ */

#ifndef __Mpeg2Data_FWD_DEFINED__
#define __Mpeg2Data_FWD_DEFINED__
#ifdef __cplusplus
typedef class Mpeg2Data Mpeg2Data;
#else
typedef struct Mpeg2Data Mpeg2Data;
#endif /* defined __cplusplus */
#endif /* defined __Mpeg2Data_FWD_DEFINED__ */

/* Headers for imported files */

#include <oaidl.h>
#include <ocidl.h>
#include <bdaiface.h>
#include <mpeg2structs.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __ISectionList_FWD_DEFINED__
#define __ISectionList_FWD_DEFINED__
typedef interface ISectionList ISectionList;
#ifdef __cplusplus
interface ISectionList;
#endif /* __cplusplus */
#endif

#ifndef __IMpeg2Stream_FWD_DEFINED__
#define __IMpeg2Stream_FWD_DEFINED__
typedef interface IMpeg2Stream IMpeg2Stream;
#ifdef __cplusplus
interface IMpeg2Stream;
#endif /* __cplusplus */
#endif

#define MPEG_PAT_PID 0x0000
#define MPEG_PAT_TID 0x00
#define MPEG_CAT_PID 0x0001
#define MPEG_CAT_TID 0x01
#define MPEG_PMT_TID 0x02
#define MPEG_TSDT_PID 0x0002
#define MPEG_TSDT_TID 0x03
#define ATSC_MGT_PID 0x1ffb
#define ATSC_MGT_TID 0xc7
#define ATSC_VCT_PID 0x1ffb
#define ATSC_VCT_TERR_TID 0xc8
#define ATSC_VCT_CABL_TID 0xc9
#define ATSC_EIT_TID 0xcb
#define ATSC_ETT_TID 0xcc
#define ATSC_RRT_TID 0xca
#define ATSC_RRT_PID 0x1ffb
#define ATSC_STT_PID 0x1ffb
#define ATSC_STT_TID 0xcd
#define ATSC_PIT_TID 0xd0
#define DVB_NIT_PID 0x0010
#define DVB_NIT_ACTUAL_TID 0x40
#define DVB_NIT_OTHER_TID 0x41
#define DVB_SDT_PID 0x0011
#define DVB_SDT_ACTUAL_TID 0x42
#define DVB_SDT_OTHER_TID 0x46
#define DVB_BAT_PID 0x0011
#define DVB_BAT_TID 0x4a
#define DVB_EIT_PID 0x0012
#define DVB_EIT_ACTUAL_TID 0x4e
#define DVB_EIT_OTHER_TID 0x4f
#define DVB_RST_PID 0x0013
#define DVB_RST_TID 0x71
#define DVB_TDT_PID 0x0014
#define DVB_TDT_TID 0x70
#define DVB_ST_PID_16 0x0010
#define DVB_ST_PID_17 0x0011
#define DVB_ST_PID_18 0x0012
#define DVB_ST_PID_19 0x0013
#define DVB_ST_PID_20 0x0014
#define DVB_ST_TID 0x72
#define ISDB_ST_TID 0x72
#define DVB_TOT_PID 0x0014
#define DVB_TOT_TID 0x73
#define DVB_DIT_PID 0x001e
#define DVB_DIT_TID 0x7e
#define DVB_SIT_PID 0x001f
#define DVB_SIT_TID 0x7f
#define ISDB_EMM_TID 0x85
#define ISDB_BIT_PID 0x0024
#define ISDB_BIT_TID 0xc4
#define ISDB_NBIT_PID 0x0025
#define ISDB_NBIT_MSG_TID 0xc5
#define ISDB_NBIT_REF_TID 0xc6
#define ISDB_LDT_PID 0x0025
#define ISDB_LDT_TID 0xc7
#define ISDB_SDTT_PID 0x0023
#define ISDB_SDTT_ALT_PID 0x0028
#define ISDB_SDTT_TID 0xc3
#define ISDB_CDT_PID 0x0029
#define ISDB_CDT_TID 0xc8
#define SCTE_EAS_TID 0xd8
#define SCTE_EAS_IB_PID 0x1ffb
#define SCTE_EAS_OOB_PID 0x1ffc
/*****************************************************************************
 * IMpeg2TableFilter interface
 */
#ifndef __IMpeg2TableFilter_INTERFACE_DEFINED__
#define __IMpeg2TableFilter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMpeg2TableFilter, 0xbdcdd913, 0x9ecd, 0x4fb2, 0x81,0xae, 0xad,0xf7,0x47,0xea,0x75,0xa5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bdcdd913-9ecd-4fb2-81ae-adf747ea75a5")
IMpeg2TableFilter : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AddPID(
        PID p) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddTable(
        PID p,
        TID t) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddExtension(
        PID p,
        TID t,
        TEID e) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemovePID(
        PID p) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveTable(
        PID p,
        TID t) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveExtension(
        PID p,
        TID t,
        TEID e) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMpeg2TableFilter, 0xbdcdd913, 0x9ecd, 0x4fb2, 0x81,0xae, 0xad,0xf7,0x47,0xea,0x75,0xa5)
#endif
#else
typedef struct IMpeg2TableFilterVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMpeg2TableFilter *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMpeg2TableFilter *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMpeg2TableFilter *This);

    /*** IMpeg2TableFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *AddPID)(
        IMpeg2TableFilter *This,
        PID p);

    HRESULT (STDMETHODCALLTYPE *AddTable)(
        IMpeg2TableFilter *This,
        PID p,
        TID t);

    HRESULT (STDMETHODCALLTYPE *AddExtension)(
        IMpeg2TableFilter *This,
        PID p,
        TID t,
        TEID e);

    HRESULT (STDMETHODCALLTYPE *RemovePID)(
        IMpeg2TableFilter *This,
        PID p);

    HRESULT (STDMETHODCALLTYPE *RemoveTable)(
        IMpeg2TableFilter *This,
        PID p,
        TID t);

    HRESULT (STDMETHODCALLTYPE *RemoveExtension)(
        IMpeg2TableFilter *This,
        PID p,
        TID t,
        TEID e);

    END_INTERFACE
} IMpeg2TableFilterVtbl;

interface IMpeg2TableFilter {
    CONST_VTBL IMpeg2TableFilterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMpeg2TableFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMpeg2TableFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMpeg2TableFilter_Release(This) (This)->lpVtbl->Release(This)
/*** IMpeg2TableFilter methods ***/
#define IMpeg2TableFilter_AddPID(This,p) (This)->lpVtbl->AddPID(This,p)
#define IMpeg2TableFilter_AddTable(This,p,t) (This)->lpVtbl->AddTable(This,p,t)
#define IMpeg2TableFilter_AddExtension(This,p,t,e) (This)->lpVtbl->AddExtension(This,p,t,e)
#define IMpeg2TableFilter_RemovePID(This,p) (This)->lpVtbl->RemovePID(This,p)
#define IMpeg2TableFilter_RemoveTable(This,p,t) (This)->lpVtbl->RemoveTable(This,p,t)
#define IMpeg2TableFilter_RemoveExtension(This,p,t,e) (This)->lpVtbl->RemoveExtension(This,p,t,e)
#else
/*** IUnknown methods ***/
static inline HRESULT IMpeg2TableFilter_QueryInterface(IMpeg2TableFilter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMpeg2TableFilter_AddRef(IMpeg2TableFilter* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMpeg2TableFilter_Release(IMpeg2TableFilter* This) {
    return This->lpVtbl->Release(This);
}
/*** IMpeg2TableFilter methods ***/
static inline HRESULT IMpeg2TableFilter_AddPID(IMpeg2TableFilter* This,PID p) {
    return This->lpVtbl->AddPID(This,p);
}
static inline HRESULT IMpeg2TableFilter_AddTable(IMpeg2TableFilter* This,PID p,TID t) {
    return This->lpVtbl->AddTable(This,p,t);
}
static inline HRESULT IMpeg2TableFilter_AddExtension(IMpeg2TableFilter* This,PID p,TID t,TEID e) {
    return This->lpVtbl->AddExtension(This,p,t,e);
}
static inline HRESULT IMpeg2TableFilter_RemovePID(IMpeg2TableFilter* This,PID p) {
    return This->lpVtbl->RemovePID(This,p);
}
static inline HRESULT IMpeg2TableFilter_RemoveTable(IMpeg2TableFilter* This,PID p,TID t) {
    return This->lpVtbl->RemoveTable(This,p,t);
}
static inline HRESULT IMpeg2TableFilter_RemoveExtension(IMpeg2TableFilter* This,PID p,TID t,TEID e) {
    return This->lpVtbl->RemoveExtension(This,p,t,e);
}
#endif
#endif

#endif


#endif  /* __IMpeg2TableFilter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Mpeg2TableFilter coclass
 */

DEFINE_GUID(CLSID_Mpeg2TableFilter, 0x752845f1, 0x758f, 0x4c83, 0xa0,0x43, 0x42,0x70,0xc5,0x93,0x30,0x8e);

#ifdef __cplusplus
class DECLSPEC_UUID("752845f1-758f-4c83-a043-4270c593308e") Mpeg2TableFilter;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Mpeg2TableFilter, 0x752845f1, 0x758f, 0x4c83, 0xa0,0x43, 0x42,0x70,0xc5,0x93,0x30,0x8e)
#endif
#endif

typedef struct Mpeg2TableSampleHdr {
    BYTE SectionCount;
    BYTE Reserved[3];
    LONG SectionOffsets[1];
} Mpeg2TableSampleHdr;
#ifndef __Mpeg2DataLib_LIBRARY_DEFINED__
#define __Mpeg2DataLib_LIBRARY_DEFINED__

DEFINE_GUID(LIBID_Mpeg2DataLib, 0xdbaf6c1b, 0xb6a4, 0x4898, 0xae,0x65, 0x20,0x4f,0x0d,0x95,0x09,0xa1);

/*****************************************************************************
 * IMpeg2Data interface
 */
#ifndef __IMpeg2Data_INTERFACE_DEFINED__
#define __IMpeg2Data_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMpeg2Data, 0x9b396d40, 0xf380, 0x4e3c, 0xa5,0x14, 0x1a,0x82,0xbf,0x6e,0xbf,0xe6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9b396d40-f380-4e3c-a514-1a82bf6ebfe6")
IMpeg2Data : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetSection(
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        DWORD timeout,
        ISectionList **section_list) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTable(
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        DWORD timeout,
        ISectionList **section_list) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamOfSections(
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        HANDLE data_ready_event,
        IMpeg2Stream **mpeg_stream) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMpeg2Data, 0x9b396d40, 0xf380, 0x4e3c, 0xa5,0x14, 0x1a,0x82,0xbf,0x6e,0xbf,0xe6)
#endif
#else
typedef struct IMpeg2DataVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMpeg2Data *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMpeg2Data *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMpeg2Data *This);

    /*** IMpeg2Data methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSection)(
        IMpeg2Data *This,
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        DWORD timeout,
        ISectionList **section_list);

    HRESULT (STDMETHODCALLTYPE *GetTable)(
        IMpeg2Data *This,
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        DWORD timeout,
        ISectionList **section_list);

    HRESULT (STDMETHODCALLTYPE *GetStreamOfSections)(
        IMpeg2Data *This,
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        HANDLE data_ready_event,
        IMpeg2Stream **mpeg_stream);

    END_INTERFACE
} IMpeg2DataVtbl;

interface IMpeg2Data {
    CONST_VTBL IMpeg2DataVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMpeg2Data_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMpeg2Data_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMpeg2Data_Release(This) (This)->lpVtbl->Release(This)
/*** IMpeg2Data methods ***/
#define IMpeg2Data_GetSection(This,pid,tid,filter,timeout,section_list) (This)->lpVtbl->GetSection(This,pid,tid,filter,timeout,section_list)
#define IMpeg2Data_GetTable(This,pid,tid,filter,timeout,section_list) (This)->lpVtbl->GetTable(This,pid,tid,filter,timeout,section_list)
#define IMpeg2Data_GetStreamOfSections(This,pid,tid,filter,data_ready_event,mpeg_stream) (This)->lpVtbl->GetStreamOfSections(This,pid,tid,filter,data_ready_event,mpeg_stream)
#else
/*** IUnknown methods ***/
static inline HRESULT IMpeg2Data_QueryInterface(IMpeg2Data* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMpeg2Data_AddRef(IMpeg2Data* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMpeg2Data_Release(IMpeg2Data* This) {
    return This->lpVtbl->Release(This);
}
/*** IMpeg2Data methods ***/
static inline HRESULT IMpeg2Data_GetSection(IMpeg2Data* This,PID pid,TID tid,PMPEG2_FILTER filter,DWORD timeout,ISectionList **section_list) {
    return This->lpVtbl->GetSection(This,pid,tid,filter,timeout,section_list);
}
static inline HRESULT IMpeg2Data_GetTable(IMpeg2Data* This,PID pid,TID tid,PMPEG2_FILTER filter,DWORD timeout,ISectionList **section_list) {
    return This->lpVtbl->GetTable(This,pid,tid,filter,timeout,section_list);
}
static inline HRESULT IMpeg2Data_GetStreamOfSections(IMpeg2Data* This,PID pid,TID tid,PMPEG2_FILTER filter,HANDLE data_ready_event,IMpeg2Stream **mpeg_stream) {
    return This->lpVtbl->GetStreamOfSections(This,pid,tid,filter,data_ready_event,mpeg_stream);
}
#endif
#endif

#endif


#endif  /* __IMpeg2Data_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISectionList interface
 */
#ifndef __ISectionList_INTERFACE_DEFINED__
#define __ISectionList_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISectionList, 0xafec1eb5, 0x2a64, 0x46c6, 0xbf,0x4b, 0xae,0x3c,0xcb,0x6a,0xfd,0xb0);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("afec1eb5-2a64-46c6-bf4b-ae3ccb6afdb0")
ISectionList : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Initialize(
        MPEG_REQUEST_TYPE request_type,
        IMpeg2Data *mpeg2_data,
        PMPEG_CONTEXT context,
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        DWORD timeout,
        HANDLE done_event) = 0;

    virtual HRESULT STDMETHODCALLTYPE InitializeWithRawSections(
        PMPEG_PACKET_LIST mpl_sections) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelPendingRequest(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNumberOfSections(
        WORD *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSectionData(
        WORD section_number,
        DWORD *raw_packet_length,
        PSECTION *section) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProgramIdentifier(
        PID *pid) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTableIdentifier(
        TID *tid) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISectionList, 0xafec1eb5, 0x2a64, 0x46c6, 0xbf,0x4b, 0xae,0x3c,0xcb,0x6a,0xfd,0xb0)
#endif
#else
typedef struct ISectionListVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ISectionList *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ISectionList *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ISectionList *This);

    /*** ISectionList methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        ISectionList *This,
        MPEG_REQUEST_TYPE request_type,
        IMpeg2Data *mpeg2_data,
        PMPEG_CONTEXT context,
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        DWORD timeout,
        HANDLE done_event);

    HRESULT (STDMETHODCALLTYPE *InitializeWithRawSections)(
        ISectionList *This,
        PMPEG_PACKET_LIST mpl_sections);

    HRESULT (STDMETHODCALLTYPE *CancelPendingRequest)(
        ISectionList *This);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfSections)(
        ISectionList *This,
        WORD *count);

    HRESULT (STDMETHODCALLTYPE *GetSectionData)(
        ISectionList *This,
        WORD section_number,
        DWORD *raw_packet_length,
        PSECTION *section);

    HRESULT (STDMETHODCALLTYPE *GetProgramIdentifier)(
        ISectionList *This,
        PID *pid);

    HRESULT (STDMETHODCALLTYPE *GetTableIdentifier)(
        ISectionList *This,
        TID *tid);

    END_INTERFACE
} ISectionListVtbl;

interface ISectionList {
    CONST_VTBL ISectionListVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISectionList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISectionList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISectionList_Release(This) (This)->lpVtbl->Release(This)
/*** ISectionList methods ***/
#define ISectionList_Initialize(This,request_type,mpeg2_data,context,pid,tid,filter,timeout,done_event) (This)->lpVtbl->Initialize(This,request_type,mpeg2_data,context,pid,tid,filter,timeout,done_event)
#define ISectionList_InitializeWithRawSections(This,mpl_sections) (This)->lpVtbl->InitializeWithRawSections(This,mpl_sections)
#define ISectionList_CancelPendingRequest(This) (This)->lpVtbl->CancelPendingRequest(This)
#define ISectionList_GetNumberOfSections(This,count) (This)->lpVtbl->GetNumberOfSections(This,count)
#define ISectionList_GetSectionData(This,section_number,raw_packet_length,section) (This)->lpVtbl->GetSectionData(This,section_number,raw_packet_length,section)
#define ISectionList_GetProgramIdentifier(This,pid) (This)->lpVtbl->GetProgramIdentifier(This,pid)
#define ISectionList_GetTableIdentifier(This,tid) (This)->lpVtbl->GetTableIdentifier(This,tid)
#else
/*** IUnknown methods ***/
static inline HRESULT ISectionList_QueryInterface(ISectionList* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISectionList_AddRef(ISectionList* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISectionList_Release(ISectionList* This) {
    return This->lpVtbl->Release(This);
}
/*** ISectionList methods ***/
static inline HRESULT ISectionList_Initialize(ISectionList* This,MPEG_REQUEST_TYPE request_type,IMpeg2Data *mpeg2_data,PMPEG_CONTEXT context,PID pid,TID tid,PMPEG2_FILTER filter,DWORD timeout,HANDLE done_event) {
    return This->lpVtbl->Initialize(This,request_type,mpeg2_data,context,pid,tid,filter,timeout,done_event);
}
static inline HRESULT ISectionList_InitializeWithRawSections(ISectionList* This,PMPEG_PACKET_LIST mpl_sections) {
    return This->lpVtbl->InitializeWithRawSections(This,mpl_sections);
}
static inline HRESULT ISectionList_CancelPendingRequest(ISectionList* This) {
    return This->lpVtbl->CancelPendingRequest(This);
}
static inline HRESULT ISectionList_GetNumberOfSections(ISectionList* This,WORD *count) {
    return This->lpVtbl->GetNumberOfSections(This,count);
}
static inline HRESULT ISectionList_GetSectionData(ISectionList* This,WORD section_number,DWORD *raw_packet_length,PSECTION *section) {
    return This->lpVtbl->GetSectionData(This,section_number,raw_packet_length,section);
}
static inline HRESULT ISectionList_GetProgramIdentifier(ISectionList* This,PID *pid) {
    return This->lpVtbl->GetProgramIdentifier(This,pid);
}
static inline HRESULT ISectionList_GetTableIdentifier(ISectionList* This,TID *tid) {
    return This->lpVtbl->GetTableIdentifier(This,tid);
}
#endif
#endif

#endif


#endif  /* __ISectionList_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMpeg2Stream interface
 */
#ifndef __IMpeg2Stream_INTERFACE_DEFINED__
#define __IMpeg2Stream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMpeg2Stream, 0x400cc286, 0x32a0, 0x4ce4, 0x90,0x41, 0x39,0x57,0x11,0x25,0xa6,0x35);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("400cc286-32a0-4ce4-9041-39571125a635")
IMpeg2Stream : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Initialize(
        MPEG_REQUEST_TYPE request_type,
        IMpeg2Data *mpeg2_data,
        PMPEG_CONTEXT context,
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        HANDLE data_ready_event) = 0;

    virtual HRESULT STDMETHODCALLTYPE SupplyDataBuffer(
        PMPEG_STREAM_BUFFER stream_buffer) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMpeg2Stream, 0x400cc286, 0x32a0, 0x4ce4, 0x90,0x41, 0x39,0x57,0x11,0x25,0xa6,0x35)
#endif
#else
typedef struct IMpeg2StreamVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMpeg2Stream *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMpeg2Stream *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMpeg2Stream *This);

    /*** IMpeg2Stream methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        IMpeg2Stream *This,
        MPEG_REQUEST_TYPE request_type,
        IMpeg2Data *mpeg2_data,
        PMPEG_CONTEXT context,
        PID pid,
        TID tid,
        PMPEG2_FILTER filter,
        HANDLE data_ready_event);

    HRESULT (STDMETHODCALLTYPE *SupplyDataBuffer)(
        IMpeg2Stream *This,
        PMPEG_STREAM_BUFFER stream_buffer);

    END_INTERFACE
} IMpeg2StreamVtbl;

interface IMpeg2Stream {
    CONST_VTBL IMpeg2StreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMpeg2Stream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMpeg2Stream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMpeg2Stream_Release(This) (This)->lpVtbl->Release(This)
/*** IMpeg2Stream methods ***/
#define IMpeg2Stream_Initialize(This,request_type,mpeg2_data,context,pid,tid,filter,data_ready_event) (This)->lpVtbl->Initialize(This,request_type,mpeg2_data,context,pid,tid,filter,data_ready_event)
#define IMpeg2Stream_SupplyDataBuffer(This,stream_buffer) (This)->lpVtbl->SupplyDataBuffer(This,stream_buffer)
#else
/*** IUnknown methods ***/
static inline HRESULT IMpeg2Stream_QueryInterface(IMpeg2Stream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMpeg2Stream_AddRef(IMpeg2Stream* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMpeg2Stream_Release(IMpeg2Stream* This) {
    return This->lpVtbl->Release(This);
}
/*** IMpeg2Stream methods ***/
static inline HRESULT IMpeg2Stream_Initialize(IMpeg2Stream* This,MPEG_REQUEST_TYPE request_type,IMpeg2Data *mpeg2_data,PMPEG_CONTEXT context,PID pid,TID tid,PMPEG2_FILTER filter,HANDLE data_ready_event) {
    return This->lpVtbl->Initialize(This,request_type,mpeg2_data,context,pid,tid,filter,data_ready_event);
}
static inline HRESULT IMpeg2Stream_SupplyDataBuffer(IMpeg2Stream* This,PMPEG_STREAM_BUFFER stream_buffer) {
    return This->lpVtbl->SupplyDataBuffer(This,stream_buffer);
}
#endif
#endif

#endif


#endif  /* __IMpeg2Stream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * SectionList coclass
 */

DEFINE_GUID(CLSID_SectionList, 0x73da5d04, 0x4347, 0x45d3, 0xa9,0xdc, 0xfa,0xe9,0xdd,0xbe,0x55,0x8d);

#ifdef __cplusplus
class DECLSPEC_UUID("73da5d04-4347-45d3-a9dc-fae9ddbe558d") SectionList;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SectionList, 0x73da5d04, 0x4347, 0x45d3, 0xa9,0xdc, 0xfa,0xe9,0xdd,0xbe,0x55,0x8d)
#endif
#endif

/*****************************************************************************
 * Mpeg2Stream coclass
 */

DEFINE_GUID(CLSID_Mpeg2Stream, 0xf91d96c7, 0x8509, 0x4d0b, 0xab,0x26, 0xa0,0xdd,0x10,0x90,0x4b,0xb7);

#ifdef __cplusplus
class DECLSPEC_UUID("f91d96c7-8509-4d0b-ab26-a0dd10904bb7") Mpeg2Stream;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Mpeg2Stream, 0xf91d96c7, 0x8509, 0x4d0b, 0xab,0x26, 0xa0,0xdd,0x10,0x90,0x4b,0xb7)
#endif
#endif

/*****************************************************************************
 * Mpeg2Data coclass
 */

DEFINE_GUID(CLSID_Mpeg2Data, 0xc666e115, 0xbb62, 0x4027, 0xa1,0x13, 0x82,0xd6,0x43,0xfe,0x2d,0x99);

#ifdef __cplusplus
class DECLSPEC_UUID("c666e115-bb62-4027-a113-82d643fe2d99") Mpeg2Data;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Mpeg2Data, 0xc666e115, 0xbb62, 0x4027, 0xa1,0x13, 0x82,0xd6,0x43,0xfe,0x2d,0x99)
#endif
#endif

#endif /* __Mpeg2DataLib_LIBRARY_DEFINED__ */
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __mpeg2data_h__ */
