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

多媒体编程

开发平台:

Visual C++

  1. #ifndef f_FILTER_H
  2. #define f_FILTER_H
  3. #include <windows.h>
  4. // This is really dumb, but necessary to support VTbls in C++.
  5. struct FilterVTbls {
  6. void *pvtblVBitmap;
  7. };
  8. #ifdef VDEXT_MAIN
  9. struct FilterVTbls g_vtbls;
  10. #elif defined(VDEXT_NOTMAIN)
  11. extern struct FilterVTbls g_vtbls;
  12. #endif
  13. #define INITIALIZE_VTBLS ff->InitVTables(&g_vtbls)
  14. #include "VBitmap.h"
  15. //////////////////
  16. struct CScriptObject;
  17. //////////////////
  18. enum {
  19. FILTERPARAM_SWAP_BUFFERS = 0x00000001L,
  20. FILTERPARAM_NEEDS_LAST = 0x00000002L,
  21. };
  22. ///////////////////
  23. class VFBitmap;
  24. class FilterActivation;
  25. struct FilterFunctions;
  26. typedef int  (*FilterInitProc     )(FilterActivation *fa, const FilterFunctions *ff);
  27. typedef void (*FilterDeinitProc   )(FilterActivation *fa, const FilterFunctions *ff);
  28. typedef int  (*FilterRunProc      )(const FilterActivation *fa, const FilterFunctions *ff);
  29. typedef long (*FilterParamProc    )(FilterActivation *fa, const FilterFunctions *ff);
  30. typedef int  (*FilterConfigProc   )(FilterActivation *fa, const FilterFunctions *ff, HWND hWnd);
  31. typedef int  (*FilterConfig2Proc  )(FilterActivation *fa, const FilterFunctions *ff, HWND hWnd);
  32. typedef void (*FilterStringProc   )(const FilterActivation *fa, const FilterFunctions *ff, char *buf);
  33. typedef int  (*FilterStartProc    )(FilterActivation *fa, const FilterFunctions *ff);
  34. typedef int  (*FilterEndProc      )(FilterActivation *fa, const FilterFunctions *ff);
  35. typedef bool (*FilterScriptStrProc)(FilterActivation *fa, const FilterFunctions *, char *, int);
  36. typedef int (__cdecl *FilterModuleInitProc)(struct FilterModule *fm, const FilterFunctions *ff, int& vdfd_ver, int& vdfd_compat);
  37. typedef void (__cdecl *FilterModuleDeinitProc)(struct FilterModule *fm, const FilterFunctions *ff);
  38. //////////
  39. typedef void (__cdecl *FilterPreviewButtonCallback)(bool fNewState, void *pData);
  40. typedef void (__cdecl *FilterPreviewSampleCallback)(VFBitmap *, long lFrame, long lCount, void *pData);
  41. class IFilterPreview {
  42. public:
  43. virtual void SetButtonCallback(FilterPreviewButtonCallback, void *)=0;
  44. virtual void SetSampleCallback(FilterPreviewSampleCallback, void *)=0;
  45. virtual bool isPreviewEnabled()=0;
  46. virtual void Toggle(HWND)=0;
  47. virtual void Display(HWND, bool)=0;
  48. virtual void RedoFrame()=0;
  49. virtual void RedoSystem()=0;
  50. virtual void UndoSystem()=0;
  51. virtual void InitButton(HWND)=0;
  52. virtual void Close()=0;
  53. virtual bool SampleCurrentFrame()=0;
  54. virtual long SampleFrames()=0;
  55. };
  56. //////////
  57. #define VIRTUALDUB_FILTERDEF_VERSION (4)
  58. #define VIRTUALDUB_FILTERDEF_COMPATIBLE (4)
  59. // v3: added lCurrentSourceFrame to FrameStateInfo
  60. // v4: lots of additions (VirtualDub 1.2)
  61. typedef struct FilterModule {
  62. struct FilterModule *next, *prev;
  63. HINSTANCE hInstModule;
  64. FilterModuleInitProc initProc;
  65. FilterModuleDeinitProc deinitProc;
  66. } FilterModule;
  67. typedef struct FilterDefinition {
  68. struct FilterDefinition *next, *prev;
  69. FilterModule *module;
  70. char * name;
  71. char * desc;
  72. char * maker;
  73. void * private_data;
  74. int inst_data_size;
  75. FilterInitProc initProc;
  76. FilterDeinitProc deinitProc;
  77. FilterRunProc runProc;
  78. FilterParamProc paramProc;
  79. FilterConfigProc configProc;
  80. FilterStringProc stringProc;
  81. FilterStartProc startProc;
  82. FilterEndProc endProc;
  83. CScriptObject *script_obj;
  84. FilterScriptStrProc fssProc;
  85. } FilterDefinition;
  86. //////////
  87. // FilterStateInfo: contains dynamic info about file being processed
  88. class FilterStateInfo {
  89. public:
  90. long lCurrentFrame; // current output frame
  91. long lMicrosecsPerFrame; // microseconds per output frame
  92. long lCurrentSourceFrame; // current source frame
  93. long lMicrosecsPerSrcFrame; // microseconds per source frame
  94. long lSourceFrameMS; // source frame timestamp
  95. long lDestFrameMS; // output frame timestamp
  96. };
  97. // VFBitmap: VBitmap extended to hold filter-specific information
  98. class VFBitmap : public VBitmap {
  99. public:
  100. enum {
  101. NEEDS_HDC = 0x00000001L,
  102. };
  103. DWORD dwFlags;
  104. HDC hdc;
  105. };
  106. // FilterActivation: This is what is actually passed to filters at runtime.
  107. class FilterActivation {
  108. public:
  109. FilterDefinition *filter;
  110. void *filter_data;
  111. VFBitmap &dst, &src;
  112. VFBitmap *rsrc, *last;
  113. unsigned long x1, y1, x2, y2;
  114. FilterStateInfo *pfsi;
  115. IFilterPreview *ifp;
  116. FilterActivation(VFBitmap& _dst, VFBitmap& _src) : dst(_dst), src(_src) {}
  117. FilterActivation(const FilterActivation& fa, VFBitmap& _dst, VFBitmap& _src);
  118. };
  119. struct FilterFunctions {
  120. FilterDefinition *(*addFilter)(FilterModule *, FilterDefinition *, int fd_len);
  121. void (*removeFilter)(FilterDefinition *);
  122. bool (*isFPUEnabled)();
  123. bool (*isMMXEnabled)();
  124. void (*InitVTables)(struct FilterVTbls *);
  125. };
  126. #endif