historical/toontown-classic.git/panda/include/movieAudioCursor.I
2024-01-16 11:20:27 -06:00

104 lines
2.7 KiB
Text

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file movieAudioCursor.I
* @author jyelon
* @date 2007-07-02
*/
/**
* Returns the MovieAudio which this cursor references.
*/
INLINE PT(MovieAudio) MovieAudioCursor::
get_source() const {
return _source;
}
/**
* Returns the audio sample rate.
*/
INLINE int MovieAudioCursor::
audio_rate() const {
return _audio_rate;
}
/**
* Returns the number of audio channels (ie, two for stereo, one for mono).
*/
INLINE int MovieAudioCursor::
audio_channels() const {
return _audio_channels;
}
/**
* Returns the length of the movie. Attempting to read audio samples beyond
* the specified length will produce silent samples.
*
* Some kinds of Movie, such as internet TV station, might not have a
* predictable length. In that case, the length will be set to a very large
* number: 1.0E10.
*
* Some AVI files have incorrect length values encoded into them - they may be
* a second or two long or short. When playing such an AVI using the Movie
* class, you may see a slightly truncated video, or a slightly elongated
* video (padded with black frames). There are utilities out there to fix the
* length values in AVI files.
*
* An audio consumer needs to check the length, the ready status, and the
* aborted flag.
*/
INLINE double MovieAudioCursor::
length() const {
return _length;
}
/**
* Returns true if the movie can seek. If this is true, seeking is still not
* guaranteed to be fast: for some movies, seeking is implemented by rewinding
* to the beginning and then fast-forwarding to the desired location. Even if
* the movie cannot seek, the seek method can still advance to an arbitrary
* location by reading samples and discarding them. However, to move
* backward, can_seek must return true.
*/
INLINE bool MovieAudioCursor::
can_seek() const {
return _can_seek;
}
/**
* Returns true if seek operations are constant time.
*/
INLINE bool MovieAudioCursor::
can_seek_fast() const {
return _can_seek_fast;
}
/**
* If aborted is true, it means that the "ready" samples are not being
* replenished. See the method "ready" for an explanation.
*/
INLINE bool MovieAudioCursor::
aborted() const {
return _aborted;
}
/**
* Returns the current offset within the file.
*/
INLINE double MovieAudioCursor::
tell() const {
return _last_seek + ((_samples_read * 1.0) / _audio_rate);
}
/**
* Skip audio samples from the stream. This is mostly for debugging purposes.
*/
INLINE void MovieAudioCursor::
skip_samples(int n) {
read_samples(n, (int16_t*)0);
}