smlffpln.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:14k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: smlffpln.h,v 1.2.18.1 2004/07/09 01:57:20 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _SMLFFPLN_H_
  50. #define _SMLFFPLN_H_
  51. #define STREAM_MAJOR_VER    0
  52. #define STREAM_MINOR_VER    0
  53. #define STREAM_RELEASE     0
  54. #define STREAM_BUILD     0
  55. #define CONTENT_MAJOR_VER   0
  56. #define CONTENT_MINOR_VER   0
  57. #define CONTENT_RELEASE     0
  58. #define CONTENT_BUILD     0
  59. #include "baseobj.h"
  60. /////////////////////////////////////////////////////////////////////////////
  61. // 
  62. //  Class:
  63. //
  64. //   CSmilFileFormat
  65. //
  66. //  Purpose:
  67. //
  68. //   SMIL implementation of a basic file format.
  69. //
  70. class CSmilElement;
  71. class CSmilPresentation;
  72. class CSmilFileFormat : public CHXBaseCountingObject,
  73.                         public IHXPlugin, 
  74. public IHXFileFormatObject, 
  75. public IHXFileResponse,
  76. public IHXPendingStatus,
  77. public IHXInterruptSafe,
  78. public IHXThreadSafeMethods
  79. {
  80. private:
  81.     LONG32 m_lRefCount;
  82.     IUnknown* m_pContext;
  83.     IHXFileObject* m_pFileObject;
  84.     IHXFormatResponse* m_pFFResponse;
  85.     BOOL m_bHeaderSent;
  86.     BOOL m_bChannelInit;
  87.     BOOL m_bSentFirstChannel;
  88.     BOOL m_bSourceInit;
  89.     
  90.     BOOL m_bLogErrors;
  91.     
  92.     UINT32 m_ulCurrentTime;
  93.     IHXRequest* m_pRequest;
  94.     IHXCommonClassFactory* m_pCommonClassFactory;
  95.     
  96.     struct PacketData
  97.     {
  98. IHXBuffer* pBuffer;
  99. // position in buffer to insert total number of packets.
  100. // there will be a 6 0's space for the number...
  101. char*     pNumPos;  
  102.     };
  103.     enum FileState
  104.     {
  105. InContent, InCDATA, InDTD, InDTDMarkup, InTagName, InTag, 
  106. InBeginAttributeName, InAttributeName, InEndAttributeName,
  107. InBeginAttributeValue, InAttributeValue, InComment
  108.     } m_fileState;
  109.     enum SMILFileVersion
  110.     {
  111. // /These are for when *no* default namespace is declared:
  112. SMILFileVersionSmilBeta10, SMILFileVersionSmil10,
  113. // /For when actual SMIL 1.0 default namespace is declared.
  114. SMILFileVersionSmil10Strict,
  115. // /For pre-rec  (e.g., CR and PR) namespaces:
  116. SMILFileVersionSmil20PreRec,
  117. SMILFileVersionSmil20, SMILFileVersionUnknown
  118.     } m_smilFileVersion;
  119.     char m_cQuote;
  120.     PacketData* m_pCurrentPacketData;
  121.     UINT32 m_ulCurrentBufferPos;
  122.     CHXPtrArray* m_pArrayOfPackets;
  123.     UINT32 m_ulPacketCount;
  124.     UINT32 m_ulCurrentPacket;
  125.     UINT32 m_ulStreamVersion;
  126.     UINT32 m_ulContentVersion;
  127.     IHXBuffer* m_pStartOfFile;
  128.     typedef enum
  129.     {
  130. Ready, InitPending, ReadPending, GetStreamHeaderSeekPending,
  131. GetStreamHeaderReadPending, GetPacketSeekPending, GetPacketReadPending
  132.     }
  133.     SmilState;
  134.     SmilState m_state;
  135.     static const char* const zm_pDescription;
  136.     static const char* const zm_pCopyright;
  137.     static const char* const zm_pMoreInfoURL;
  138.     static const char* const zm_pFileMimeTypes[];
  139.     static const char* const zm_pStreamMimeTypes[];
  140.     static const char* const zm_pFileExtensions[];
  141.     static const char* const zm_pFileOpenNames[];
  142.     // /This parses the start of the file and looks for a namespace or
  143.     // namespaces and, from them, determines the "file version":
  144.     HX_RESULT GetSMILFileVersion();
  145.     HX_RESULT BreakUpBuffer(IHXBuffer* pBuffer);
  146.     HX_RESULT UpdateErrorCaching();
  147.     HX_RESULT ReportError(HX_RESULT errID, const char* errStr);
  148.     ~CSmilFileFormat();
  149.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  150. public:
  151.     CSmilFileFormat();
  152.     // *** IUnknown methods ***
  153.     STDMETHOD(QueryInterface) (THIS_
  154. REFIID riid,
  155. void** ppvObj);
  156.     STDMETHOD_(ULONG32,AddRef) (THIS);
  157.     STDMETHOD_(ULONG32,Release) (THIS);
  158.     // *** IHXPlugin methods ***
  159.     /************************************************************************
  160.      * Method:
  161.      *     IHXPlugin::GetPluginInfo
  162.      * Purpose:
  163.      *     Returns the basic information about this plugin. Including:
  164.      *
  165.      *     bLoadMultiple whether or not this plugin DLL can be loaded
  166.      * multiple times. All File Formats must set
  167.      * this value to TRUE.
  168.      *     pDescription which is used in about UIs (can be NULL)
  169.      *     pCopyright which is used in about UIs (can be NULL)
  170.      *     pMoreInfoURL which is used in about UIs (can be NULL)
  171.      */
  172.     STDMETHOD(GetPluginInfo) (THIS_
  173. REF(BOOL)  /*OUT*/ bLoadMultiple,
  174. REF(const char*) /*OUT*/ pDescription,
  175. REF(const char*) /*OUT*/ pCopyright,
  176. REF(const char*) /*OUT*/ pMoreInfoURL,
  177. REF(ULONG32)  /*OUT*/ ulVersionNumber
  178. );
  179.     /************************************************************************
  180.      * Method:
  181.      *     IHXPlugin::InitPlugin
  182.      * Purpose:
  183.      *     Initializes the plugin for use. This interface must always be
  184.      *     called before any other method is called. This is primarily needed 
  185.      *     so that the plugin can have access to the context for creation of
  186.      *     IHXBuffers and IMalloc.
  187.      */
  188.     STDMETHOD(InitPlugin)   (THIS_
  189.     IUnknown*   /*IN*/  pContext);
  190.     // *** IHXFileFormatObject methods ***
  191.     /************************************************************************
  192.      * Method:
  193.      *     IHXFileFormatObject::GetFileFormatInfo
  194.      * Purpose:
  195.      *     Returns information vital to the instantiation of file format 
  196.      *     plugins.
  197.      */
  198.     STDMETHOD(GetFileFormatInfo)    
  199. (THIS_
  200. REF(const char**) /*OUT*/ pFileMimeTypes,
  201. REF(const char**) /*OUT*/ pFileExtensions,
  202. REF(const char**) /*OUT*/ pFileOpenNames);
  203.     /************************************************************************
  204.      * Method:
  205.      *     IHXFileFormatObject::InitFileFormat
  206.      * Purpose:
  207.      *     Initializes the File Format aspects of the plugin.
  208.      *     plugins.
  209.      */
  210.     STDMETHOD(InitFileFormat)
  211. (THIS_
  212. IHXRequest* /*IN*/ pRequest, 
  213. IHXFormatResponse* /*IN*/ pFormatResponse,
  214. IHXFileObject* /*IN*/  pFileObject);
  215.     STDMETHOD(Close) (THIS);
  216.     /////////////////////////////////////////////////////////////////////////
  217.     //  Method:
  218.     //   IHXFileFormatObject::GetFileHeader
  219.     //  Purpose:
  220.     //   Called by controller to ask the file format for the number of
  221.     //   headers in the file. The file format should call the 
  222.     //   IHXFileFormatSession::StreamCountReady() for the IHXFileFormat-
  223.     //   Session object that was passed in during initialization, when the
  224.     //   header count is available.
  225.     //
  226.     STDMETHOD(GetFileHeader) (THIS);
  227.     /////////////////////////////////////////////////////////////////////////
  228.     //  Method:
  229.     //   IHXFileFormatObject::GetStreamHeader
  230.     //  Purpose:
  231.     //   Called by controller to ask the file format for the header for
  232.     //   a particular stream in the file. The file format should call 
  233.     //   IHXFileFormatSession::StreamHeaderReady() for the IHXFileFormatSession
  234.     //   object that was passed in during initialization, when the header
  235.     //   is available.
  236.     //
  237.     STDMETHOD(GetStreamHeader) (THIS_
  238. UINT16 unStreamNumber);
  239.     /////////////////////////////////////////////////////////////////////////
  240.     //  Method:
  241.     //   IHXFileFormatObject::GetPacket
  242.     //  Purpose:
  243.     //   Called by controller to ask the file format for the next packet
  244.     //   for a particular stream in the file. The file format should call 
  245.     //   IHXFileFormatSession::PacketReady() for the IHXFileFormatSession
  246.     //   object that was passed in during initialization, when the packet
  247.     //   is available.
  248.     //
  249.     STDMETHOD(GetPacket) (THIS_
  250. UINT16 unStreamNumber);
  251.     /////////////////////////////////////////////////////////////////////////
  252.     //  Method:
  253.     //   IHXFileFormatObject::Seek
  254.     //  Purpose:
  255.     //   Called by controller to tell the file format to seek to the 
  256.     //   nearest packet to the requested offset. The file format should 
  257.     //   call IHXFileFormatSession::SeekDone() for the IHXFileFormat-
  258.     //   Session object that was passed in during initialization, when 
  259.     //   the seek has completed.
  260.     //
  261.     STDMETHOD(Seek) (THIS_
  262. ULONG32 ulOffset);
  263.     // *** IHXFileResponse methods ***
  264.     /////////////////////////////////////////////////////////////////////////
  265.     //  Method:
  266.     //    IHXFileResponse::InitDone
  267.     //  Purpose:
  268.     //    Notification interface provided by users of the IHXFileObject
  269.     //    interface. This method is called by the IHXFileObject when the
  270.     //    initialization of the file is complete, and the Mime type is
  271.     //    available for the request file. If the URL is not valid for the
  272.     //    file system, the status HXR_FAILED should be returned,
  273.     //    with a mime type of NULL. If the URL is valid but the mime type
  274.     //    is unknown, then the status HXR_OK should be returned with
  275.     //    a mime type of NULL.
  276.     //
  277.     STDMETHOD(InitDone)     (THIS_
  278.     HX_RESULT     status);
  279.     /////////////////////////////////////////////////////////////////////////
  280.     //  Method:
  281.     //   IHXFileResponse::CloseDone
  282.     //  Purpose:
  283.     //   Notification interface provided by users of the IHXFileObject
  284.     //   interface. This method is called by the IHXFileObject when the
  285.     //   close of the file is complete.
  286.     //
  287.     STDMETHOD(CloseDone) (THIS_
  288. HX_RESULT status);
  289.     /////////////////////////////////////////////////////////////////////////
  290.     //  Method:
  291.     //   IHXFileResponse::ReadDone
  292.     //  Purpose:
  293.     //   Notification interface provided by users of the IHXFileObject
  294.     //   interface. This method is called by the IHXFileObject when the
  295.     //   last read from the file is complete and a buffer is available.
  296.     //
  297.     STDMETHOD(ReadDone) (THIS_ 
  298. HX_RESULT     status,
  299. IHXBuffer*     pBuffer);
  300.     /////////////////////////////////////////////////////////////////////////
  301.     //  Method:
  302.     //   IHXFileResponse::WriteDone
  303.     //  Purpose:
  304.     //   Notification interface provided by users of the IHXFileObject
  305.     //   interface. This method is called by the IHXFileObject when the
  306.     //   last write to the file is complete.
  307.     //
  308.     STDMETHOD(WriteDone) (THIS_ 
  309. HX_RESULT     status);
  310.     /////////////////////////////////////////////////////////////////////////
  311.     //  Method:
  312.     //   IHXFileResponse::SeekDone
  313.     //  Purpose:
  314.     //   Notification interface provided by users of the IHXFileObject
  315.     //   interface. This method is called by the IHXFileObject when the
  316.     //   last seek in the file is complete.
  317.     //
  318.     STDMETHOD(SeekDone) (THIS_ 
  319. HX_RESULT     status);
  320.     // IHXPendingStatus methods
  321.     /************************************************************************
  322.      * Method:
  323.      *     IHXPendingStatus::GetStatus
  324.      * Purpose:
  325.      *     Called by the user to get the current pending status from an object
  326.      */
  327.     STDMETHOD(GetStatus) (THIS_
  328. REF(UINT16) uStatusCode, 
  329. REF(IHXBuffer*) pStatusDesc, 
  330. REF(UINT16) ulPercentDone);
  331.     /*
  332.      * IHXInterruptSafe methods
  333.      */
  334.     /************************************************************************
  335.      * Method:
  336.      *     IHXInterruptSafe::IsInterruptSafe
  337.      * Purpose:
  338.      *     This is the function that will be called to determine if
  339.      *     interrupt time execution is supported.
  340.      */
  341.     STDMETHOD_(BOOL,IsInterruptSafe) (THIS) 
  342.      { return TRUE; };
  343.     /************************************************************************
  344.      * Method:
  345.      *     IHXThreadSafeMethods::IsThreadSafe
  346.      */
  347.     STDMETHOD_(UINT32, IsThreadSafe) (THIS);
  348. };
  349. #endif // _SMLFFPLN_H_