blob: 7ec04ddc593226748e2cbdfe447d5108984cfa06 [file] [log] [blame]
/*
* Copyright (C) 2025 Biswapriyo Nath
*
* 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
*/
import "oaidl.idl";
import "ocidl.idl";
import "bdaiface.idl";
import "mpeg2structs.idl";
interface ISectionList;
interface IMpeg2Stream;
cpp_quote("#define MPEG_PAT_PID 0x0000")
cpp_quote("#define MPEG_PAT_TID 0x00")
cpp_quote("#define MPEG_CAT_PID 0x0001")
cpp_quote("#define MPEG_CAT_TID 0x01")
cpp_quote("#define MPEG_PMT_TID 0x02")
cpp_quote("#define MPEG_TSDT_PID 0x0002")
cpp_quote("#define MPEG_TSDT_TID 0x03")
cpp_quote("#define ATSC_MGT_PID 0x1ffb")
cpp_quote("#define ATSC_MGT_TID 0xc7")
cpp_quote("#define ATSC_VCT_PID 0x1ffb")
cpp_quote("#define ATSC_VCT_TERR_TID 0xc8")
cpp_quote("#define ATSC_VCT_CABL_TID 0xc9")
cpp_quote("#define ATSC_EIT_TID 0xcb")
cpp_quote("#define ATSC_ETT_TID 0xcc")
cpp_quote("#define ATSC_RRT_TID 0xca")
cpp_quote("#define ATSC_RRT_PID 0x1ffb")
cpp_quote("#define ATSC_STT_PID 0x1ffb")
cpp_quote("#define ATSC_STT_TID 0xcd")
cpp_quote("#define ATSC_PIT_TID 0xd0")
cpp_quote("#define DVB_NIT_PID 0x0010")
cpp_quote("#define DVB_NIT_ACTUAL_TID 0x40")
cpp_quote("#define DVB_NIT_OTHER_TID 0x41")
cpp_quote("#define DVB_SDT_PID 0x0011")
cpp_quote("#define DVB_SDT_ACTUAL_TID 0x42")
cpp_quote("#define DVB_SDT_OTHER_TID 0x46")
cpp_quote("#define DVB_BAT_PID 0x0011")
cpp_quote("#define DVB_BAT_TID 0x4a")
cpp_quote("#define DVB_EIT_PID 0x0012")
cpp_quote("#define DVB_EIT_ACTUAL_TID 0x4e")
cpp_quote("#define DVB_EIT_OTHER_TID 0x4f")
cpp_quote("#define DVB_RST_PID 0x0013")
cpp_quote("#define DVB_RST_TID 0x71")
cpp_quote("#define DVB_TDT_PID 0x0014")
cpp_quote("#define DVB_TDT_TID 0x70")
cpp_quote("#define DVB_ST_PID_16 0x0010")
cpp_quote("#define DVB_ST_PID_17 0x0011")
cpp_quote("#define DVB_ST_PID_18 0x0012")
cpp_quote("#define DVB_ST_PID_19 0x0013")
cpp_quote("#define DVB_ST_PID_20 0x0014")
cpp_quote("#define DVB_ST_TID 0x72")
cpp_quote("#define ISDB_ST_TID 0x72")
cpp_quote("#define DVB_TOT_PID 0x0014")
cpp_quote("#define DVB_TOT_TID 0x73")
cpp_quote("#define DVB_DIT_PID 0x001e")
cpp_quote("#define DVB_DIT_TID 0x7e")
cpp_quote("#define DVB_SIT_PID 0x001f")
cpp_quote("#define DVB_SIT_TID 0x7f")
cpp_quote("#define ISDB_EMM_TID 0x85")
cpp_quote("#define ISDB_BIT_PID 0x0024")
cpp_quote("#define ISDB_BIT_TID 0xc4")
cpp_quote("#define ISDB_NBIT_PID 0x0025")
cpp_quote("#define ISDB_NBIT_MSG_TID 0xc5")
cpp_quote("#define ISDB_NBIT_REF_TID 0xc6")
cpp_quote("#define ISDB_LDT_PID 0x0025")
cpp_quote("#define ISDB_LDT_TID 0xc7")
cpp_quote("#define ISDB_SDTT_PID 0x0023")
cpp_quote("#define ISDB_SDTT_ALT_PID 0x0028")
cpp_quote("#define ISDB_SDTT_TID 0xc3")
cpp_quote("#define ISDB_CDT_PID 0x0029")
cpp_quote("#define ISDB_CDT_TID 0xc8")
cpp_quote("#define SCTE_EAS_TID 0xd8")
cpp_quote("#define SCTE_EAS_IB_PID 0x1ffb")
cpp_quote("#define SCTE_EAS_OOB_PID 0x1ffc")
[
object,
uuid(bdcdd913-9ecd-4fb2-81ae-adf747ea75a5),
pointer_default(unique)
]
interface IMpeg2TableFilter : IUnknown
{
HRESULT AddPID(PID p);
HRESULT AddTable(PID p, TID t);
HRESULT AddExtension(PID p, TID t, TEID e);
HRESULT RemovePID(PID p);
HRESULT RemoveTable(PID p, TID t);
HRESULT RemoveExtension(PID p, TID t, TEID e);
}
[
uuid(752845f1-758f-4c83-a043-4270c593308e)
]
coclass Mpeg2TableFilter
{
[default] interface IMpeg2TableFilter;
}
typedef struct Mpeg2TableSampleHdr
{
BYTE SectionCount;
BYTE Reserved[3];
long SectionOffsets[];
} Mpeg2TableSampleHdr;
[
uuid(dbaf6c1b-b6a4-4898-ae65-204f0d9509a1),
version(1.0)
]
library Mpeg2DataLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
object,
uuid(9b396d40-f380-4e3c-a514-1a82bf6ebfe6),
pointer_default(unique)
]
interface IMpeg2Data : IUnknown
{
HRESULT GetSection(
[in] PID pid,
[in] TID tid,
[in] PMPEG2_FILTER filter,
[in] DWORD timeout,
[out] ISectionList **section_list);
HRESULT GetTable(
[in] PID pid,
[in] TID tid,
[in] PMPEG2_FILTER filter,
[in] DWORD timeout,
[out] ISectionList **section_list);
HRESULT GetStreamOfSections(
[in] PID pid,
[in] TID tid,
[in] PMPEG2_FILTER filter,
[in] HANDLE data_ready_event,
[out] IMpeg2Stream **mpeg_stream);
}
[
object,
uuid(afec1eb5-2a64-46c6-bf4b-ae3ccb6afdb0),
pointer_default(unique)
]
interface ISectionList : IUnknown
{
HRESULT Initialize(
[in] MPEG_REQUEST_TYPE request_type,
[in] IMpeg2Data *mpeg2_data,
[in] PMPEG_CONTEXT context,
[in] PID pid,
[in] TID tid,
[in] PMPEG2_FILTER filter,
[in] DWORD timeout,
[in] HANDLE done_event);
HRESULT InitializeWithRawSections(
[in] PMPEG_PACKET_LIST mpl_sections);
HRESULT CancelPendingRequest(void);
HRESULT GetNumberOfSections(
[out] WORD *count);
HRESULT GetSectionData(
[in] WORD section_number,
[out] DWORD *raw_packet_length,
[out] PSECTION *section);
HRESULT GetProgramIdentifier(PID *pid);
HRESULT GetTableIdentifier(TID *tid);
}
[
object,
uuid(400cc286-32a0-4ce4-9041-39571125a635),
pointer_default(unique)
]
interface IMpeg2Stream : IUnknown
{
HRESULT Initialize(
[in] MPEG_REQUEST_TYPE request_type,
[in] IMpeg2Data *mpeg2_data,
[in] PMPEG_CONTEXT context,
[in] PID pid,
[in] TID tid,
[in] PMPEG2_FILTER filter,
[in] HANDLE data_ready_event);
HRESULT SupplyDataBuffer(
[in] PMPEG_STREAM_BUFFER stream_buffer);
}
[
uuid(73da5d04-4347-45d3-a9dc-fae9ddbe558d)
]
coclass SectionList
{
[default] interface ISectionList;
}
[
uuid(f91d96c7-8509-4d0b-ab26-a0dd10904bb7)
]
coclass Mpeg2Stream
{
[default] interface IMpeg2Stream;
}
[
uuid(c666e115-bb62-4027-a113-82d643fe2d99)
]
coclass Mpeg2Data
{
[default] interface IMpeg2Data;
}
} /* Mpeg2DataLib */