parent
							
								
									acc42e49d5
								
							
						
					
					
						commit
						b6feca2e8c
					
				| @ -0,0 +1,50 @@ | ||||
| 
 | ||||
| #include <ffplay_define.h> | ||||
| #include "MediaClock.h" | ||||
| 
 | ||||
| MediaClock::MediaClock() { | ||||
|     m_speed = 1.0; | ||||
|     m_pause = false; | ||||
|     setClock(NAN); | ||||
| } | ||||
| 
 | ||||
| void MediaClock::setClock(double pts) { | ||||
|     double time = (double) av_gettime_relative() / 1000000.0; | ||||
|     setClock(pts, time); | ||||
| } | ||||
| 
 | ||||
| void MediaClock::setClock(double pts, double time) { | ||||
|     m_pts         = pts; | ||||
|     m_last_update = time; | ||||
|     m_pts_drift   = m_pts - time; | ||||
| } | ||||
| 
 | ||||
| double MediaClock::getClock() const { | ||||
|     if (m_pause) { | ||||
|         return m_pts; | ||||
|     } else { | ||||
|         double time = (double) av_gettime_relative() / 1000000.0; | ||||
|         return m_pts_drift + time - (time - m_last_update) * (1.0 - m_speed); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void MediaClock::setSpeed(double speed) { | ||||
|     setClock(getClock()); | ||||
|     m_speed = speed; | ||||
| } | ||||
| 
 | ||||
| double MediaClock::getSpeed() const { | ||||
|     return m_speed; | ||||
| } | ||||
| 
 | ||||
| void MediaClock::syncToSlave(MediaClock *slave) { | ||||
|     double clock = getClock(); | ||||
|     double slave_clock = slave->getClock(); | ||||
|     if (!isnan(slave_clock) && (isnan(clock) || fabs(clock - slave_clock) > AV_NOSYNC_THRESHOLD)) { | ||||
|         setClock(slave_clock); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| MediaClock::~MediaClock() { | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,45 @@ | ||||
| 
 | ||||
| #ifndef FFMPEGANDROID_MEDIACLOCK_H | ||||
| #define FFMPEGANDROID_MEDIACLOCK_H | ||||
| 
 | ||||
| #include <math.h> | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| #include <libavutil/time.h> | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| class MediaClock { | ||||
| 
 | ||||
| private: | ||||
|     bool m_pause; | ||||
|     double m_pts; | ||||
|     double m_speed; | ||||
|     double m_pts_drift; | ||||
|     double m_last_update; | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
|     MediaClock(); | ||||
| 
 | ||||
|     void setClock(double pts); | ||||
| 
 | ||||
|     void setClock(double pts, double time); | ||||
| 
 | ||||
|     double getClock() const; | ||||
| 
 | ||||
|     void setSpeed(double speed); | ||||
| 
 | ||||
|     double getSpeed() const; | ||||
| 
 | ||||
|     void syncToSlave(MediaClock *slave); | ||||
| 
 | ||||
|     virtual ~MediaClock(); | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #endif //FFMPEGANDROID_MEDIACLOCK_H
 | ||||
					Loading…
					
					
				
		Reference in new issue