hxlvpix.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:17k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: RCSL 1.0/RPSL 1.0
  3.  *
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
  5.  *
  6.  * The contents of this file, and the files included with this file, are
  7.  * subject to the current version of the RealNetworks Public Source License
  8.  * Version 1.0 (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the RealNetworks Community Source License Version 1.0
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
  12.  * in which case the RCSL will apply. You may also obtain the license terms
  13.  * directly from RealNetworks.  You may not use this file except in
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or
  16.  * RCSL for the rights, obligations and limitations governing use of the
  17.  * contents of the file.
  18.  *
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the
  20.  * developer of the Original Code and owns the copyrights in the portions
  21.  * it created.
  22.  *
  23.  * This file, and the files included with this file, is distributed and made
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  28.  *
  29.  * Technology Compatibility Kit Test Suite(s) Location:
  30.  *    http://www.helixcommunity.org/content/tck
  31.  *
  32.  * Contributor(s):
  33.  *
  34.  * ***** END LICENSE BLOCK ***** */
  35. /*
  36.  *  RealPix live encoder interfaces
  37.  *
  38.  */
  39. #ifndef _HXLVPIX_H
  40. #define _HXLVPIX_H
  41. /*
  42.  * PixInitInfo
  43.  *
  44.  * This struct contains initialization information
  45.  * and is passed in in the IHXLiveRealPix::StartEncoder()
  46.  * method. All of the members of this struct are input variables.
  47.  */
  48. typedef struct HXEXPORT_CLASS _PixInitInfo
  49. {
  50.     UINT32  m_ulStructLength;       /* length in bytes of this structure */
  51.     char   *m_pServerAddress;       /* name or ip address of server */
  52.     UINT32  m_ulServerPort;         /* pn-encoder port on server */
  53.     char   *m_pUsername;            /* username for authentication on server */
  54.     char   *m_pPassword;            /* password for authentication on server */
  55.     char   *m_pFilename;            /* filename which clients should open */
  56.     char   *m_pTitle;               /* title of live presentation */
  57.     char   *m_pAuthor;              /* author of live presentation */
  58.     char   *m_pCopyright;           /* copyright on live presentation */
  59.     UINT32  m_ulBitrate;            /* bitrate of realpix stream */
  60.     UINT32  m_ulMaxFps;             /* max frames per second of effects */
  61.     UINT32  m_ulDisplayWidth;       /* display width in pixels */
  62.     UINT32  m_ulDisplayHeight;      /* display height in pixels */
  63.     BOOL    m_bPreserveAspect;      /* preserve aspect ratio by default? */
  64.     char   *m_pDefaultURL;          /* default URL to send browser to when clicked */
  65.     UINT32  m_ulNumImageCodecs;     /* number of image codecs used in this stream */
  66.     char  **m_ppImageCodec;         /* string names of codecs */
  67.     UINT32  m_ulNumEffectPackages;  /* number of external effect packages used */
  68.     char  **m_ppEffectPackage;      /* string names of effect packages*/
  69. }
  70. PixInitInfo;
  71. /*
  72.  * PixImageInfo
  73.  *
  74.  * This struct contains all the information for images which
  75.  * should be sent down the stream. This struct is used in the 
  76.  * IHXLiveRealPix::InitImage() method.
  77.  */
  78. typedef struct HXEXPORT_CLASS _PixImageInfo
  79. {
  80.     UINT32  m_ulStructLength;      /* Input:  size of struct */
  81.     BYTE   *m_pImageBuffer;        /* Input:  buffer holding image data */
  82.     UINT32  m_ulImageBufferSize;   /* Input:  size of image buffer */
  83.     char   *m_pImageCodec;         /* Input:  image codec to be used */
  84.     UINT32  m_ulHandle;            /* Output: image handle */
  85.     UINT32  m_ulNumPackets;        /* Output: number of packets image will be sent */
  86.     UINT32  m_ulTimeToSend;        /* Output: milliseconds required to send image */
  87. }
  88. PixImageInfo;
  89. #define EFFECT_FILL           0
  90. #define EFFECT_FADEIN         1
  91. #define EFFECT_FADEOUT        2
  92. #define EFFECT_CROSSFADE      3
  93. #define EFFECT_WIPE           4
  94. #define EFFECT_VIEWCHANGE     5
  95. #define EFFECT_EXTERNAL       6
  96. #define EFFECT_ANIMATE        7
  97. #define WIPE_DIRECTION_UP     0
  98. #define WIPE_DIRECTION_DOWN   1
  99. #define WIPE_DIRECTION_LEFT   2
  100. #define WIPE_DIRECTION_RIGHT  3
  101. #define WIPE_TYPE_NORMAL      0
  102. #define WIPE_TYPE_PUSH        1
  103. /*
  104.  * PixEffectInfo
  105.  *
  106.  * This struct contains all the information about the effect which 
  107.  * the RealPix renderer should perform. This struct is used in the
  108.  * IHXLiveRealPix::SendEffect() method.
  109.  */
  110. typedef struct HXEXPORT_CLASS _PixEffectInfo
  111. {
  112.     UINT32  m_ulStructLength;      /* Input:  Length in bytes of this struct */
  113.     BYTE    m_ucEffectType;        /* Input:  Effect Type: EFFECT_FILL, EFFECT_FADEIN, etc. */
  114.     UINT32  m_ulStart;             /* Input:  Start time in milliseconds of effect */
  115.     UINT32  m_ulDuration;          /* Input:  Duration in milliseconds of effect */
  116.     UINT32  m_ulTarget;            /* Input:  Handle of image to perform effect on */
  117.     UINT32  m_ulSrcX;              /* Input:  Horizontal offset of source rectangle */
  118.     UINT32  m_ulSrcY;              /* Input:  Vertical offset of source rectangle */
  119.     UINT32  m_ulSrcW;              /* Input:  Width of source rectangle */
  120.     UINT32  m_ulSrcH;              /* Input:  Height of source rectangle */
  121.     UINT32  m_ulDstX;              /* Input:  Horizontal offset of destination rectangle */
  122.     UINT32  m_ulDstY;              /* Input:  Vertical offset of destination rectangle */
  123.     UINT32  m_ulDstW;              /* Input:  Width of destination rectangle */
  124.     UINT32  m_ulDstH;              /* Input:  Height of destination rectangle */
  125.     UINT32  m_ulMaxFps;            /* Input:  Max frames per second for this effect */
  126.     BOOL    m_bAspectFlag;         /* Input:  TRUE: preserve aspect on this effect; FALSE: don't preserve */
  127.     BYTE    m_ucRed;               /* Input:  Red component of fill or fadeout color */
  128.     BYTE    m_ucGreen;             /* Input:  Green component of fill or fadeout color */
  129.     BYTE    m_ucBlue;              /* Input:  Blue component of fill or fadeout color */
  130.     BYTE    m_ucWipeDirection;     /* Input:  WIPE_DIRECTION_xxx, where xxx is UP, DOWN, LEFT, or RIGHT */
  131.     BYTE    m_ucWipeType;          /* Input:  WIPE_TYPE_NORMAL or WIPE_TYPE_PUSH */
  132.     char   *m_pURL;                /* Input:  URL for this effect */
  133.     char   *m_pExtPackage;         /* Input:  Name of external effect package */
  134.     char   *m_pExtName;            /* Input:  Name of external effect within the package */
  135.     char   *m_pExtData;            /* Input   Opaque string data for external effect */
  136.     char   *m_pExtFile;            /* Input:  File contents of external effect data */
  137.     BOOL    m_bDiscardImage;       /* Input:  TRUE: discard image after doing effect; FALSE: don't discard */
  138.     BOOL    m_bDisplayImmediately; /* Input:  FALSE: obey start time; TRUE: do effect immediately */
  139. UINT32  m_ulHandle;            /* Output: Handle by which effect will be referred to */
  140. }
  141. PixEffectInfo;
  142. /*
  143.  * Forward declarations of some interfaces defined here.
  144.  */
  145. typedef _INTERFACE IHXLiveRealPix         IHXLiveRealPix;
  146. typedef _INTERFACE IHXLiveRealPixResponse IHXLiveRealPixResponse;
  147. typedef _INTERFACE IHXLiveRealPixResend   IHXLiveRealPixResend;
  148. /*
  149.  * Forward declarations of interfaces used here
  150.  */
  151. typedef _INTERFACE IHXValues              IHXValues;
  152. /*
  153.  * Declaration of the DLL entry point
  154.  */
  155. STDAPI CreateLiveRealPix(IHXLiveRealPix **);
  156. typedef HX_RESULT (HXEXPORT_PTR FPRMCREATELIVEREALPIX)(IHXLiveRealPix **ppLiveRealPix);
  157. /****************************************************************************
  158.  * 
  159.  *  Interface:
  160.  * 
  161.  *  IHXLivePix
  162.  * 
  163.  *  Purpose:
  164.  * 
  165.  *  Asynchronous interface that allows an application to encode live RealPix
  166.  * 
  167.  *  IID_IHXLiveRealPix:
  168.  * 
  169.  *  {E7ADF466-477D-11d2-AA0C-0060972D23A7}
  170.  *
  171.  */
  172. DEFINE_GUID(IID_IHXLiveRealPix,  0xe7adf466, 0x477d, 0x11d2, 0xaa, 0xc, 0x0,
  173.             0x60, 0x97, 0x2d, 0x23, 0xa7);
  174. #undef  INTERFACE
  175. #define INTERFACE   IHXLiveRealPix
  176. DECLARE_INTERFACE_(IHXLiveRealPix, IUnknown)
  177. {
  178.     /*
  179.      *  IUnknown methods
  180.      */
  181.     STDMETHOD(QueryInterface)      (THIS_ REFIID riid, void **ppvObj) PURE;
  182.     STDMETHOD_(ULONG32,AddRef)     (THIS) PURE;
  183.     STDMETHOD_(ULONG32,Release)    (THIS) PURE;
  184.     /*
  185.      *  IHXLiveRealPix methods
  186.      */
  187.     /*
  188.      * StartEncoder() must be called before anything else and a pointer to
  189.      * an IHXLiveRealPixResponse interface must be passed in. The encoder will
  190.      * respond to this call asynchronously with IHXLiveRealPixResponse::EncoderStarted().
  191.      */
  192.     STDMETHOD(StartEncoder)        (THIS_ PixInitInfo             *pInitInfo,
  193.                                           IHXLiveRealPixResponse *pResponse) PURE;
  194.     /*
  195.      * InitImage() is called to prep an image for being sent. It returns several useful
  196.      * pieces of information which the caller can make use of: the handle to refer to
  197.      * the image in SendImage(), the number of packets this image will be broken up into,
  198.      * and the time required to send this image in milliseconds. Note that InitImage()
  199.      * simply breaks the image up into packets - nothing has been sent to the server yet.
  200.      * This is not an asynchronous call - all processing has finished by the time this
  201.      * call returns.
  202.      */
  203.     STDMETHOD(InitImage)           (THIS_ PixImageInfo *pImageInfo) PURE;
  204.     /*
  205.      * SendImage() tranfers the all the packets for the image referred to by ulImageHandle
  206.      * into the packet send queue. Further calls to Process() will result in these
  207.      * packets being sent to the RealServer. When all the packets for this image have
  208.      * been sent, the encoder will respond with IHXLiveRealPixResponse::ImageSent().
  209.      */
  210.     STDMETHOD(SendImage)           (THIS_ UINT32 ulImageHandle) PURE;
  211.     /*
  212.      * SendEffect() creates an effect packet with the information contained in
  213.      * the PixEffectInfo struct and immediately adds this packet to the packet
  214.      * send queue. Further calls to Process() will result in this packet being 
  215.      * sent to the server. A handle is returned in the PixEffectInfo struct by
  216.      * which this effect can later be identified. When the effect has been
  217.      * sent to the server, the encoder will respond with
  218.      * IHXLiveRealPixResponse::EffectSent().
  219.      */
  220.     STDMETHOD(SendEffect)          (THIS_ PixEffectInfo *pEffectInfo) PURE;
  221.     /*
  222.      * StopEncoder() may be called at any time after calling StartEncoder().
  223.      * This tells the encoder that no more images of effects are going to
  224.      * be sent to the encoder. The encoder shuts down the connection to
  225.      * the server and responds with IHXLiveRealPixResponse::EncoderStopped().
  226.      */
  227.     STDMETHOD(StopEncoder)         (THIS) PURE;
  228.     /*
  229.      * GetTime() returns the time in milliseconds since the encoder library was initialized.
  230.      */
  231.     STDMETHOD_(UINT32, GetTime)    (THIS) PURE;
  232.     /*
  233.      * Process() must be called in order to give the library time to send
  234.      * packets to the server. It should be called very often in between SendImage()
  235.      * and ImageSent(), as well as between SendEffect() and EffectSent(). Other
  236.      * that these times, it should be called every 3-5 seconds.
  237.      */
  238.     STDMETHOD(Process)             (THIS) PURE;
  239. };
  240. /****************************************************************************
  241.  * 
  242.  *  Interface:
  243.  * 
  244.  *  IHXLiveRealPixResponse
  245.  * 
  246.  *  Purpose:
  247.  * 
  248.  *  Asynchronous response interface that allows an application to
  249.  *  encode live RealPix
  250.  * 
  251.  *  IID_IHXLiveRealPixResponse:
  252.  * 
  253.  *  {E7ADF46C-477D-11d2-AA0C-0060972D23A7}
  254.  *
  255.  */
  256. DEFINE_GUID(IID_IHXLiveRealPixResponse, 0xe7adf46c, 0x477d, 0x11d2, 0xaa, 0xc, 0x0,
  257.             0x60, 0x97, 0x2d, 0x23, 0xa7);
  258. #undef  INTERFACE
  259. #define INTERFACE   IHXLiveRealPixResponse
  260. DECLARE_INTERFACE_(IHXLiveRealPixResponse, IUnknown)
  261. {
  262.     /*
  263.      *  IUnknown methods
  264.      */
  265.     STDMETHOD(QueryInterface)      (THIS_ REFIID riid, void **ppvObj) PURE;
  266.     STDMETHOD_(ULONG32,AddRef)     (THIS) PURE;
  267.     STDMETHOD_(ULONG32,Release)    (THIS) PURE;
  268.     /*
  269.      *  IHXLiveRealPixResponse methods
  270.      */
  271.     /*
  272.      * EncoderStarted() is the asynchronous response to StartEncoder(). The status
  273.      * argument tells whether initializing the server was successful or not, and the pszHeaderString
  274.      * argument returns the text string returned by the RealServer.
  275.      */
  276.     STDMETHOD(EncoderStarted)      (THIS_ HX_RESULT status, const char *pszHeaderString) PURE;
  277.     /*
  278.      * ImageSent() is the asynchronous response to SendImage(). The ulImageHandle argument
  279.      * identifies which image has just completed sending to the server, and the status 
  280.      * argument tells whether or not the send was successful or not.
  281.      */
  282.     STDMETHOD(ImageSent)           (THIS_ HX_RESULT status, UINT32 ulImageHandle) PURE;
  283.     /*
  284.      * EffectSent() is the asynchronous response to SendEffect(). The ulEffectHandle argument
  285.      * identifies which effect has just completed sending to the server, and the status 
  286.      * argument tells whether or not the send was successful or not.
  287.      */
  288.     STDMETHOD(EffectSent)          (THIS_ HX_RESULT status, UINT32 ulEffectHandle) PURE;
  289.     /*
  290.      * EncoderStopped() is the asynchronous response to StopEncoder(). The status
  291.      * argument tells whether or not the stopping of the encoder was successful.
  292.      * If the status is HXR_OK, then the application can then shut down or turn
  293.      * around and call StartEncoder() again.
  294.      */
  295.     STDMETHOD(EncoderStopped)      (THIS_ HX_RESULT status) PURE;
  296.     /*
  297.      * ErrorOccurred() is called when the encoder receives an error from the RealServer.
  298.      * Depending upon the severity of the error, the RealServer may then shut down
  299.      * the encoder and an EncoderStopped() call would be made. Therefore, the
  300.      * application should be ready to handle an EncoderStopped() call at any time.
  301.      * If an error occurs, it's probably a good idea to call StopEncoder() and shut
  302.      * down the encoder from the application side anyway.
  303.      */
  304.     STDMETHOD(ErrorOccurred)       (THIS_ const UINT8   unSeverity,
  305.                                           const ULONG32 ulHXCode,
  306.                                           const ULONG32 ulUserCode,
  307.                                           const char   *pszUserString,
  308.                                           const char   *pszMoreInfoURL) PURE;
  309. };
  310. /****************************************************************************
  311.  * 
  312.  *  Interface:
  313.  * 
  314.  *  IHXLiveRealPixResend
  315.  * 
  316.  *  Purpose:
  317.  * 
  318.  *  Allows re-sending and releasing of images with IHXLiveRealPix
  319.  * 
  320.  *  IID_IHXLiveRealPixResend:
  321.  * 
  322.  *  {D814DA11-8B02-11D3-8AF3-00C0F030B4E5}
  323.  */
  324. DEFINE_GUID(IID_IHXLiveRealPixResend, 0xd814da11, 0x8b02, 0x11d3, 0x8a, 0xfe, 0x0,
  325.             0xc0, 0xf0, 0x30, 0xb4, 0xe5);
  326. #undef  INTERFACE
  327. #define INTERFACE   IHXLiveRealPixResend
  328. DECLARE_INTERFACE_(IHXLiveRealPixResend, IUnknown)
  329. {
  330.     /*
  331.      *  IUnknown methods
  332.      */
  333.     STDMETHOD(QueryInterface)      (THIS_ REFIID riid, void** ppvObj) PURE;
  334.     STDMETHOD_(ULONG32,AddRef)     (THIS) PURE;
  335.     STDMETHOD_(ULONG32,Release)    (THIS) PURE;
  336.     /*
  337.      *  IHXLiveRealPixResend methods
  338.      */
  339.     /*
  340.      * InitResend() informs the encoder that from now on, after an
  341.      * image is sent with SendImage() it should not be discarded 
  342.      * but held in the encoder until ReleaseImage() is called().
  343.      */
  344.     STDMETHOD(InitResend)   (THIS_ IHXValues* pOptions) PURE;
  345.     /*
  346.      * ReleaseImage() informs the encoder that the application no longer
  347.      * intends to call SendImage() on the image referenced by ulImageHandle
  348.      * and that it can discard the image. Further calls to SendImage(x) will
  349.      * return HXR_UNKNOWN_IMAGE after ReleaseImage(x) has been called.
  350.      * ReleaseImage(x) will return HXR_UNKNOWN_IMAGE if x is an unknown handle.
  351.      */
  352.     STDMETHOD(ReleaseImage) (THIS_ UINT32 ulImageHandle) PURE;
  353.     /*
  354.      * DumpAllQueuedPackets() clears any packets currently waiting to be
  355.      * sent to the server. These packets were put on the send queue by
  356.      * either IHXLiveRealPix::SendImage() or IHXLiveRealPix::SendEffect().
  357.      */
  358.     STDMETHOD(DumpAllQueuedPackets) (THIS) PURE;
  359. };
  360. #endif