+++ /dev/null
-/* This is public domain code developed by Elgato Systems GmbH. No GPL-covered \r
- * changes were added to this file by any members of the VideoLAN team. If you\r
- * want to do so, add a modified GPL header here, but keep a message emphasising\r
- * the non-licensed parts of this header file. \r
- * Ideally, VideoLAN-related changes should only go to eyetvplugin.h.\r
- * \r
- * $Id$\r
- */\r
-\r
-\r
-#pragma once\r
-\r
-/*\r
-\r
- The EyeTV Plugin API\r
- ====================\r
- \r
- The EyeTV Software gives third parties access to the incoming MPEG-2 transport stream. \r
- At this time the API is available for the following products:\r
- \r
- - EyeTV 200 (analog)\r
- - EyeTV 300 (DVB-S) \r
- - EyeTV 400 (DVB-T)\r
- \r
- A plugin receives device plugged/unplugged notifications, it can request or release \r
- individual PIDs and most importantly it has access to transport stream packets in \r
- real time, as they arrive from the device. Note that the plugin is called before EyeTV \r
- itself looks at the packets, so it is even possible to modify the data.\r
- \r
- Plugins currently live in EyeTV.app/Contens/Plugins/\r
- \r
- A plugin is packaged as a bundle with a single entry point:\r
- \r
- long EyeTVPluginDispatcher(EyeTVPluginSelector selector, \r
- void *refCon, \r
- EyeTVPluginDeviceID deviceID, \r
- long param1, \r
- long param2, \r
- long param3, \r
- long param4);\r
-\r
- \r
- PID Filtering\r
- =============\r
- \r
- EyeTV employs both hardware and software PID filtering. A plugin's dispatch routine \r
- is called with the kEyeTVPluginSelector_PacketsArrived selector after the hardware \r
- PID filter (naturally) but prior to the software PID filter, so the plugin has access \r
- to all packets that are delivered by the hardware. \r
- \r
- A plugin can request PIDs that are not needed by EyeTV from the hardware PID filter by \r
- means of a callback routine, see eyeTVPluginSelector_SetCallback.\r
-\r
- Note that hardware PID filtering is on for single processor machines (to reduce the CPU \r
- load), but off for multi-processor machines (to improve channel switch times). \r
- This behaviour is controlled by the "hardware PID filter" key in com.elgato.eyetv.plist, \r
- which defaults to "Auto" ("Off" on MP machines, "On" on single-processor machines). EyeTV\r
- does not offer GUI to change this setting. A plugin hence needs to be prepared to handle \r
- both an entire transponder or multiplex and to request PIDs it might need.\r
- \r
- Note that the plugin is called on the real-time thread that receives the transport stream\r
- packets and that the packet buffers passed to the plugin are the actual hardware DMA buffers.\r
- Please return as quickly as possible from the kEyeTVPluginSelector_PacketsArrived call and\r
- avoid blocking the calling thread.\r
-\r
-\r
-\r
-\r
-\r
- Revision History:\r
-\r
- 02/27/2004: Initial Release.\r
-\r
-*/\r
- \r
-\r
-\r
-#define EYETV_PLUGIN_API_VERSION 0x04021901\r
-#define EYETV_PLUGIN_API_MIN_VERSION 0x04021901\r
-\r
-typedef long long EyeTVPluginDeviceID;\r
-typedef long EyeTVPluginDeviceType;\r
-typedef long EyeTVPluginSelector;\r
-\r
-enum {\r
- kEyeTVPIDType_Video = 0,\r
- kEyeTVPIDType_MPEGAudio = 1,\r
- kEyeTVPIDType_VBI = 2, /* teletext */\r
- kEyeTVPIDType_PCR = 3,\r
- kEyeTVPIDType_PMT = 4,\r
- kEyeTVPIDType_Unknown = 5,\r
- kEyeTVPIDType_AC3Audio = 6\r
-};\r
-\r
-\r
-typedef struct EyeTVPluginPIDInfo EyeTVPluginPIDInfo;\r
-struct EyeTVPluginPIDInfo {\r
- long pid;\r
- long pidType; \r
-};\r
-\r
-\r
-\r
-/***********************************************************************************\r
-*\r
-* EyeTVPluginCallbackParams,\r
-*\r
-***********************************************************************************/\r
-enum {\r
- kEyeTVPluginCallbackSelector_RetainPIDs = 0, \r
- kEyeTVPluginCallbackSelector_ReleasePIDs = 1 \r
-};\r
-\r
-typedef struct EyeTVPluginCallbackParams EyeTVPluginCallbackParams; \r
-struct EyeTVPluginCallbackParams {\r
- EyeTVPluginDeviceID deviceID; // the deviceID\r
- long selector; // callback selector, see above\r
- long *pids; // list of pids to release/retain\r
- long pidsCount; // count of pids\r
-};\r
-\r
-\r
-/***********************************************************************************\r
-*\r
-* typedef for the callback function,\r
-*\r
-***********************************************************************************/\r
-typedef long(* EyeTVPluginCallbackProc)(EyeTVPluginCallbackParams *params);\r
-\r
-\r
-\r
-/***********************************************************************************\r
-*\r
-* EyeTVPluginParamStructs\r
-*\r
-***********************************************************************************/\r
-\r
-\r
-typedef struct EyeTVPluginInitializeParams EyeTVPluginInitializeParams;\r
-struct EyeTVPluginInitializeParams {\r
- long apiVersion; // version of the EyeTV_PLUGIN_API\r
- EyeTVPluginCallbackProc callback; // the callback\r
-}; /* 8 bytes */\r
-\r
-\r
-\r
-typedef struct EyeTVPluginGetInfoParams EyeTVPluginGetInfoParams;\r
-struct EyeTVPluginGetInfoParams {\r
- long *pluginAPIVersion; // <- EYETV_PLUGIN_API_VERSION\r
- char *pluginName; // <- points to a 128-byte buffer, the plugin is expected to fill the buffer with\r
- // a UTF-8 encoded string. \r
- char *description; // <- points to a 1024-byte buffer, the plugin is expected to fill the buffer with\r
- // a UTF-8 encoded string describing the plugin.\r
-}; /* 12 bytes */\r
-\r
-\r
-\r
-enum {\r
- kEyeTVPluginDeviceType_Unknown = 0, \r
- kEyeTVPluginDeviceType_e200 = 1,\r
- kEyeTVPluginDeviceType_e300 = 2,\r
- kEyeTVPluginDeviceType_e400 = 3\r
-} ;\r
-\r
-typedef struct EyeTVPluginDeviceAddedParams EyeTVPluginDeviceAddedParams;\r
-struct EyeTVPluginDeviceAddedParams {\r
- EyeTVPluginDeviceType deviceType; \r
-}; /* 4 bytes */\r
-\r
-\r
-typedef struct EyeTVPluginPacketsArrivedParams EyeTVPluginPacketsArrivedParams;\r
-struct EyeTVPluginPacketsArrivedParams {\r
- long **packets; // points to an array of packets\r
- long packetCount; \r
-}; /* 8 bytes */\r
-\r
-\r
-\r
-typedef struct EyeTVPluginServiceChangedParams EyeTVPluginServiceChangedParams;\r
-struct EyeTVPluginServiceChangedParams {\r
- long headendID; // new headend ID. For E300 it's the orbital position of the satellite\r
- // in tenth of a degree\r
- long transponderID; // new transponder ID (The Frequency in kHz)\r
- long serviceID; // new service ID (the ID of the used service as included in the DVB Stream)\r
- EyeTVPluginPIDInfo *pidList; // points to the list of active PIDs;\r
- long pidCount; // the length of pidList\r
-}; /* 20 bytes */\r
-\r
-\r
-\r
-\r
-/***********************************************************************************\r
-*\r
-* EyeTVPluginParams\r
-* \r
-***********************************************************************************/\r
-typedef struct EyeTVPluginParams EyeTVPluginParams;\r
-struct EyeTVPluginParams {\r
- EyeTVPluginDeviceID deviceID; // ID of the device\r
- EyeTVPluginSelector selector; // selector\r
- void *refCon; // refCon\r
-\r
- union { \r
- EyeTVPluginInitializeParams initialize; // kEyeTVPluginSelector_Initialize\r
- // kEyeTVPluginSelector_Terminate, no additional parameters\r
- EyeTVPluginGetInfoParams info; // kEyeTVPluginSelector_GetInfo\r
- EyeTVPluginDeviceAddedParams deviceAdded; // kEyeTVPluginSelector_DeviceAdded\r
- // kEyeTVPluginSelector_DeviceRemoved, no additional parameters\r
- EyeTVPluginPacketsArrivedParams packetsArrived; // kEyeTVPluginSelector_PacketsArrived\r
- EyeTVPluginServiceChangedParams serviceChanged; // kEyeTVPluginSelector_ServiceChanged\r
- \r
- };\r
-};\r
-\r
-\r
-enum { // EyeTVPluginSelector\r
- kEyeTVPluginSelector_Initialize = 0, \r
- kEyeTVPluginSelector_Terminate = 1, \r
- kEyeTVPluginSelector_GetInfo = 2, \r
- kEyeTVPluginSelector_DeviceAdded = 3, \r
- kEyeTVPluginSelector_DeviceRemoved = 4, \r
- kEyeTVPluginSelector_PacketsArrived = 5, \r
- kEyeTVPluginSelector_ServiceChanged = 6 \r
-}; \r
-\r
-\r
-\r
-/***********************************************************************************\r
-*\r
-* EyeTVPluginEntryProc\r
-*\r
-***********************************************************************************/\r
-typedef long(* EyeTVPluginEntryProc)(EyeTVPluginParams *params);\r