123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Copyright 2016 RWS Inc, All Rights Reserved
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of version 2 of the GNU General Public License as published by
- // the Free Software Foundation
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License along
- // with this program; if not, write to the Free Software Foundation, Inc.,
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- //
- #ifndef RTPLAY_H
- #define RTPLAY_H
- //////////////////////////////////////////////////////////////////////////////
- // Headers.
- //////////////////////////////////////////////////////////////////////////////
- #include "filewin.h"
- #include "filter.h"
- #include "dispatch.h"
- #include "res.h"
- #include "rttime.h"
- #include "task.h"
-
- //////////////////////////////////////////////////////////////////////////////
- // Macros.
- //////////////////////////////////////////////////////////////////////////////
- // Values for m_usState.
- #define RT_STATE_STOPPED 0x0000 // Currently no file is being streamed.
- #define RT_STATE_STARTING 0x0001 // Preparing to stream (building up enough
- // input that we could attain stream data
- // usage).
- #define RT_STATE_BEGIN 0x0002 // Internal use only!!
- #define RT_STATE_PLAYING 0x0003 // Streaming.
- #define RT_STATE_PAUSE 0x0004 // Streaming is temporarily suspended.
- #define RT_STATE_ABORTING 0x0005 // Terminating stream early.
- #define RT_STATE_ENDING 0x0006 // Ending due to end of stream data.
- // Values for messages passed to handlers.
- #define RT_MSG_STOPPED 0x0000 // The last thing a message handler will
- // receive from a stream session, indicat-
- // ing that streaming is done completely.
- #define RT_MSG_STARTING 0x0001 // The first thing a message handler will
- // receive indicating we are preparing to
- // stream.
- #define RT_MSG_BEGIN 0x0002 // This let's the handler know it's time
- // to open the flood-gates. An audio
- // handler might use this as an
- // opportunity to actually start playing
- // data.
- #define RT_MSG_PLAYING 0x0003 // Streaming.
- #define RT_MSG_PAUSE 0x0004 // Streaming is paused.
- #define RT_MSG_ABORTING 0x0005 // Prematurely ending streaming.
- #define RT_MSG_ENDING 0x0006 // Ending streaming due to end of data.
- //////////////////////////////////////////////////////////////////////////////
- // Typedefs.
- //////////////////////////////////////////////////////////////////////////////
- class CRtPlay
- {
- public: // Construction/Destruction.
- // Default constructor.
- CRtPlay();
- // Destructor.
- ~CRtPlay();
- public: // Methods.
- // Opens a stream file for play.
- // Returns 0 on success.
- short Open(char* pszFileName);
- // Closes an open stream file.
- // Returns 0 on success.
- short Close(void);
- // Starts play.
- // Returns 0 on success.
- short Play(void);
- // Aborts current play.
- // Returns 0 on success.
- short Abort(void);
- // Pauses play.
- // Returns 0 on success.
- short Pause(void);
- // Resumes play (after Pause()).
- // Returns 0 on success.
- short Resume(void);
- // Sets the time handler function in our CRtTime.
- void SetTimeFunc(RTTIMEFUNC fnTime)
- { m_rttime.SetTimeFunc(fnTime); }
- // Sets the channels to play.
- void SetChannels(USHORT usFilter)
- { m_filter.SetFilter(usFilter); }
- // Sets the window and panes sizes for the file window (which is set
- // imeediately after opening).
- void SetSizes( long lWindowSize, long lInputPaneSize,
- long lFilterPaneSize)
- {
- m_lWindowSize = lWindowSize;
- m_lInputPaneSize = lInputPaneSize;
- m_lFilterPaneSize = lFilterPaneSize;
- }
- public: // Querries.
- // Get current status.
- USHORT GetState(void)
- { return m_usState; }
- protected: // Internal methods.
- // Sets members w/o regard for current value.
- void Set(void);
- // Resets members. Deallocates memory if necessary.
- void Reset(void);
- // Sets the state to the new state. Generates messages if a state change
- // occurs.
- // Returns 0 on success.
- short SetState(USHORT usState);
- // Adds an RT_TYPE_RTFINFO chunk to the dispatcher with the specified command
- // and parameters.
- // Returns 0 on success.
- short CreateCmd(USHORT usCmd, long lTime, long lParm1, long lParm2);
- // Handles data callbacks from dispatch.
- // Returns RET_FREE if puc should be freed and RET_DONTFREE, otherwise.
- short RtInfoCall( UCHAR* puc, long lSize, USHORT usType, UCHAR ucFlags,
- long lTime);
- // Callback dispatcher (calls the implied this version).
- // Returns RET_FREE if puc should be freed and RET_DONTFREE, otherwise.
- static short RtInfoCallStatic(UCHAR* puc, long lSize, USHORT usType,
- UCHAR ucFlags, long lTime, long l_pRtPlay);
- // Handles current state. Called by Blue's critical handler list.
- void Critical(void);
- // Static version of above.
- static void CriticalStatic(ULONG ul_pRtPlay)
- { ((CRtPlay*)ul_pRtPlay)->Critical(); }
- public: // Members.
- CDispatch m_dispatch; // Dispatches types to handlers.
- CFilter m_filter; // Filters channels and builds
- // contiguous buffers.
- CFileWin m_filewin; // Window into stream file.
- CRes m_res; // Stores types to be requested.
- CRtTime m_rttime; // Keeps time for us in a nice,
- // pausable/resumable fashion.
- protected: // Members.
-
- USHORT m_usState; // Current state of class.
- ULONG m_ulChannelsDone; // Masks of channels that have
- // completed.
- long m_lWindowSize; // Size for file window.
- long m_lInputPaneSize; // Size for input pane of file window.
- long m_lFilterPaneSize; // Size for filter pane of file window.
- };
- #endif // RTPLAY_H
- //////////////////////////////////////////////////////////////////////////////
- // EOF
- //////////////////////////////////////////////////////////////////////////////
|