paramset.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*************************************************************************
  2. This software module was originally developed by 
  3. Simon Winder (swinder@microsoft.com), Microsoft Corporation
  4. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  5. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  6. as specified by the MPEG-4 Video. 
  7. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  8. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  9. Those intending to use this software module in hardware or software products are advised that
  10. its use may infringe existing patents. The original developer of this software module and his/her
  11. company, the subsequent editors and their companies, and ISO/IEC have no liability for use of
  12. this software module or modifications thereof in an implementation. Copyright is not released
  13. for non MPEG-4 Video conforming products. Microsoft retains full right to use the code for
  14. his/her own purpose, assign or donate the code to a third party and to inhibit third parties
  15. from using the code for non MPEG-4 Video conforming products. This copyright notice must be
  16. included in all copies or derivative works. 
  17. Copyright (c) 1996, 1997.
  18. *************************************************************************/
  19. #define PAR_HASHSIZE 31
  20. #define TOKEN_SIZE 4096
  21. #define ERES_OK 0
  22. #define ERES_PARAMS 1
  23. #define ERES_NOOBJ 2
  24. #define ERES_MEMORY 3
  25. #define ERES_EOF 4
  26. #define ERES_FORMAT 5
  27. typedef int Int;
  28. typedef double Double;
  29. typedef int Bool;
  30. #define FALSE 0
  31. #define TRUE 1
  32. ////////////////////////////////////////////////////////////////////////
  33. // CxParamSet
  34. ////////////////////////////////////////////////////////////////////////
  35. typedef enum { PS_DOUBLE, PS_STRING, PS_ARRAY } TxParamType;
  36. typedef struct {
  37. TxParamType tType;
  38. Int iSize;
  39. union {
  40. Double dData;
  41. char *pchData;
  42. Double *pdData;
  43. };
  44. } TxParamValue;
  45. typedef struct TagTxParamEntry {
  46. char *pchName;
  47. Int iIndex;
  48. TxParamValue tValue;
  49. TagTxParamEntry *pPrevCreate;
  50. TagTxParamEntry *pNextCreate;
  51. TagTxParamEntry *pPrevHash;
  52. TagTxParamEntry *pNextHash;
  53. } TxParamEntry;
  54. class CxParamSet
  55. {
  56. public:
  57. CxParamSet();
  58. ~CxParamSet();
  59. Int GetParam(const char *pchName, Int iIndex, TxParamValue *ptValueRtn);
  60. Int SetParam(const char *pchName, Int iIndex, const TxParamValue *ptValue);
  61. Int DeleteParam(const char *pchName, Int iIndex);
  62. void StartEnum();
  63. Bool NextEnum(char **ppchNameRtn, Int *piIndexRtn, TxParamValue *ptValueRtn = NULL);
  64. void DeleteAll();
  65. Int GetDouble(char *pchName, Int iIndex, Double *pdValue);
  66. Int GetString(char *pchName, Int iIndex, char **ppchVal);
  67. Int GetArray(char *pchName, Int iIndex, Double **pdValue, Int *piSize);
  68. Int Load(FILE *fp, Int *piErrLine);
  69. void Dump(FILE *fp);
  70. protected:
  71. void DeleteHashEntry(TxParamEntry *pEntry, Int iHash);
  72. TxParamEntry *FindHashEntry(const char *pchName, Int iIndex, Int *piHashRtn);
  73. Int GetToken(char *pchBuf);
  74. Int SkipComment();
  75. Int SkipSpace();
  76. Int ReadValue(char *pchBuf, TxParamValue *ptVal);
  77. Int GetC();
  78. void UnGetC(Int ch);
  79. TxParamEntry *m_pCurrentEnum;
  80. TxParamEntry *m_pCreateListTail;
  81. TxParamEntry *m_rgpHashList[PAR_HASHSIZE];
  82. Int *m_piErrLine;
  83. FILE *m_fp;
  84. };
  85. #define SetPVDouble(pv, val) do { (pv).tType = PS_DOUBLE; (pv).dData = val; } while(0)
  86. #define SetPVString(pv, val) do { (pv).tType = PS_STRING; (pv).pchData = val; } while(0)
  87. #define SetPVArray(pv, val, sz) do { (pv).tType = PS_ARRAY; (pv).pdData = val; (pv).iSize = sz; } while(0)