rmacomm.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:15k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * 
  3.  *  $Id: rmacomm.h,v 1.1 2003/05/30 02:17:36 gabest Exp $
  4.  *
  5.  *  Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
  6.  *  
  7.  *  http://www.real.com/devzone
  8.  *
  9.  *  This program contains proprietary 
  10.  *  information of Progressive Networks, Inc, and is licensed
  11.  *  subject to restrictions on use and distribution.
  12.  *
  13.  *
  14.  *  RealMedia Architecture Common Utility interfaces
  15.  *
  16.  */
  17. #ifndef _RMACOMM_H_
  18. #define _RMACOMM_H_
  19. #include "rmaengin.h" // For RMATimeval
  20. /*
  21.  * Forward declarations of some interfaces defined here-in.
  22.  */
  23. typedef _INTERFACE IRMACommonClassFactory IRMACommonClassFactory;
  24. typedef _INTERFACE IRMAStatistics IRMAStatistics;
  25. typedef _INTERFACE IRMARegistryID IRMARegistryID;
  26. typedef _INTERFACE IRMAServerFork IRMAServerFork;
  27. typedef _INTERFACE IRMAServerControl IRMAServerControl;
  28. typedef _INTERFACE IRMAReconfigServerResponse IRMAReconfigServerResponse;
  29. typedef _INTERFACE IRMABuffer IRMABuffer;
  30. typedef _INTERFACE IRMAWantServerReconfigNotification
  31. IRMAWantServerReconfigNotification;  
  32. typedef _INTERFACE IRMAFastAlloc IRMAFastAlloc;
  33. /****************************************************************************
  34.  * 
  35.  *  Interface:
  36.  * 
  37.  * IRMACommonClassFactory
  38.  * 
  39.  *  Purpose:
  40.  * 
  41.  * RMA interface that manages the creation of common RMA classes.
  42.  * 
  43.  *  IID_IRMACommonClassFactory:
  44.  * 
  45.  * {00000000-0901-11d1-8B06-00A024406D59}
  46.  * 
  47.  */
  48. DEFINE_GUID(IID_IRMACommonClassFactory, 0x00000000, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  49. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  50. #undef  INTERFACE
  51. #define INTERFACE   IRMACommonClassFactory
  52. DECLARE_INTERFACE_(IRMACommonClassFactory, IUnknown)
  53. {
  54.     /*
  55.      * IUnknown methods
  56.      */
  57.     STDMETHOD(QueryInterface) (THIS_
  58. REFIID riid,
  59. void** ppvObj) PURE;
  60.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  61.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  62.     /*
  63.      * IRMACommonClassFactory methods
  64.      */
  65.     /************************************************************************
  66.      * Method:
  67.      *     IRMACommonClassFactory::CreateInstance
  68.      * Purpose:
  69.      *     Creates instances of common objects supported by the system,
  70.      *     like IRMABuffer, IRMAPacket, IRMAValues, etc.
  71.      *
  72.      *     This method is similar to Window's CoCreateInstance() in its 
  73.      *     purpose, except that it only creates objects of a well known
  74.      *     types.
  75.      *
  76.      *     NOTE: Aggregation is never used. Therefore and outer unknown is
  77.      *     not passed to this function, and you do not need to code for this
  78.      *     situation.
  79.      */
  80.     STDMETHOD(CreateInstance) (THIS_
  81. REFCLSID    /*IN*/  rclsid,
  82. void**     /*OUT*/ ppUnknown) PURE;
  83.     /************************************************************************
  84.      *  Method:
  85.      *     IRMAController::CreateInstanceAggregatable
  86.      *  Purpose:
  87.      *     Creates instances of common objects that can be aggregated
  88.      *     supported by the system, like IRMASiteWindowed
  89.      *
  90.      *     This method is similar to Window's CoCreateInstance() in its 
  91.      *     purpose, except that it only creates objects of a well known
  92.      *     types.
  93.      *
  94.      *     NOTE 1: Unlike CreateInstance, this method will create internal
  95.      *     objects that support Aggregation.
  96.      *
  97.      *     NOTE 2: The output interface is always the non-delegating 
  98.      *     IUnknown.
  99.      */
  100.     STDMETHOD(CreateInstanceAggregatable)
  101.     (THIS_
  102.     REFCLSID     /*IN*/  rclsid,
  103.     REF(IUnknown*)  /*OUT*/ ppUnknown,
  104.     IUnknown*     /*IN*/  pUnkOuter) PURE;
  105. };
  106. /****************************************************************************
  107.  * 
  108.  *  Interface:
  109.  * 
  110.  * IRMAStatistics
  111.  * 
  112.  *  Purpose:
  113.  * 
  114.  * This interface allows update of the client statistics.
  115.  * 
  116.  *  IID_IRMAStatistics:
  117.  * 
  118.  * {00000001-0901-11d1-8B06-00A024406D59}
  119.  * 
  120.  */
  121. DEFINE_GUID(IID_IRMAStatistics, 0x00000001, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  122.     0xa0, 0x24, 0x40, 0x6d, 0x59);
  123. #undef  INTERFACE
  124. #define INTERFACE   IRMAStatistics
  125. DECLARE_INTERFACE_(IRMAStatistics, IUnknown)
  126. {
  127.     /*
  128.      * IUnknown methods
  129.      */
  130.     STDMETHOD(QueryInterface) (THIS_
  131. REFIID riid,
  132. void** ppvObj) PURE;
  133.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  134.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  135.     /*
  136.      * IRMAStatistics methods
  137.      */
  138.     /************************************************************************
  139.      * Method:
  140.      *     IRMAStatistics::Init
  141.      * Purpose:
  142.      *     Pass registry ID to the caller
  143.      *
  144.      */
  145.     STDMETHOD(InitializeStatistics) (THIS_
  146. UINT32 /*IN*/  ulRegistryID) PURE;
  147.     /************************************************************************
  148.      * Method:
  149.      *     IRMAStatistics::Update
  150.      * Purpose:
  151.      *     Notify the client to update its statistics stored in the registry
  152.      *
  153.      */
  154.     STDMETHOD(UpdateStatistics) (THIS) PURE;
  155. };
  156. /****************************************************************************
  157.  * 
  158.  *  Interface:
  159.  * 
  160.  * IRMARegistryID
  161.  * 
  162.  *  Purpose:
  163.  * 
  164.  * This interface is implemented by IRMAPlayer, IRMAStreamSource,
  165.  * and IRMAStream.  It allows the user to get the registry Base ID,
  166.  * for an object that you have a pointer to.
  167.  * 
  168.  *  IID_IRMARegistryID:
  169.  * 
  170.  * {00000002-0901-11d1-8B06-00A024406D59}
  171.  * 
  172.  */
  173. DEFINE_GUID(IID_IRMARegistryID, 0x00000002, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  174.     0xa0, 0x24, 0x40, 0x6d, 0x59);
  175. #undef  INTERFACE
  176. #define INTERFACE   IRMARegistryID
  177. DECLARE_INTERFACE_(IRMARegistryID, IUnknown)
  178. {
  179.     /*
  180.      * IUnknown methods
  181.      */
  182.     STDMETHOD(QueryInterface) (THIS_
  183. REFIID riid,
  184. void** ppvObj) PURE;
  185.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  186.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  187.     /*
  188.      * IRMARegistryID methods
  189.      */
  190.     /************************************************************************
  191.      * Method:
  192.      *     IRMARegistryID::GetID
  193.      * Purpose:
  194.      *     Get the registry ID of the object.
  195.      *
  196.      */
  197.     STDMETHOD(GetID) (THIS_
  198. REF(UINT32) /*OUT*/  ulRegistryID) PURE;
  199. };
  200. /****************************************************************************
  201.  * 
  202.  *  Interface:
  203.  * 
  204.  * IRMAServerFork
  205.  * 
  206.  *  Purpose:
  207.  * 
  208.  * This interface is implemented by the server context on Unix
  209.  * platforms.  This interface allows your plugin to fork off a
  210.  * process.  Note that the process that is forked off cannot use
  211.  * any RMA APIs.  The fork() system call is prohibited from within
  212.  * a RMA plugin.
  213.  *
  214.  *  IID_IRMAServerFork:
  215.  * 
  216.  * {00000003-0901-11d1-8B06-00A024406D59}
  217.  * 
  218.  */
  219. DEFINE_GUID(IID_IRMAServerFork, 0x00000003, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  220.     0xa0, 0x24, 0x40, 0x6d, 0x59);
  221. #undef  INTERFACE
  222. #define INTERFACE   IRMAServerFork
  223. DECLARE_INTERFACE_(IRMAServerFork, IUnknown)
  224. {
  225.     /*
  226.      * IUnknown methods
  227.      */
  228.     STDMETHOD(QueryInterface) (THIS_
  229. REFIID riid,
  230. void** ppvObj) PURE;
  231.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  232.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  233.     /*
  234.      * IRMAServerFork methods
  235.      */
  236.     /************************************************************************
  237.      * Method:
  238.      *     IRMAServerFork::Fork
  239.      * Purpose:
  240.      *     Fork off a child process.  The child process cannot use any RMA
  241.      *     APIs.  Upon successful completion, Fork returns 0 to the child
  242.      *     process and the PID of the child to the parent.  A return value
  243.      *     of -1 indicates an error.
  244.      *
  245.      *     Note:  The child process should *NOT* Release any interfaces.
  246.      * The cleanup of the IRMAServerFork() interface and other
  247.      * RMA interfaces is done by the parent.
  248.      *
  249.      */
  250.     STDMETHOD_(INT32, Fork) (THIS) PURE;
  251. };
  252. /*
  253.  * 
  254.  *  Interface:
  255.  *
  256.  * IRMAServerControl
  257.  *
  258.  *  Purpose:
  259.  *
  260.  * This inteface provides access to the RealMedia server's controls
  261.  *      for shutting down (for now).
  262.  *
  263.  * Note:  This registry is not related to the Windows system registry.
  264.  *
  265.  *  IID_IRMAServerControl:
  266.  *
  267.  * {00000004-0901-11d1-8B06-00A024406D59}
  268.  *
  269.  */
  270. DEFINE_GUID(IID_IRMAServerControl, 0x00000004, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  271.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  272. #define CLSID_IRMAServerControl IID_IRMAServerControl
  273. #undef  INTERFACE
  274. #define INTERFACE   IRMAServerControl
  275. DECLARE_INTERFACE_(IRMAServerControl, IUnknown)
  276. {
  277.     /*
  278.      * IUnknown methods
  279.      */
  280.     STDMETHOD(QueryInterface) (THIS_
  281. REFIID riid,
  282. void** ppvObj) PURE;
  283.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  284.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  285.     /*
  286.      * IRMAServerControl methods
  287.      */
  288.     /************************************************************************
  289.      *  Method:
  290.      *      IRMAServerControl::ShutdownServer
  291.      *  Purpose:
  292.      *      Shutdown the server.
  293.      */
  294.     STDMETHOD(ShutdownServer) (THIS_
  295. UINT32 status) PURE;
  296. };
  297. /*
  298.  * 
  299.  *  Interface:
  300.  *
  301.  * IRMAServerControl2
  302.  *
  303.  *  Purpose:
  304.  *
  305.  * Interface for extended server control methods.
  306.  *
  307.  *
  308.  *  IID_IRMAServerControl2:
  309.  *
  310.  * {00000005-0901-11d1-8B06-00A024406D59}
  311.  *
  312.  */
  313. DEFINE_GUID(IID_IRMAServerControl2, 0x00000005, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  314.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  315. #undef  INTERFACE
  316. #define INTERFACE   IRMAServerControl2
  317. DECLARE_INTERFACE_(IRMAServerControl2, IUnknown)
  318. {
  319.     /*
  320.      * IUnknown methods
  321.      */
  322.     STDMETHOD(QueryInterface) (THIS_
  323. REFIID riid,
  324. void** ppvObj) PURE;
  325.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  326.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  327.     /*
  328.      * IRMAServerControl2 methods
  329.      */
  330.     /************************************************************************
  331.      * IRMAServerControl2::RestartServer
  332.      *
  333.      * Purpose:
  334.      *
  335.      *     Completely shutdown the server, then restart.  Mainly used to
  336.      * cause not hot setting config var changes to take effect.
  337.      */
  338.     STDMETHOD(RestartServer) (THIS) PURE;
  339.     /************************************************************************
  340.      * IRMAServerControl2::ReconfigServer
  341.      *
  342.      * Purpose:
  343.      *
  344.      *     Used to cause the server to re-read in config from file or registry
  345.      * (however it was started) and attempt to use the values.
  346.      */
  347.     STDMETHOD(ReconfigServer) (THIS_ IRMAReconfigServerResponse* pResp) PURE;
  348. };
  349. /*
  350.  * 
  351.  *  Interface:
  352.  *
  353.  * IRMAReconfigServerResponse
  354.  *
  355.  *  Purpose:
  356.  *
  357.  * Response interface for IRMAServerControl2::ReconfigServer
  358.  *
  359.  *
  360.  *  IID_IRMAReconfigServerResponse:
  361.  *
  362.  * {00000006-0901-11d1-8B06-00A024406D59}
  363.  *
  364.  */
  365. DEFINE_GUID(IID_IRMAReconfigServerResponse, 0x00000006, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  366.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  367. #undef  INTERFACE
  368. #define INTERFACE   IRMAReconfigServerResponse
  369. DECLARE_INTERFACE_(IRMAReconfigServerResponse, IUnknown)
  370. {
  371.     /*
  372.      * IUnknown methods
  373.      */
  374.     STDMETHOD(QueryInterface) (THIS_
  375. REFIID riid,
  376. void** ppvObj) PURE;
  377.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  378.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  379.     /************************************************************************
  380.      * IRMAReconfigServerResponse::ReconfigServerDone
  381.      *
  382.      * Purpose:
  383.      *
  384.      *     Notification that reconfiguring the server is done.
  385.      */
  386.     STDMETHOD(ReconfigServerDone)   (THIS_
  387.     PN_RESULT res,
  388.     IRMABuffer** pInfo,
  389.     UINT32 ulNumInfo) PURE;
  390. };
  391. /*
  392.  * 
  393.  *  Interface:
  394.  *
  395.  * IRMAServerReconfigNotification
  396.  *
  397.  *  Purpose:
  398.  *
  399.  * Register with the server that you want notification when a reconfig
  400.  *  request comes in and want/need to take part in the reconfiguration.  This
  401.  *  is used when you have configuration info outside the server config file
  402.  *  which needs to be re-initialized.
  403.  *
  404.  *
  405.  *  IID_IRMAServerReconfigNotification:
  406.  *
  407.  * {00000007-0901-11d1-8B06-00A024406D59}
  408.  *
  409.  */
  410. DEFINE_GUID(IID_IRMAServerReconfigNotification, 0x00000007, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  411.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  412. #undef  INTERFACE
  413. #define INTERFACE   IRMAServerReconfigNotification
  414. DECLARE_INTERFACE_(IRMAServerReconfigNotification, IUnknown)
  415. {
  416.     /*
  417.      * IUnknown methods
  418.      */
  419.     STDMETHOD(QueryInterface) (THIS_
  420. REFIID riid,
  421. void** ppvObj) PURE;
  422.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  423.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  424.     /************************************************************************
  425.      * IRMAServerReconfigNotification::WantReconfigNotification
  426.      *
  427.      * Purpose:
  428.      *
  429.      *     Tell the server that you want reconfig notification.
  430.      */
  431.     STDMETHOD(WantReconfigNotification) (THIS_
  432. IRMAWantServerReconfigNotification* pResponse) PURE;
  433.     
  434.     /************************************************************************
  435.      * IRMAServerReconfigNotification::CancelReconfigNotification
  436.      *
  437.      * Purpose:
  438.      *
  439.      *     Tell the server that you no longer want reconfig notification.
  440.      */
  441.     STDMETHOD(CancelReconfigNotification)   (THIS_
  442. IRMAWantServerReconfigNotification* pResponse) PURE;
  443. };
  444. /*
  445.  * 
  446.  *  Interface:
  447.  *
  448.  * IRMAWantServerReconfigNotification
  449.  *
  450.  *  Purpose:
  451.  *
  452.  * Tell user that the server got a reconfig request and it is time to
  453.  *  do your reconfiguration.  NOTE: You should not need this if all of your
  454.  *  configuration is stored in the config file; that is taken care of through
  455.  *  IRMAActiveRegistry.
  456.  *
  457.  *  IID_IRMAWantServerReconfigNotification:
  458.  *
  459.  * {00000008-0901-11d1-8B06-00A024406D59}
  460.  *
  461.  */
  462. DEFINE_GUID(IID_IRMAWantServerReconfigNotification, 0x00000008, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  463.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  464. #undef  INTERFACE
  465. #define INTERFACE   IRMAWantServerReconfigNotification
  466. DECLARE_INTERFACE_(IRMAWantServerReconfigNotification, IUnknown)
  467. {
  468.     /*
  469.      * IUnknown methods
  470.      */
  471.     STDMETHOD(QueryInterface) (THIS_
  472. REFIID riid,
  473. void** ppvObj) PURE;
  474.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  475.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  476.     /************************************************************************
  477.      * IRMAWantServerReconfigNotification::ServerReconfig
  478.      *
  479.      * Purpose:
  480.      *
  481.      *     Notify user that a server reconfig request had come in and it
  482.      * is now your turn to do external (not server config) reconfiguration.*
  483.      */
  484.     STDMETHOD(ServerReconfig) (THIS_
  485. IRMAReconfigServerResponse* pResponse) PURE;
  486. };
  487. #endif /*_RMACOMM_H_*/