EyeTVPluginDefs.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:8k
源码类别:

midi

开发平台:

Unix_Linux

  1. /* This is public domain code developed by Elgato Systems GmbH. No GPL-covered 
  2.  * changes were added to this file by any members of the VideoLAN team. If you
  3.  * want to do so, add a modified GPL header here, but keep a message emphasising
  4.  * the non-licensed parts of this header file. 
  5.  * Ideally, VideoLAN-related changes should only go to eyetvplugin.h.
  6.  * 
  7.  * $Id: 0343e8b6a65523968eb0f917f3c14ab002cb4965 $
  8.  */
  9. #pragma once
  10. /*
  11. The EyeTV Plugin API
  12. ====================
  13. The EyeTV Software gives third parties access to the incoming MPEG-2 transport stream. 
  14. At this time the API is available for the following products:
  15. - EyeTV 200 (analog)
  16. - EyeTV 300 (DVB-S) 
  17. - EyeTV 400 (DVB-T)
  18. A plugin receives device plugged/unplugged notifications, it can request or release 
  19. individual PIDs and most importantly it has access to transport stream packets in 
  20. real time, as they arrive from the device.  Note that the plugin is called before EyeTV 
  21. itself looks at the packets, so it is even possible to modify the data.
  22. Plugins currently live in EyeTV.app/Contens/Plugins/
  23. A plugin is packaged as a bundle with a single entry point:
  24. long EyeTVPluginDispatcher(EyeTVPluginSelector  selector,  
  25. void  *refCon, 
  26. EyeTVPluginDeviceID deviceID, 
  27.     long  param1, 
  28.     long  param2,  
  29.     long  param3, 
  30.     long  param4);
  31. PID Filtering
  32. =============
  33. EyeTV employs both hardware and software PID filtering.  A plugin's dispatch routine 
  34. is called with the kEyeTVPluginSelector_PacketsArrived selector after the hardware 
  35. PID filter (naturally) but prior to the software PID filter, so the plugin has access 
  36. to all packets that are delivered by the hardware.  
  37. A plugin can request PIDs that are not needed by EyeTV from the hardware PID filter by 
  38. means of a callback routine, see eyeTVPluginSelector_SetCallback.
  39. Note that hardware PID filtering is on for single processor machines (to reduce the CPU 
  40. load), but off for multi-processor machines (to improve channel switch times).  
  41. This behaviour is controlled by the "hardware PID filter" key in com.elgato.eyetv.plist, 
  42. which defaults to "Auto" ("Off" on MP machines, "On" on single-processor machines).  EyeTV
  43. does not offer GUI to change this setting.  A plugin hence needs to be prepared to handle 
  44. both an entire transponder or multiplex and to request PIDs it might need.
  45. Note that the plugin is called on the real-time thread that receives the transport stream
  46. packets and that the packet buffers passed to the plugin are the actual hardware DMA buffers.
  47. Please return as quickly as possible from the kEyeTVPluginSelector_PacketsArrived call and
  48. avoid blocking the calling thread.
  49. Revision History:
  50. 02/27/2004: Initial Release.
  51. */
  52. #define EYETV_PLUGIN_API_VERSION 0x04021901
  53. #define EYETV_PLUGIN_API_MIN_VERSION 0x04021901
  54. typedef long long  EyeTVPluginDeviceID;
  55. typedef long EyeTVPluginDeviceType;
  56. typedef long EyeTVPluginSelector;
  57. enum {
  58. kEyeTVPIDType_Video  = 0,
  59. kEyeTVPIDType_MPEGAudio  = 1,
  60. kEyeTVPIDType_VBI  = 2, /* teletext */
  61. kEyeTVPIDType_PCR  = 3,
  62. kEyeTVPIDType_PMT  = 4,
  63. kEyeTVPIDType_Unknown  = 5,
  64. kEyeTVPIDType_AC3Audio  = 6
  65. };
  66. typedef struct EyeTVPluginPIDInfo EyeTVPluginPIDInfo;
  67. struct EyeTVPluginPIDInfo {
  68. long pid;
  69. long pidType;
  70. };
  71. /***********************************************************************************
  72. *
  73. * EyeTVPluginCallbackParams,
  74. *
  75. ***********************************************************************************/
  76. enum {
  77. kEyeTVPluginCallbackSelector_RetainPIDs = 0,
  78. kEyeTVPluginCallbackSelector_ReleasePIDs = 1
  79. };
  80. typedef struct EyeTVPluginCallbackParams EyeTVPluginCallbackParams;  
  81. struct EyeTVPluginCallbackParams {
  82. EyeTVPluginDeviceID deviceID; // the deviceID
  83. long selector; //  callback selector, see above
  84. long *pids; //  list of pids to release/retain
  85. long pidsCount; // count of pids
  86. };
  87. /***********************************************************************************
  88. *
  89. * typedef for the callback function,
  90. *
  91. ***********************************************************************************/
  92. typedef long(* EyeTVPluginCallbackProc)(EyeTVPluginCallbackParams *params);
  93. /***********************************************************************************
  94. *
  95. * EyeTVPluginParamStructs
  96. *
  97. ***********************************************************************************/
  98. typedef struct EyeTVPluginInitializeParams EyeTVPluginInitializeParams;
  99. struct EyeTVPluginInitializeParams {
  100. long apiVersion; // version of the EyeTV_PLUGIN_API
  101. EyeTVPluginCallbackProc callback; // the callback
  102. }; /* 8 bytes */
  103. typedef struct EyeTVPluginGetInfoParams EyeTVPluginGetInfoParams;
  104. struct EyeTVPluginGetInfoParams {
  105. long *pluginAPIVersion; // <- EYETV_PLUGIN_API_VERSION
  106. char *pluginName; // <- points to a 128-byte buffer, the plugin is expected to fill the buffer with
  107. //    a UTF-8 encoded string.
  108. char *description; // <- points to a 1024-byte buffer, the plugin is expected to fill the buffer with
  109. //   a UTF-8 encoded string describing the plugin.
  110. }; /* 12 bytes */
  111. enum {
  112. kEyeTVPluginDeviceType_Unknown = 0,
  113. kEyeTVPluginDeviceType_e200 = 1,
  114. kEyeTVPluginDeviceType_e300 = 2,
  115. kEyeTVPluginDeviceType_e400 = 3
  116. } ;
  117. typedef struct EyeTVPluginDeviceAddedParams EyeTVPluginDeviceAddedParams;
  118. struct EyeTVPluginDeviceAddedParams {
  119. EyeTVPluginDeviceType deviceType;
  120. }; /* 4 bytes */
  121. typedef struct EyeTVPluginPacketsArrivedParams EyeTVPluginPacketsArrivedParams;
  122. struct EyeTVPluginPacketsArrivedParams {
  123. long **packets; // points to an array of packets
  124. long packetCount;
  125. }; /* 8 bytes */
  126. typedef struct EyeTVPluginServiceChangedParams EyeTVPluginServiceChangedParams;
  127. struct EyeTVPluginServiceChangedParams {
  128. long headendID; // new headend ID. For E300 it's the orbital position of the satellite
  129. // in tenth of a degree
  130. long transponderID; // new transponder ID (The Frequency in kHz)
  131. long serviceID; // new service ID (the ID of the used service as included in the DVB Stream)
  132. EyeTVPluginPIDInfo *pidList; // points to the list of active PIDs;
  133. long pidCount; // the length of pidList
  134. }; /* 20 bytes */
  135. /***********************************************************************************
  136. *
  137. * EyeTVPluginParams
  138. *
  139. ***********************************************************************************/
  140. typedef struct EyeTVPluginParams EyeTVPluginParams;
  141. struct EyeTVPluginParams {
  142. EyeTVPluginDeviceID deviceID; // ID of the device
  143. EyeTVPluginSelector selector; // selector
  144. void *refCon; // refCon
  145. union {
  146. EyeTVPluginInitializeParams initialize; // kEyeTVPluginSelector_Initialize
  147. // kEyeTVPluginSelector_Terminate, no additional parameters
  148. EyeTVPluginGetInfoParams info; // kEyeTVPluginSelector_GetInfo
  149. EyeTVPluginDeviceAddedParams deviceAdded; // kEyeTVPluginSelector_DeviceAdded
  150. // kEyeTVPluginSelector_DeviceRemoved, no additional parameters
  151. EyeTVPluginPacketsArrivedParams  packetsArrived; // kEyeTVPluginSelector_PacketsArrived
  152. EyeTVPluginServiceChangedParams serviceChanged; // kEyeTVPluginSelector_ServiceChanged
  153. };
  154. };
  155. enum { // EyeTVPluginSelector
  156. kEyeTVPluginSelector_Initialize = 0,
  157. kEyeTVPluginSelector_Terminate = 1,
  158. kEyeTVPluginSelector_GetInfo = 2,
  159. kEyeTVPluginSelector_DeviceAdded = 3,
  160. kEyeTVPluginSelector_DeviceRemoved = 4,
  161. kEyeTVPluginSelector_PacketsArrived = 5,
  162. kEyeTVPluginSelector_ServiceChanged = 6
  163. };
  164. /***********************************************************************************
  165. *
  166. * EyeTVPluginEntryProc
  167. *
  168. ***********************************************************************************/
  169. typedef long(* EyeTVPluginEntryProc)(EyeTVPluginParams *params);