mpegator.h
上传用户:psq1974
上传日期:2007-01-06
资源大小:1195k
文件大小:2k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. /* Copyright (C) 1998, 1999 State University of New York at Stony Brook
  2.    Author: Andrew V. Shuvalov ( andrew@ecsl.cs.sunysb.edu )
  3.    Software license is located in file "COPYING"
  4. */
  5. #ifndef _mpegator_h_
  6. #define _mpegator_h_
  7. class mpegator : public video_thread 
  8. {
  9.   /** instance of the mpegator OLE */
  10.   IMtrCapture* mpeg;
  11.   /** flag */
  12.   bool captureStarted;
  13.   /** mutex to lock all operations on mpegator: do not lock it for a while! */
  14.   mutex mpeg_ops_mutex;
  15.   /**  mpegator have some
  16.        synchronization issues: if you ask the driver is new data available, get
  17.        negative reply and then immediately try to repeat the query it reply
  18.        with "yes" but in fact data are not there yet.
  19.   */
  20.   bool wait_forobject_next_time;
  21.   /** just video buffer. This code was modified several times. The first
  22.       approach was to call StreamGetPtr/send to network/StreamReleasePtr.
  23.       That does not work because send to network call corrupts something 
  24.       inside mpegator driver and output is junk. Then i did try to copy
  25.       data into small buffer, release the stream pointer and immediately
  26.       send data to the network. That does not work, because computer resources 
  27.       were exhausted and significant percent of data was lost. Finally 
  28.       i made data to be copied into large buffer and send happens once per
  29.       few calls of check_for_new_data()
  30.   */
  31.   char video_buffer[100000];
  32.   /** is related to the buffer above */
  33.   unsigned video_data_size;
  34. public:
  35.   mpegator( int argc, char **argv );
  36.   virtual void init();
  37.   virtual ~mpegator();
  38.   virtual void shutdown();
  39.   virtual bool is_shutdown_performed() { return shutdown_performed; }
  40.   /** start */
  41.   virtual void start_capture();
  42.   /** stop */
  43.   virtual void stop_capture();
  44.   virtual void check_for_new_data();
  45. };
  46. #endif  //  _mpegator_h_