public virtual void Close() { if (IsPlaying) { Stop(); } for (int i = 0; i < _tracks.Count; i++) { // TODO: ? _tracks[i].Dispose(); _tracks[i] = null; } _tracks.Clear(); _internalTracks.Clear(); _externalTracks.Clear(); _dirtyPalette = false; _palette = null; _startTime = 0; _audioVolume = Mixer.MaxChannelVolume; _audioBalance = 0; _pauseLevel = 0; _needsUpdate = false; _lastTimeChange = new Timestamp(0); _endTime = new Timestamp(0); _endTimeSet = false; _nextVideoTrack = null; _mainAudioTrack = null; }
protected void AddTrack(ITrack track, bool isExternal = false) { _tracks.Add(track); if (isExternal) { _externalTracks.Add(track); } else { _internalTracks.Add(track); } if (track.TrackType == TrackType.Audio) { // Update volume settings if it's an audio track ((AudioTrack)track).Volume = _audioVolume; ((AudioTrack)track).Balance = _audioBalance; if (!isExternal && SupportsAudioTrackSwitching()) { if (_mainAudioTrack != null) { // The main audio track has already been found ((AudioTrack)track).Mute = true; } else { // First audio track found . now the main one _mainAudioTrack = (AudioTrack)track; _mainAudioTrack.Mute = false; } } } else if (track.TrackType == TrackType.Video) { // If this track has a better time, update _nextVideoTrack if (_nextVideoTrack == null || ((VideoTrack)track).GetNextFrameStartTime() < _nextVideoTrack.GetNextFrameStartTime()) { _nextVideoTrack = (VideoTrack)track; } } // Keep the track paused if we're paused if (IsPaused) { track.Pause(true); } // Start the track if we're playing if (IsPlaying && track.TrackType == TrackType.Audio) { ((AudioTrack)track).Start(); } }
private VideoTrack FindNextVideoTrack() { _nextVideoTrack = null; uint bestTime = 0xFFFFFFFF; foreach (var t in _tracks) { if (t.TrackType == TrackType.Video && !t.EndOfTrack) { VideoTrack track = (VideoTrack)t; uint time = track.GetNextFrameStartTime(); if (time < bestTime) { bestTime = time; _nextVideoTrack = track; } } } return(_nextVideoTrack); }
private VideoTrack FindNextVideoTrack() { _nextVideoTrack = null; uint bestTime = 0xFFFFFFFF; foreach (var t in _tracks) { if (t.TrackType == TrackType.Video && !t.EndOfTrack) { VideoTrack track = (VideoTrack)t; uint time = track.GetNextFrameStartTime(); if (time < bestTime) { bestTime = time; _nextVideoTrack = track; } } } return _nextVideoTrack; }
protected void AddTrack(ITrack track, bool isExternal = false) { _tracks.Add(track); if (isExternal) _externalTracks.Add(track); else _internalTracks.Add(track); if (track.TrackType == TrackType.Audio) { // Update volume settings if it's an audio track ((AudioTrack)track).Volume = _audioVolume; ((AudioTrack)track).Balance = _audioBalance; if (!isExternal && SupportsAudioTrackSwitching()) { if (_mainAudioTrack != null) { // The main audio track has already been found ((AudioTrack)track).Mute = true; } else { // First audio track found . now the main one _mainAudioTrack = (AudioTrack)track; _mainAudioTrack.Mute = false; } } } else if (track.TrackType == TrackType.Video) { // If this track has a better time, update _nextVideoTrack if (_nextVideoTrack == null || ((VideoTrack)track).GetNextFrameStartTime() < _nextVideoTrack.GetNextFrameStartTime()) _nextVideoTrack = (VideoTrack)track; } // Keep the track paused if we're paused if (IsPaused) track.Pause(true); // Start the track if we're playing if (IsPlaying && track.TrackType == TrackType.Audio) ((AudioTrack)track).Start(); }
public virtual void Close() { if (IsPlaying) Stop(); for (int i = 0; i < _tracks.Count; i++) { // TODO: ? _tracks[i].Dispose(); _tracks[i] = null; } _tracks.Clear(); _internalTracks.Clear(); _externalTracks.Clear(); _dirtyPalette = false; _palette = null; _startTime = 0; _audioVolume = Mixer.MaxChannelVolume; _audioBalance = 0; _pauseLevel = 0; _needsUpdate = false; _lastTimeChange = new Timestamp(0); _endTime = new Timestamp(0); _endTimeSet = false; _nextVideoTrack = null; _mainAudioTrack = null; }