Skip to content

Commit

Permalink
#49 Seek after selecting stream to change stream at any time (working…
Browse files Browse the repository at this point in the history
… but still unstable)
  • Loading branch information
Ceylo committed Jun 13, 2015
1 parent d3b3ff9 commit cae9604
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 11 deletions.
2 changes: 0 additions & 2 deletions src/Demuxer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,6 @@ namespace sfe
void Demuxer::selectAudioStream(std::shared_ptr<AudioStream> stream)
{
Status oldStatus = m_timer->getStatus();
CHECK(oldStatus == Stopped, "Changing the selected stream after starting "
"the movie playback isn't supported yet");

if (oldStatus == Playing)
m_timer->pause();
Expand Down
31 changes: 22 additions & 9 deletions src/MovieImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,16 +107,16 @@ namespace sfe
return false;
}

if (m_timer->getStatus() != Stopped)
{
sfeLogError("Movie::selectStream() - cannot select a stream while media is not stopped");
return false;
}

std::map<int, std::shared_ptr<Stream> > streams = m_demuxer->getStreams();
std::map<int, std::shared_ptr<Stream> >::iterator it = streams.find(streamDescriptor.identifier);
std::shared_ptr<Stream> streamToSelect = nullptr;

Status initialStatus = m_timer->getStatus();
sf::Time initialTime = m_timer->getOffset();

if (m_timer->getStatus() != Stopped)
m_timer->stop();

if (it != streams.end())
{
streamToSelect = it->second;
Expand All @@ -126,18 +126,31 @@ namespace sfe
{
case Audio:
m_demuxer->selectAudioStream(std::dynamic_pointer_cast<AudioStream>(streamToSelect));
return true;
break;
case Video:
m_demuxer->selectVideoStream(std::dynamic_pointer_cast<VideoStream>(streamToSelect));
return true;
break;
case Subtitle:
m_demuxer->selectSubtitleStream(std::dynamic_pointer_cast<SubtitleStream>(streamToSelect));
return true;
break;
default:
sfeLogWarning("Movie::selectStream() - stream activation for stream of kind "
+ mediaTypeToString(it->second->getStreamKind()) + " is not supported");
return false;
}

if (setPlayingOffset(initialTime))
{
if (initialStatus == Playing)
play();

return true;
}
else
{
return false;
}

}

void MovieImpl::play()
Expand Down

0 comments on commit cae9604

Please sign in to comment.