InputFile.h
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. // VirtualDub - Video processing and capture application
  2. // Copyright (C) 1998-2001 Avery Lee
  3. //
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. #ifndef f_INPUTFILE_H
  18. #define f_INPUTFILE_H
  19. #include <windows.h>
  20. #include <vfw.h>
  21. #include "List.h"
  22. class AudioSource;
  23. class VideoSource;
  24. class AVIStripeSystem;
  25. class IAVIReadHandler;
  26. class IAVIReadStream;
  27. class InputFileOptions {
  28. public:
  29. virtual ~InputFileOptions()=0;
  30. virtual bool read(const char *buf)=0;
  31. virtual int write(char *buf, int buflen)=0;
  32. };
  33. class InputFilenameNode : public ListNode2<InputFilenameNode> {
  34. public:
  35. const char *name;
  36. InputFilenameNode(const char *_n);
  37. ~InputFilenameNode();
  38. };
  39. class InputFile {
  40. public:
  41. AudioSource *audioSrc; //音频
  42. VideoSource *videoSrc; //视频
  43. List2<InputFilenameNode> listFiles;
  44. virtual ~InputFile();
  45. virtual void Init(char *szFile) = 0;
  46. virtual bool Append(const char *szFile);
  47. virtual void setOptions(InputFileOptions *);
  48. virtual void setAutomated(bool);
  49. virtual InputFileOptions *promptForOptions(HWND);
  50. virtual InputFileOptions *createOptions(const char *buf);
  51. virtual void InfoDialog(HWND hwndParent);
  52. virtual bool isOptimizedForRealtime();
  53. virtual bool isStreaming();
  54. protected:
  55. void AddFilename(const char *lpszFile);
  56. };
  57. class InputFileAVI : public InputFile {
  58. private:
  59. IAVIReadHandler *pAVIFile; //AVI文件读入接口
  60. IAVIReadStream *pAVIStreamAudio, *pAVIStreamVideo; //音频和视频解码接口
  61. AVIStripeSystem *stripesys; //条纹系统(支持RAID技术)
  62. IAVIReadHandler **stripe_files;
  63. int stripe_count; //条纹数目
  64. bool isASF;
  65. bool fAutomated;
  66.     //状态布尔值
  67. bool fCompatibilityMode, fRedoKeyFlags, fInternalMJPEG, fDisableFastIO, fAcceptPartial, fAutoscanSegments;
  68. //模式值
  69. int iMJPEGMode;
  70. FOURCC fccForceVideo;
  71. FOURCC fccForceVideoHandler;
  72. long lForceAudioHz;
  73. static char szME[]; //动作估计
  74. static void _InfoDlgThread(void *pvInfo); //对话框线程
  75. static BOOL APIENTRY _InfoDlgProc( HWND hDlg, UINT message, UINT wParam, LONG lParam);
  76. //对话框窗口过程
  77. public:
  78. InputFileAVI(bool isASF);
  79. ~InputFileAVI();
  80. void Init(char *szFile); //初始化
  81. void InitStriped(char *szFile);
  82. bool Append(const char *szFile);
  83. bool isOptimizedForRealtime();
  84. bool isStreaming();
  85. void setOptions(InputFileOptions *_ifo);
  86. InputFileOptions *createOptions(const char *buf);
  87. InputFileOptions *promptForOptions(HWND hwnd);
  88. void EnableSegmentAutoscan();
  89. void ForceCompatibility();
  90.    void setAutomated(bool fAuto);
  91. void InfoDialog(HWND hwndParent);
  92. };
  93. #endif