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

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. #ifndef _SMLFFPLN_H_
  36. #define _SMLFFPLN_H_
  37. #define STREAM_MAJOR_VER    0
  38. #define STREAM_MINOR_VER    0
  39. #define STREAM_RELEASE     0
  40. #define STREAM_BUILD     0
  41. #define CONTENT_MAJOR_VER   0
  42. #define CONTENT_MINOR_VER   0
  43. #define CONTENT_RELEASE     0
  44. #define CONTENT_BUILD     0
  45. #include "baseobj.h"
  46. /////////////////////////////////////////////////////////////////////////////
  47. // 
  48. //  Class:
  49. //
  50. //   CSmilFileFormat
  51. //
  52. //  Purpose:
  53. //
  54. //   SMIL implementation of a basic file format.
  55. //
  56. class CSmilElement;
  57. class CSmilPresentation;
  58. class CSmilFileFormat : public CHXBaseCountingObject,
  59.                         public IHXPlugin, 
  60. public IHXFileFormatObject, 
  61. public IHXFileResponse,
  62. public IHXPendingStatus,
  63. public IHXInterruptSafe,
  64. public IHXThreadSafeMethods
  65. {
  66. private:
  67.     LONG32 m_lRefCount;
  68.     IUnknown* m_pContext;
  69.     IHXFileObject* m_pFileObject;
  70.     IHXFormatResponse* m_pFFResponse;
  71.     BOOL m_bHeaderSent;
  72.     BOOL m_bChannelInit;
  73.     BOOL m_bSentFirstChannel;
  74.     BOOL m_bSourceInit;
  75.     
  76.     BOOL m_bLogErrors;
  77.     
  78.     UINT32 m_ulCurrentTime;
  79.     IHXRequest* m_pRequest;
  80.     IHXCommonClassFactory* m_pCommonClassFactory;
  81.     
  82.     struct PacketData
  83.     {
  84. IHXBuffer* pBuffer;
  85. // position in buffer to insert total number of packets.
  86. // there will be a 6 0's space for the number...
  87. char*     pNumPos;  
  88.     };
  89.     enum FileState
  90.     {
  91. InContent, InCDATA, InDTD, InDTDMarkup, InTagName, InTag, 
  92. InBeginAttributeName, InAttributeName, InEndAttributeName,
  93. InBeginAttributeValue, InAttributeValue, InComment
  94.     } m_fileState;
  95.     enum SMILFileVersion
  96.     {
  97. // /These are for when *no* default namespace is declared:
  98. SMILFileVersionSmilBeta10, SMILFileVersionSmil10,
  99. // /For when actual SMIL 1.0 default namespace is declared.
  100. SMILFileVersionSmil10Strict,
  101. // /For pre-rec  (e.g., CR and PR) namespaces:
  102. SMILFileVersionSmil20PreRec,
  103. SMILFileVersionSmil20, SMILFileVersionUnknown
  104.     } m_smilFileVersion;
  105.     char m_cQuote;
  106.     PacketData* m_pCurrentPacketData;
  107.     UINT32 m_ulCurrentBufferPos;
  108.     CHXPtrArray* m_pArrayOfPackets;
  109.     UINT32 m_ulPacketCount;
  110.     UINT32 m_ulCurrentPacket;
  111.     UINT32 m_ulStreamVersion;
  112.     UINT32 m_ulContentVersion;
  113.     IHXBuffer* m_pStartOfFile;
  114.     typedef enum
  115.     {
  116. Ready, InitPending, ReadPending, GetStreamHeaderSeekPending,
  117. GetStreamHeaderReadPending, GetPacketSeekPending, GetPacketReadPending
  118.     }
  119.     SmilState;
  120.     SmilState m_state;
  121.     static const char* const zm_pDescription;
  122.     static const char* const zm_pCopyright;
  123.     static const char* const zm_pMoreInfoURL;
  124.     static const char* const zm_pFileMimeTypes[];
  125.     static const char* const zm_pStreamMimeTypes[];
  126.     static const char* const zm_pFileExtensions[];
  127.     static const char* const zm_pFileOpenNames[];
  128.     // /This parses the start of the file and looks for a namespace or
  129.     // namespaces and, from them, determines the "file version":
  130.     HX_RESULT GetSMILFileVersion();
  131.     HX_RESULT BreakUpBuffer(IHXBuffer* pBuffer);
  132.     HX_RESULT UpdateErrorCaching();
  133.     HX_RESULT ReportError(HX_RESULT errID, const char* errStr);
  134.     ~CSmilFileFormat();
  135.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  136. public:
  137.     CSmilFileFormat();
  138.     // *** IUnknown methods ***
  139.     STDMETHOD(QueryInterface) (THIS_
  140. REFIID riid,
  141. void** ppvObj);
  142.     STDMETHOD_(ULONG32,AddRef) (THIS);
  143.     STDMETHOD_(ULONG32,Release) (THIS);
  144.     // *** IHXPlugin methods ***
  145.     /************************************************************************
  146.      * Method:
  147.      *     IHXPlugin::GetPluginInfo
  148.      * Purpose:
  149.      *     Returns the basic information about this plugin. Including:
  150.      *
  151.      *     bLoadMultiple whether or not this plugin DLL can be loaded
  152.      * multiple times. All File Formats must set
  153.      * this value to TRUE.
  154.      *     pDescription which is used in about UIs (can be NULL)
  155.      *     pCopyright which is used in about UIs (can be NULL)
  156.      *     pMoreInfoURL which is used in about UIs (can be NULL)
  157.      */
  158.     STDMETHOD(GetPluginInfo) (THIS_
  159. REF(BOOL)  /*OUT*/ bLoadMultiple,
  160. REF(const char*) /*OUT*/ pDescription,
  161. REF(const char*) /*OUT*/ pCopyright,
  162. REF(const char*) /*OUT*/ pMoreInfoURL,
  163. REF(ULONG32)  /*OUT*/ ulVersionNumber
  164. );
  165.     /************************************************************************
  166.      * Method:
  167.      *     IHXPlugin::InitPlugin
  168.      * Purpose:
  169.      *     Initializes the plugin for use. This interface must always be
  170.      *     called before any other method is called. This is primarily needed 
  171.      *     so that the plugin can have access to the context for creation of
  172.      *     IHXBuffers and IMalloc.
  173.      */
  174.     STDMETHOD(InitPlugin)   (THIS_
  175.     IUnknown*   /*IN*/  pContext);
  176.     // *** IHXFileFormatObject methods ***
  177.     /************************************************************************
  178.      * Method:
  179.      *     IHXFileFormatObject::GetFileFormatInfo
  180.      * Purpose:
  181.      *     Returns information vital to the instantiation of file format 
  182.      *     plugins.
  183.      */
  184.     STDMETHOD(GetFileFormatInfo)    
  185. (THIS_
  186. REF(const char**) /*OUT*/ pFileMimeTypes,
  187. REF(const char**) /*OUT*/ pFileExtensions,
  188. REF(const char**) /*OUT*/ pFileOpenNames);
  189.     /************************************************************************
  190.      * Method:
  191.      *     IHXFileFormatObject::InitFileFormat
  192.      * Purpose:
  193.      *     Initializes the File Format aspects of the plugin.
  194.      *     plugins.
  195.      */
  196.     STDMETHOD(InitFileFormat)
  197. (THIS_
  198. IHXRequest* /*IN*/ pRequest, 
  199. IHXFormatResponse* /*IN*/ pFormatResponse,
  200. IHXFileObject* /*IN*/  pFileObject);
  201.     STDMETHOD(Close) (THIS);
  202.     /////////////////////////////////////////////////////////////////////////
  203.     //  Method:
  204.     //   IHXFileFormatObject::GetFileHeader
  205.     //  Purpose:
  206.     //   Called by controller to ask the file format for the number of
  207.     //   headers in the file. The file format should call the 
  208.     //   IHXFileFormatSession::StreamCountReady() for the IHXFileFormat-
  209.     //   Session object that was passed in during initialization, when the
  210.     //   header count is available.
  211.     //
  212.     STDMETHOD(GetFileHeader) (THIS);
  213.     /////////////////////////////////////////////////////////////////////////
  214.     //  Method:
  215.     //   IHXFileFormatObject::GetStreamHeader
  216.     //  Purpose:
  217.     //   Called by controller to ask the file format for the header for
  218.     //   a particular stream in the file. The file format should call 
  219.     //   IHXFileFormatSession::StreamHeaderReady() for the IHXFileFormatSession
  220.     //   object that was passed in during initialization, when the header
  221.     //   is available.
  222.     //
  223.     STDMETHOD(GetStreamHeader) (THIS_
  224. UINT16 unStreamNumber);
  225.     /////////////////////////////////////////////////////////////////////////
  226.     //  Method:
  227.     //   IHXFileFormatObject::GetPacket
  228.     //  Purpose:
  229.     //   Called by controller to ask the file format for the next packet
  230.     //   for a particular stream in the file. The file format should call 
  231.     //   IHXFileFormatSession::PacketReady() for the IHXFileFormatSession
  232.     //   object that was passed in during initialization, when the packet
  233.     //   is available.
  234.     //
  235.     STDMETHOD(GetPacket) (THIS_
  236. UINT16 unStreamNumber);
  237.     /////////////////////////////////////////////////////////////////////////
  238.     //  Method:
  239.     //   IHXFileFormatObject::Seek
  240.     //  Purpose:
  241.     //   Called by controller to tell the file format to seek to the 
  242.     //   nearest packet to the requested offset. The file format should 
  243.     //   call IHXFileFormatSession::SeekDone() for the IHXFileFormat-
  244.     //   Session object that was passed in during initialization, when 
  245.     //   the seek has completed.
  246.     //
  247.     STDMETHOD(Seek) (THIS_
  248. ULONG32 ulOffset);
  249.     // *** IHXFileResponse methods ***
  250.     /////////////////////////////////////////////////////////////////////////
  251.     //  Method:
  252.     //    IHXFileResponse::InitDone
  253.     //  Purpose:
  254.     //    Notification interface provided by users of the IHXFileObject
  255.     //    interface. This method is called by the IHXFileObject when the
  256.     //    initialization of the file is complete, and the Mime type is
  257.     //    available for the request file. If the URL is not valid for the
  258.     //    file system, the status HXR_FAILED should be returned,
  259.     //    with a mime type of NULL. If the URL is valid but the mime type
  260.     //    is unknown, then the status HXR_OK should be returned with
  261.     //    a mime type of NULL.
  262.     //
  263.     STDMETHOD(InitDone)     (THIS_
  264.     HX_RESULT     status);
  265.     /////////////////////////////////////////////////////////////////////////
  266.     //  Method:
  267.     //   IHXFileResponse::CloseDone
  268.     //  Purpose:
  269.     //   Notification interface provided by users of the IHXFileObject
  270.     //   interface. This method is called by the IHXFileObject when the
  271.     //   close of the file is complete.
  272.     //
  273.     STDMETHOD(CloseDone) (THIS_
  274. HX_RESULT status);
  275.     /////////////////////////////////////////////////////////////////////////
  276.     //  Method:
  277.     //   IHXFileResponse::ReadDone
  278.     //  Purpose:
  279.     //   Notification interface provided by users of the IHXFileObject
  280.     //   interface. This method is called by the IHXFileObject when the
  281.     //   last read from the file is complete and a buffer is available.
  282.     //
  283.     STDMETHOD(ReadDone) (THIS_ 
  284. HX_RESULT     status,
  285. IHXBuffer*     pBuffer);
  286.     /////////////////////////////////////////////////////////////////////////
  287.     //  Method:
  288.     //   IHXFileResponse::WriteDone
  289.     //  Purpose:
  290.     //   Notification interface provided by users of the IHXFileObject
  291.     //   interface. This method is called by the IHXFileObject when the
  292.     //   last write to the file is complete.
  293.     //
  294.     STDMETHOD(WriteDone) (THIS_ 
  295. HX_RESULT     status);
  296.     /////////////////////////////////////////////////////////////////////////
  297.     //  Method:
  298.     //   IHXFileResponse::SeekDone
  299.     //  Purpose:
  300.     //   Notification interface provided by users of the IHXFileObject
  301.     //   interface. This method is called by the IHXFileObject when the
  302.     //   last seek in the file is complete.
  303.     //
  304.     STDMETHOD(SeekDone) (THIS_ 
  305. HX_RESULT     status);
  306.     // IHXPendingStatus methods
  307.     /************************************************************************
  308.      * Method:
  309.      *     IHXPendingStatus::GetStatus
  310.      * Purpose:
  311.      *     Called by the user to get the current pending status from an object
  312.      */
  313.     STDMETHOD(GetStatus) (THIS_
  314. REF(UINT16) uStatusCode, 
  315. REF(IHXBuffer*) pStatusDesc, 
  316. REF(UINT16) ulPercentDone);
  317.     /*
  318.      * IHXInterruptSafe methods
  319.      */
  320.     /************************************************************************
  321.      * Method:
  322.      *     IHXInterruptSafe::IsInterruptSafe
  323.      * Purpose:
  324.      *     This is the function that will be called to determine if
  325.      *     interrupt time execution is supported.
  326.      */
  327.     STDMETHOD_(BOOL,IsInterruptSafe) (THIS) 
  328.      { return TRUE; };
  329.     /************************************************************************
  330.      * Method:
  331.      *     IHXThreadSafeMethods::IsThreadSafe
  332.      */
  333.     STDMETHOD_(UINT32, IsThreadSafe) (THIS);
  334. };
  335. #endif // _SMLFFPLN_H_