Fix problems with lock play and seek events

This commit is contained in:
jfmcarreira committed 2014-06-14 19:11:26 +01:00
1 parent fca35fc3a6
commit 9829db162e
4 files changed
+41 -22

No files matched your search

+4 -4
View File
@@ -191,6 +191,7 @@ Bool InputStream::open( QString filename, UInt width, UInt height, Int input_for
m_cStreamInformationString.append( "] " );
m_cStreamInformationString.append( QFileInfo( m_cFilename ).fileName() );
m_iCurrFrameNum = -1;
seekInput( 0 );
m_cTimer.start();
@@ -319,7 +320,7 @@ Void InputStream::readNextFrame()
UInt64 bytes_read = 0;
//m_cTimer.restart();
if( m_iCurrFrameNum + 1 >= ( Int )m_uiTotalFrameNum )
if( m_iCurrFrameNum + 1 >= (Int64)m_uiTotalFrameNum )
{
m_iErrorStatus = LAST_FRAME;
m_pcNextFrame = NULL;
@@ -370,8 +371,7 @@ Void InputStream::setNextFrame()
else
{
m_iErrorStatus = END_OF_SEQ;
m_iCurrFrameNum = 0;
seekInput( m_iCurrFrameNum );
seekInput( 0 );
}
}
@@ -393,7 +393,7 @@ Void InputStream::seekInput( UInt64 new_frame_num )
{
if( !m_pFile )
return;
if( new_frame_num < 0 || new_frame_num >= m_uiTotalFrameNum )
if( new_frame_num < 0 || new_frame_num >= m_uiTotalFrameNum || (Int64)new_frame_num == m_iCurrFrameNum )
return;
#ifdef USE_FFMPEG
if( m_cLibAvContext.getStatus() )
+1 -1
View File
@@ -78,7 +78,7 @@ private:
UInt m_uiHeight;
UInt m_uiFrameRate;
UInt64 m_uiTotalFrameNum;
Int m_iCurrFrameNum;
Int64 m_iCurrFrameNum;
public:
InputStream();
+34 -15
View File
@@ -103,10 +103,10 @@ Void plaYUVerApp::about()
{
QString about_message;
about_message.append( "The <b>plaYUVer</b> is an open-source raw video player! " );
about_message.append("Developed by ");
about_message.append("João Carreira ");
about_message.append("and ");
about_message.append("Luís Lucas");
about_message.append( "Developed by " );
about_message.append( "João Carreira " );
about_message.append( "and " );
about_message.append( "Luís Lucas" );
QMessageBox::about( this, "About plaYUVer", about_message );
}
@@ -305,15 +305,25 @@ Void plaYUVerApp::updatePropertiesSelectedArea( QRect area )
// ----------------------- Playing Functions --------------------
UInt plaYUVerApp::getMaxFrameNumber()
UInt64 plaYUVerApp::getMaxFrameNumber()
{
UInt currFrames;
UInt maxFrames = INT_MAX;
for( Int i = 0; i < m_acPlayingSubWindows.size(); i++ )
UInt64 maxFrames = INT_MAX;
if( m_pcCurrentSubWindow )
{
currFrames = m_acPlayingSubWindows.at( i )->getInputStream()->getFrameNum();
if( currFrames < maxFrames )
maxFrames = currFrames;
if( m_acPlayingSubWindows.contains( m_pcCurrentSubWindow ) )
{
for( Int i = 0; i < m_acPlayingSubWindows.size(); i++ )
{
currFrames = m_acPlayingSubWindows.at( i )->getInputStream()->getFrameNum();
if( currFrames < maxFrames )
maxFrames = currFrames;
}
}
else
{
maxFrames = m_pcCurrentSubWindow->getInputStream()->getFrameNum();
}
}
return maxFrames;
}
@@ -374,7 +384,7 @@ Void plaYUVerApp::play()
{
m_acPlayingSubWindows.append( m_pcCurrentSubWindow );
m_pcCurrentSubWindow->seekAbsoluteEvent( m_acPlayingSubWindows.at( 0 )->getInputStream()->getCurrFrameNum() );
m_pcFrameSlider->setMaximum( getMaxFrameNumber() - 1 );
updateTotalFrameNum();
}
m_pcCurrentSubWindow->play();
}
@@ -436,6 +446,7 @@ Void plaYUVerApp::stop()
seekSliderEvent( 0 );
}
}
updateTotalFrameNum();
}
Void plaYUVerApp::playEvent()
@@ -457,6 +468,13 @@ Void plaYUVerApp::playEvent()
updateFrameProperties();
return;
}
else
{
for( Int i = 0; i < m_acPlayingSubWindows.size(); i++ )
{
m_acPlayingSubWindows.at( i )->seekAbsoluteEvent( 0 );
}
}
break;
case -3:
m_acPlayingSubWindows.at( i )->close();
@@ -487,11 +505,12 @@ Void plaYUVerApp::updateCurrFrameNum()
m_pcCurrFrameNumLabel->setText( "1" );
}
}
Void plaYUVerApp::updateTotalFrameNum( UInt total_frame_num )
Void plaYUVerApp::updateTotalFrameNum()
{
if( m_pcCurrentSubWindow && m_pcCurrentSubWindow->getInputStream() && total_frame_num == 1 )
UInt64 total_frame_num = 1;
if( m_pcCurrentSubWindow && m_pcCurrentSubWindow->getInputStream() )
{
total_frame_num = m_pcCurrentSubWindow->getInputStream()->getFrameNum();
total_frame_num = getMaxFrameNumber();
}
m_pcFrameSlider->setMaximum( total_frame_num - 1 );
m_pcTotalFrameNumLabel->setText( QString( tr( "%1" ) ).arg( total_frame_num ) );
@@ -1133,7 +1152,7 @@ Void plaYUVerApp::writeSettings()
settings.setMainWindowPos( pos() );
settings.setMainWindowSize( size() );
settings.setLastOpenPath( m_cLastOpenPath );
settings.setSelectedTool( (Int)m_appTool );
settings.setSelectedTool( ( Int )m_appTool );
settings.setPlayingSettings( m_arrayActions[VIDEO_LOOP_ACT]->isChecked(), m_arrayActions[VIDEO_LOCK_ACT]->isChecked() );
}
+2 -2
View File
@@ -121,11 +121,11 @@ private:
Void zoomToFitAll();
//! Playing functions
UInt getMaxFrameNumber();
UInt64 getMaxFrameNumber();
Void startPlay();
Void setTimerStatus();
Void updateCurrFrameNum();
Void updateTotalFrameNum( UInt total_frame_num = 1 );
Void updateTotalFrameNum();
Void updateMenus();
Void updateStreamProperties();