Ogg support fixed and re-added. Squash of various commits made by Wouter Spruit.
This commit is contained in:
		
							parent
							
								
									689e1d714e
								
							
						
					
					
						commit
						4d9f4da3f1
					
				
					 11 changed files with 1238 additions and 465 deletions
				
			
		
							
								
								
									
										37
									
								
								lib/dtsc.cpp
									
										
									
									
									
								
							
							
						
						
									
										37
									
								
								lib/dtsc.cpp
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -172,7 +172,7 @@ void DTSC::Stream::endStream() {
 | 
			
		|||
  if (!metadata.tracks.size()) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  for (std::map<int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
  for (std::map<unsigned int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
    JSON::Value newPack;
 | 
			
		||||
    newPack["time"] = (long long)it->second.lastms;
 | 
			
		||||
    newPack["trackid"] = it->first;
 | 
			
		||||
| 
						 | 
				
			
			@ -387,7 +387,7 @@ DTSC::datatype DTSC::Stream::lastType() {
 | 
			
		|||
 | 
			
		||||
/// Returns true if the current stream contains at least one video track.
 | 
			
		||||
bool DTSC::Stream::hasVideo() {
 | 
			
		||||
  for (std::map<int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
  for (std::map<unsigned int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
    if (it->second.type == "video") {
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -397,7 +397,7 @@ bool DTSC::Stream::hasVideo() {
 | 
			
		|||
 | 
			
		||||
/// Returns true if the current stream contains at least one audio track.
 | 
			
		||||
bool DTSC::Stream::hasAudio() {
 | 
			
		||||
  for (std::map<int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
  for (std::map<unsigned int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
    if (it->second.type == "audio") {
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -470,7 +470,7 @@ int DTSC::Stream::canSeekms(unsigned int ms) {
 | 
			
		|||
    return 1;
 | 
			
		||||
  }
 | 
			
		||||
  //loop trough all the tracks
 | 
			
		||||
  for (std::map<int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
  for (std::map<unsigned int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
 | 
			
		||||
    if (it->second.keys.size()) {
 | 
			
		||||
      if (it->second.keys[0].getTime() <= ms && it->second.keys[it->second.keys.size() - 1].getTime() >= ms) {
 | 
			
		||||
        return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -488,10 +488,10 @@ int DTSC::Stream::canSeekms(unsigned int ms) {
 | 
			
		|||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DTSC::livePos DTSC::Stream::msSeek(unsigned int ms, std::set<int> & allowedTracks) {
 | 
			
		||||
  std::set<int> seekTracks = allowedTracks;
 | 
			
		||||
DTSC::livePos DTSC::Stream::msSeek(unsigned int ms, std::set<unsigned int> & allowedTracks) {
 | 
			
		||||
  std::set<unsigned int> seekTracks = allowedTracks;
 | 
			
		||||
  livePos result = buffers.begin()->first;
 | 
			
		||||
  for (std::set<int>::iterator it = allowedTracks.begin(); it != allowedTracks.end(); it++) {
 | 
			
		||||
  for (std::set<unsigned int>::iterator it = allowedTracks.begin(); it != allowedTracks.end(); it++) {
 | 
			
		||||
    if (metadata.tracks[*it].type == "video") {
 | 
			
		||||
      int trackNo = *it;
 | 
			
		||||
      seekTracks.clear();
 | 
			
		||||
| 
						 | 
				
			
			@ -514,12 +514,12 @@ DTSC::livePos DTSC::Stream::msSeek(unsigned int ms, std::set<int> & allowedTrack
 | 
			
		|||
 | 
			
		||||
/// Returns whether the current position is the last currently available position within allowedTracks.
 | 
			
		||||
/// Simply returns the result of getNext(pos, allowedTracks) == pos
 | 
			
		||||
bool DTSC::Stream::isNewest(DTSC::livePos & pos, std::set<int> & allowedTracks) {
 | 
			
		||||
bool DTSC::Stream::isNewest(DTSC::livePos & pos, std::set<unsigned int> & allowedTracks) {
 | 
			
		||||
  return getNext(pos, allowedTracks) == pos;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Returns the next available position within allowedTracks, or the current position if no next is availble.
 | 
			
		||||
DTSC::livePos DTSC::Stream::getNext(DTSC::livePos & pos, std::set<int> & allowedTracks) {
 | 
			
		||||
DTSC::livePos DTSC::Stream::getNext(DTSC::livePos & pos, std::set<unsigned int> & allowedTracks) {
 | 
			
		||||
  std::map<livePos, JSON::Value>::iterator iter = buffers.upper_bound(pos);
 | 
			
		||||
  while (iter != buffers.end()) {
 | 
			
		||||
    if (allowedTracks.count(iter->first.trackID)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -856,7 +856,10 @@ void DTSC::File::seekNext() {
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (insert) {
 | 
			
		||||
    if (insert){
 | 
			
		||||
      if (tmpPos.seekTime > 0xffffffffffffff00ll){
 | 
			
		||||
        tmpPos.seekTime = 0;
 | 
			
		||||
      }
 | 
			
		||||
      currentPositions.insert(tmpPos);
 | 
			
		||||
    } else {
 | 
			
		||||
      seek_time(myPack.getTime() + 1, myPack.getTrackId(), true);
 | 
			
		||||
| 
						 | 
				
			
			@ -865,8 +868,7 @@ void DTSC::File::seekNext() {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void DTSC::File::parseNext() {
 | 
			
		||||
void DTSC::File::parseNext(){
 | 
			
		||||
  lastreadpos = ftell(F);
 | 
			
		||||
  if (fread(buffer, 4, 1, F) != 1) {
 | 
			
		||||
    if (feof(F)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -947,7 +949,7 @@ DTSC::Packet & DTSC::File::getPacket() {
 | 
			
		|||
  return myPack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool DTSC::File::seek_time(unsigned int ms, int trackNo, bool forceSeek) {
 | 
			
		||||
bool DTSC::File::seek_time(unsigned int ms, unsigned int trackNo, bool forceSeek) {
 | 
			
		||||
  seekPos tmpPos;
 | 
			
		||||
  tmpPos.trackID = trackNo;
 | 
			
		||||
  if (!forceSeek && myPack && ms > myPack.getTime() && trackNo >= myPack.getTrackId()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1012,7 +1014,10 @@ bool DTSC::File::seek_time(unsigned int ms, int trackNo, bool forceSeek) {
 | 
			
		|||
      continue;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  DEBUG_MSG(DLVL_HIGH, "Seek to %d:%d resulted in %lli", trackNo, ms, tmpPos.seekTime);
 | 
			
		||||
  //DEBUG_MSG(DLVL_HIGH, "Seek to %u:%d resulted in %lli", trackNo, ms, tmpPos.seekTime);
 | 
			
		||||
  if (tmpPos.seekTime > 0xffffffffffffff00ll){
 | 
			
		||||
    tmpPos.seekTime = 0;
 | 
			
		||||
  }
 | 
			
		||||
  currentPositions.insert(tmpPos);
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1022,7 +1027,7 @@ bool DTSC::File::seek_time(unsigned int ms, int trackNo, bool forceSeek) {
 | 
			
		|||
bool DTSC::File::seek_time(unsigned int ms) {
 | 
			
		||||
  currentPositions.clear();
 | 
			
		||||
  if (selectedTracks.size()) {
 | 
			
		||||
    for (std::set<int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++) {
 | 
			
		||||
    for (std::set<unsigned int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++) {
 | 
			
		||||
      seek_time(ms, (*it), true);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -1070,7 +1075,7 @@ bool DTSC::File::atKeyframe() {
 | 
			
		|||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DTSC::File::selectTracks(std::set<int> & tracks) {
 | 
			
		||||
void DTSC::File::selectTracks(std::set<unsigned int> & tracks) {
 | 
			
		||||
  selectedTracks = tracks;
 | 
			
		||||
  currentPositions.clear();
 | 
			
		||||
  seek_time(0);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue