Merge branch 'development' into LTS_development
# Conflicts: # src/input/input.cpp
This commit is contained in:
commit
bb2e6de56a
4 changed files with 39 additions and 6 deletions
|
@ -16,7 +16,7 @@ namespace Mist {
|
|||
Input * Input::singleton = NULL;
|
||||
|
||||
void Input::userCallback(char * data, size_t len, unsigned int id) {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
for (int i = 0; i < SIMUL_TRACKS; i++) {
|
||||
unsigned long tid = ((unsigned long)(data[i * 6]) << 24) | ((unsigned long)(data[i * 6 + 1]) << 16) | ((unsigned long)(data[i * 6 + 2]) << 8) | ((unsigned long)(data[i * 6 + 3]));
|
||||
if (tid) {
|
||||
unsigned long keyNum = ((unsigned long)(data[i * 6 + 4]) << 8) | ((unsigned long)(data[i * 6 + 5]));
|
||||
|
@ -140,6 +140,11 @@ namespace Mist {
|
|||
while (config->is_active){
|
||||
pid_t pid = fork();
|
||||
if (pid == 0){
|
||||
//Re-init streamStatus to fix Cygwin issues
|
||||
char pageName[NAME_BUFFER_SIZE];
|
||||
snprintf(pageName, NAME_BUFFER_SIZE, SHM_STREAM_STATE, streamName.c_str());
|
||||
streamStatus.init(pageName, 1, false, false);
|
||||
if (streamStatus){streamStatus.mapped[0] = STRMSTAT_INIT;}
|
||||
if (needsLock()){playerLock.close();}
|
||||
if (!preRun()){return 0;}
|
||||
return run();
|
||||
|
|
|
@ -749,7 +749,7 @@ namespace Mist{
|
|||
|
||||
/// This function decides where in the stream initial playback starts.
|
||||
/// The default implementation calls seek(0) for VoD.
|
||||
/// For live, it seeks to the last sync'ed keyframe of the main track, no closer than needsLookAhead ms from the end.
|
||||
/// For live, it seeks to the last sync'ed keyframe of the main track, no closer than needsLookAhead+minKeepAway ms from the end.
|
||||
/// Unless lastms < 5000, then it seeks to the first keyframe of the main track.
|
||||
/// Aborts if there is no main track or it has no keyframes.
|
||||
void Output::initialSeek(){
|
||||
|
@ -765,17 +765,17 @@ namespace Mist{
|
|||
bool good = true;
|
||||
//check if all tracks have data for this point in time
|
||||
for (std::set<unsigned long>::iterator ti = selectedTracks.begin(); ti != selectedTracks.end(); ++ti){
|
||||
if (myMeta.tracks[*ti].lastms < seekPos+needsLookAhead){good = false; break;}
|
||||
if (mainTrack == *ti){continue;}//skip self
|
||||
if (!myMeta.tracks.count(*ti)){
|
||||
HIGH_MSG("Skipping track %lu, not in tracks", *ti);
|
||||
continue;
|
||||
}//ignore missing tracks
|
||||
if (myMeta.tracks[*ti].lastms == myMeta.tracks[*ti].firstms){
|
||||
DTSC::Track & thisTrack = myMeta.tracks[*ti];
|
||||
if (thisTrack.lastms < seekPos+needsLookAhead+thisTrack.minKeepAway){good = false; break;}
|
||||
if (mainTrack == *ti){continue;}//skip self
|
||||
if (thisTrack.lastms == thisTrack.firstms){
|
||||
HIGH_MSG("Skipping track %lu, last equals first", *ti);
|
||||
continue;
|
||||
}//ignore point-tracks
|
||||
if (myMeta.tracks[*ti].lastms < seekPos){good = false; break;}
|
||||
HIGH_MSG("Track %lu is good", *ti);
|
||||
}
|
||||
//if yes, seek here
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue