AmPlaylist.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028 #ifndef AmPlaylist_h
00029 #define AmPlaylist_h
00030
00031 #include "AmAudio.h"
00032 #include "AmThread.h"
00033 #include "AmEventQueue.h"
00034
00035 #include <deque>
00036 using std::deque;
00038 struct AmPlaylistItem
00039 {
00040
00041 AmAudio* play;
00042 AmAudio* record;
00043
00044 AmPlaylistItem(AmAudio* play,
00045 AmAudio* record)
00046 : play(play), record(record) {}
00047
00048 virtual ~AmPlaylistItem() { }
00049 };
00050
00059 class AmPlaylist: public AmAudio
00060 {
00061
00062 AmMutex items_mut;
00063 deque<AmPlaylistItem*> items;
00064
00065 AmMutex cur_mut;
00066 AmPlaylistItem* cur_item;
00067
00068 AmEventQueue* ev_q;
00069
00070 void updateCurrentItem();
00071 void gotoNextItem(bool notify = true);
00072
00073 protected:
00074
00075 int read(unsigned int user_ts, unsigned int size){ return -1; }
00076 int write(unsigned int user_ts, unsigned int size){ return -1; }
00077
00078
00079 int get(unsigned int user_ts, unsigned char* buffer, unsigned int nb_samples);
00080 int put(unsigned int user_ts, unsigned char* buffer, unsigned int size);
00081
00082 public:
00083 AmPlaylist(AmEventQueue* q);
00084 ~AmPlaylist();
00085
00086 bool isEmpty();
00087
00088 void addToPlaylist(AmPlaylistItem* item);
00089 void addToPlayListFront(AmPlaylistItem* item);
00090 void close(bool notify = true);
00091 };
00092
00096 class AmPlaylistSeparatorEvent :
00097 public AmEvent {
00098 public:
00099 AmPlaylistSeparatorEvent(int id)
00100 : AmEvent(id) { }
00101 };
00102
00110 class AmPlaylistSeparator
00111 : public AmAudio {
00112 bool notified;
00113 AmEventQueue* ev_q;
00114 int id;
00115 public:
00116 AmPlaylistSeparator(AmEventQueue* q, int id)
00117 : ev_q(q), notified(false), id(id) { }
00118 ~AmPlaylistSeparator() { }
00119
00120 int read(unsigned int user_ts, unsigned int size){
00121 if (!notified)
00122 ev_q->postEvent(new AmPlaylistSeparatorEvent(id));
00123 notified = true;
00124 return 0;
00125 }
00126 int write(unsigned int user_ts, unsigned int size){
00127 return read(user_ts, size);
00128 }
00129 };
00130
00131
00132
00133
00134 #endif
Generated on Fri May 16 12:02:05 2008 for SEMS by
1.5.1