From f808efaf8310acd7a307d551bcdd8ba651423bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 26 Aug 2009 11:13:14 +0000 Subject: [PATCH] * Rewrote TimeSource.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32696 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/media/TimeSource.h | 196 +++++++++++++++------------------- 1 file changed, 86 insertions(+), 110 deletions(-) diff --git a/headers/os/media/TimeSource.h b/headers/os/media/TimeSource.h index 967a3ed259..cd8a783dfb 100644 --- a/headers/os/media/TimeSource.h +++ b/headers/os/media/TimeSource.h @@ -1,150 +1,126 @@ -/******************************************************************************* -/ -/ File: TimeSource.h -/ -/ Description: A BTimeSource is something to which others can slave timing information -/ using the Media Kit. -/ -/ Copyright 1997-98, Be Incorporated, All Rights Reserved -/ -*******************************************************************************/ - -#if !defined(_TIME_SOURCE_H) +/* + * Copyright 2009, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + */ +#ifndef _TIME_SOURCE_H #define _TIME_SOURCE_H + #include #include class _BSlaveNodeStorageP; -namespace BPrivate { namespace media { - class BMediaRosterEx; - class TimeSourceObject; - class SystemTimeSourceObject; - class SlaveNodes; - struct TimeSourceTransmit; -} } +namespace BPrivate { + namespace media { + class BMediaRosterEx; + class TimeSourceObject; + class SystemTimeSourceObject; + class SlaveNodes; + struct TimeSourceTransmit; + } +} -class BTimeSource : - public virtual BMediaNode -{ +class BTimeSource : public virtual BMediaNode { protected: - /* this has to be at the top to force a vtable */ -virtual ~BTimeSource(); + virtual ~BTimeSource(); public: + virtual status_t SnoozeUntil(bigtime_t performanceTime, + bigtime_t withLatency = 0, + bool retrySignals = false); -virtual status_t SnoozeUntil( /* returns error if stopped */ - bigtime_t performance_time, - bigtime_t with_latency = 0, - bool retry_signals = false); + bigtime_t Now(); + bigtime_t PerformanceTimeFor(bigtime_t realTime); + bigtime_t RealTimeFor(bigtime_t performanceTime, + bigtime_t withLatency); + bool IsRunning(); - bigtime_t Now(); /* convenience, less accurate */ - bigtime_t PerformanceTimeFor( /* all three go through GetTime() */ - bigtime_t real_time); - bigtime_t RealTimeFor( - bigtime_t performance_time, - bigtime_t with_latency); - bool IsRunning(); + status_t GetTime(bigtime_t* _performanceTime, + bigtime_t* _realTime, float* _drift); + status_t GetStartLatency(bigtime_t* _latency); - status_t GetTime( /* return B_OK if reading is usable */ - bigtime_t * performance_time, - bigtime_t * real_time, - float * drift); - -static bigtime_t RealTime(); /* this produces real time, nothing else is guaranteed to */ - - status_t GetStartLatency( - bigtime_t * out_latency); + static bigtime_t RealTime(); protected: + BTimeSource(); - BTimeSource(); + virtual status_t HandleMessage(int32 message, const void* data, + size_t size); -virtual status_t HandleMessage( - int32 message, - const void * data, - size_t size); + void PublishTime(bigtime_t performanceTime, + bigtime_t realTime, float drift); - void PublishTime( /* call this at convenient times to update approximation */ - bigtime_t performance_time, - bigtime_t real_time, - float drift); + void BroadcastTimeWarp(bigtime_t atRealTime, + bigtime_t newPerformanceTime); - void BroadcastTimeWarp( - bigtime_t at_real_time, - bigtime_t new_performance_time); /* when running */ - void SendRunMode( - run_mode mode); + void SendRunMode(run_mode mode); + virtual void SetRunMode(run_mode mode); -virtual void SetRunMode( - run_mode mode); /* or, instead, SendRunMode() */ + enum time_source_op { + B_TIMESOURCE_START = 1, + B_TIMESOURCE_STOP, + B_TIMESOURCE_STOP_IMMEDIATELY, + B_TIMESOURCE_SEEK + }; - enum time_source_op { - B_TIMESOURCE_START = 1, - B_TIMESOURCE_STOP, - B_TIMESOURCE_STOP_IMMEDIATELY, - B_TIMESOURCE_SEEK - }; - struct time_source_op_info { - time_source_op op; - int32 _reserved1; - bigtime_t real_time; - bigtime_t performance_time; - int32 _reserved2[6]; - }; -virtual status_t TimeSourceOp( - const time_source_op_info & op, - void * _reserved) = 0; + struct time_source_op_info { + time_source_op op; + int32 _reserved1; + bigtime_t real_time; + bigtime_t performance_time; + int32 _reserved2[6]; + }; + + virtual status_t TimeSourceOp(const time_source_op_info& op, + void* _reserved) = 0; private: - friend class BMediaNode; friend class BMediaRoster; friend class BPrivate::media::BMediaRosterEx; - friend class BPrivate::media::TimeSourceObject; friend class BPrivate::media::SystemTimeSourceObject; + friend class BPrivate::media::TimeSourceObject; - BTimeSource( /* private unimplemented */ - const BTimeSource & clone); - BTimeSource & operator=( - const BTimeSource & clone); + BTimeSource(const BTimeSource& other); + BTimeSource& operator=(const BTimeSource& other); + // not implemented - /* Mmmh, stuffing! */ - status_t _Reserved_TimeSource_0(void *); // TimeSourceOp() -virtual status_t _Reserved_TimeSource_1(void *); -virtual status_t _Reserved_TimeSource_2(void *); -virtual status_t _Reserved_TimeSource_3(void *); -virtual status_t _Reserved_TimeSource_4(void *); -virtual status_t _Reserved_TimeSource_5(void *); + explicit BTimeSource(media_node_id id); - bool fStarted; - area_id fArea; - volatile BPrivate::media::TimeSourceTransmit *fBuf; - BPrivate::media::SlaveNodes *fSlaveNodes; + status_t _Reserved_TimeSource_0(void*); + // used for TimeSourceOp() + virtual status_t _Reserved_TimeSource_1(void*); + virtual status_t _Reserved_TimeSource_2(void*); + virtual status_t _Reserved_TimeSource_3(void*); + virtual status_t _Reserved_TimeSource_4(void*); + virtual status_t _Reserved_TimeSource_5(void*); - area_id _reserved_area; - bool fIsRealtime; - bool _reserved_bool_[3]; - uint32 _reserved_time_source_[10]; + virtual status_t RemoveMe(BMediaNode* node); + virtual status_t AddMe(BMediaNode* node); -explicit BTimeSource( - media_node_id id); - void FinishCreate(); /* called by roster and/or server */ + void FinishCreate(); -virtual status_t RemoveMe(BMediaNode * node); -virtual status_t AddMe(BMediaNode * node); + void DirectStart(bigtime_t at); + void DirectStop(bigtime_t at, bool immediate); + void DirectSeek(bigtime_t to, bigtime_t at); + void DirectSetRunMode(run_mode mode); + void DirectAddMe(const media_node& node); + void DirectRemoveMe(const media_node& node); - void DirectStart(bigtime_t at); - void DirectStop(bigtime_t at, bool immediate); - void DirectSeek(bigtime_t to, bigtime_t at); - void DirectSetRunMode(run_mode mode); - void DirectAddMe(const media_node &node); - void DirectRemoveMe(const media_node &node); +private: + bool fStarted; + area_id fArea; + volatile BPrivate::media::TimeSourceTransmit* fBuf; + BPrivate::media::SlaveNodes* fSlaveNodes; + + area_id _reserved_area; + bool fIsRealtime; + bool _reserved_bool_[3]; + uint32 _reserved_time_source_[10]; }; -#endif /* _TIME_SOURCE_H */ - +#endif // _TIME_SOURCE_H