修正回放频率不准问题

This commit is contained in:
2024-06-20 10:57:08 +07:00
parent 7147764284
commit dc6da41f64
5 changed files with 50 additions and 56 deletions
+22 -39
View File
@@ -123,7 +123,7 @@ void PlayThread::run()
QByteArray data;
QByteArray frame;
int CurrentProgress = 0;
//int CurrentProgress = 0;
uint32_t index = 0;
while(play_control)
@@ -199,6 +199,7 @@ void PlayThread::run()
//中断播放,一般只有要播放新的文件才会出现这种情况
if(play_state == 0)
{
//CurrentProgress = 0;
break;
}
else if(play_state == 1)//正常播放
@@ -220,11 +221,13 @@ void PlayThread::run()
{
CurrentProgress = FrameData.indexOf(*i);
emit progress(FrameData.size() - 1,CurrentProgress);
QThread::msleep(1);
QThread::msleep(100);
last_time_gap = 0;
if(isChangedPos)
{
i += (newpos - CurrentProgress);
//qDebug() << CurrentProgress << newpos << FrameData.indexOf(*i);
if(i == FrameData.end())
{
@@ -261,50 +264,23 @@ void PlayThread::run()
//延迟处理
//qint64 elapstime = (qint64)(elapstimer.nsecsElapsed());// / 1000000.0;
//qint64 elapstime = (qint64)(elapstimer.restart());
qint64 time_gap = 0;
//time_gap = (time.toMSecsSinceEpoch() - time_tick) - (last_time_gap - elapstime);
//假设上面那个成勋运行1ms时间,减掉,因为上面那一段运行时间不到1ms
time_gap = time.toMSecsSinceEpoch() - time_tick;
time_tick = time.toMSecsSinceEpoch();
//qDebug() << "time:" << time_gap << last_time_gap;
//last_time_gap = time_gap;
/*
if(time_gap > 0)
{
timer_ms->start(time_gap);
//这段时间就浪费掉了
//QThread::exec();
while(1)
{
QApplication::processEvents();
if(istimeout == true)
{
timer_ms->stop();
istimeout = false;
break;
}
}
}
else
{
QApplication::processEvents();
}*/
qint64 elapstime = (qint64)(elapstimer.elapsed());
//qDebug() << "time:" << time_gap << last_time_gap << elapstime;
if(time_gap > 1000)//第一次
{
time_gap = 1000;
}
if(time_gap > 0)
{
last_time_gap = 0;
@@ -334,7 +310,7 @@ void PlayThread::run()
last_time_gap += elapstime;
}
qDebug() << "time:" << time_gap << last_time_gap << elapstime;
//qDebug() << "time:" << time_gap << last_time_gap << elapstime;
@@ -358,13 +334,20 @@ void PlayThread::run()
void PlayThread::resetData()
{
FrameData.clear();
time_tick= 0;
play_start = false;
CurrentProgress = 0;
play_state = 0;
Sleep(100);
FrameData.clear();
}