00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef SCHEDULER_H
00021 #define SCHEDULER_H
00022
00023 #include "ortp/rtpsession.h"
00024 #include "ortp/sessionset.h"
00025 #include "rtptimer.h"
00026
00027
00028 struct _RtpScheduler {
00029
00030 RtpSession *list;
00031 SessionSet all_sessions;
00032 int all_max;
00033 SessionSet r_sessions;
00034 int r_max;
00035 SessionSet w_sessions;
00036 int w_max;
00037 SessionSet e_sessions;
00038 int e_max;
00039 int max_sessions;
00040
00041 ortp_cond_t unblock_select_cond;
00042 ortp_mutex_t lock;
00043 ortp_thread_t thread;
00044 int thread_running;
00045 struct _RtpTimer *timer;
00046 uint32_t time_;
00047 uint32_t timer_inc;
00048 };
00049
00050 typedef struct _RtpScheduler RtpScheduler;
00051
00052 RtpScheduler * rtp_scheduler_new(void);
00053 void rtp_scheduler_set_timer(RtpScheduler *sched,RtpTimer *timer);
00054 void rtp_scheduler_start(RtpScheduler *sched);
00055 void rtp_scheduler_stop(RtpScheduler *sched);
00056 void rtp_scheduler_destroy(RtpScheduler *sched);
00057
00058 void rtp_scheduler_add_session(RtpScheduler *sched, RtpSession *session);
00059 void rtp_scheduler_remove_session(RtpScheduler *sched, RtpSession *session);
00060
00061 void * rtp_scheduler_schedule(void * sched);
00062
00063 #define rtp_scheduler_lock(sched) ortp_mutex_lock(&(sched)->lock)
00064 #define rtp_scheduler_unlock(sched) ortp_mutex_unlock(&(sched)->lock)
00065
00066
00067
00068 RtpScheduler * ortp_get_scheduler(void);
00069 #endif