args.h
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:3k
源码类别:

VC书籍

开发平台:

Visual C++

  1. /* args.h
  2. An abstract class to pass values to maplay and other worker
  3.    threads.
  4. From the Win32 API, we can only pass one 32-bit value to a thread. This will
  5.    be a pointer to a object of this class. The Args class contains the seeking
  6.    control variables needed for both MPEG and MCI files.
  7.    Added stop and done variables and functions for terminating the
  8.    threads from outside.
  9.    This class should be used to pass arguments to maplay(),
  10.    and to initialize the Obuffer's. */
  11. #ifndef ARGS_H
  12. #define ARGS_H
  13. #ifdef __WIN32__
  14. #define STRICT
  15. #include <wtypes.h>
  16. #include <windows.h>
  17. enum e_output { O_WAVEMAPPER, O_DIRECTSOUND, O_WAVEFILE };
  18. #endif // __WIN32__
  19. #include "all.h"
  20. #include "ibitstr.h"
  21. #include "header.h"
  22. #ifdef SEEK_STOP
  23. #include "mutx_imp.h"
  24. #endif
  25. class Args
  26. {
  27. public:
  28. Args()
  29.    {
  30. #ifdef SEEK_STOP
  31. mutex    = NULL;
  32.     stop             = false;
  33.       done             = false;
  34.       desired_position = 0;
  35.       position_change  = false;
  36. #endif // SEEK_STOP
  37. #ifdef WIN32GUI
  38.     hWnd             = NULL;
  39. #endif // WIN32GUI
  40.    }
  41. virtual ~Args() {}
  42. #ifdef SEEK_STOP
  43. _Mutex mutex;
  44.    volatile bool  stop;
  45.    volatile bool  done;
  46.    volatile int32 desired_position;
  47. volatile bool  position_change;
  48. #endif // SEEK_STOP
  49. #ifdef WIN32GUI
  50. HWND hWnd;
  51. #endif // WIN32GUI
  52. };
  53. // A class to contain arguments for maplay.
  54. class MPEG_Args : public Args
  55. {
  56. public:
  57. MPEG_Args()
  58. {
  59. stream = NULL;
  60. MPEGheader = NULL;
  61. which_c = both;
  62.    use_own_scalefactor = false;
  63.     scalefactor = 32768.0;
  64. #ifdef __WIN32__
  65.    phwo = NULL;
  66.       output_mode = O_WAVEMAPPER;
  67. #endif // __WIN32__
  68.       stdout_mode   = false;
  69.       verbose_mode  = false;
  70. #if defined(SPARC) || defined(HPUX)
  71.     use_speaker   = false;
  72.       use_headphone = false;
  73.       use_line_out  = false;
  74. #endif // SPARC || HPUX
  75. #if defined(SPARC) && defined(ULAW)
  76. force_amd     = false;
  77. #endif // SPARC && ULAW
  78. #if defined(SPARC) || defined(HPUX) || defined(AIX)
  79.       volume = -1.0f;
  80. #endif // SPARC || HPUX || AIX
  81. #ifdef HPUX
  82. wait_if_busy = false;
  83. #endif
  84.    }
  85. Ibitstream *stream;
  86. Header *MPEGheader;
  87. enum e_channels which_c;
  88.    bool use_own_scalefactor;
  89.    real scalefactor;
  90. #ifdef __WIN32__
  91. HWAVEOUT *phwo;
  92.    enum e_output output_mode;
  93. char output_filename[256];
  94. #endif // __WIN32__
  95.    bool stdout_mode;
  96.    bool verbose_mode;
  97. #if defined(SPARC) || defined(HPUX)
  98.    bool use_speaker;
  99.    bool use_headphone;
  100.    bool use_line_out;
  101. #endif // SPARC || HPUX
  102. #if defined(SPARC) && defined(ULAW)
  103. bool force_amd;
  104. #endif // SPARC && ULAW
  105. #if defined(SPARC) || defined(HPUX) || defined(AIX)
  106.    float volume;
  107. #endif // SPARC || HPUX || AIX
  108. #ifdef HPUX
  109. bool wait_if_busy;
  110. #endif // HPUX
  111. ~MPEG_Args() { }
  112. };
  113. #ifdef __WIN32__
  114. // A class to hold the arguments for MCI playing.
  115. class MCI_Args : public Args {
  116. public:
  117. MCI_Args()
  118. {
  119. playing = false;
  120.       CDMode  = false;
  121.       final_track = false;
  122.       length = 0;
  123.       lstrcpy(this_track_str, "1");
  124.       lstrcpy(next_track_str, "2");
  125. }
  126.    ~MCI_Args() { }
  127.    bool CDMode;
  128.    bool final_track;
  129.    char this_track_str[8];
  130.    char next_track_str[8];
  131.    int  length;
  132. volatile bool playing;
  133. };
  134. #endif // __WIN32__
  135. #endif // ARGS_H