xoreos
0.0.5
|
A generic interface for video decoders. More...
#include <decoder.h>
Classes | |
class | AudioTrack |
An abstract representation of an audio track. More... | |
class | FixedRateVideoTrack |
A VideoTrack that is played at a constant rate. More... | |
class | Track |
An abstract representation of a track in a movie. More... | |
class | VideoTrack |
An abstract representation of a video track. More... | |
Public Types | |
enum | Scale { kScaleNone, kScaleUp, kScaleDown, kScaleUpDown } |
Public Member Functions | |
VideoDecoder () | |
~VideoDecoder () | |
void | setScale (Scale scale) |
bool | isPlaying () const |
Is the video currently playing? More... | |
virtual uint32 | getWidth () const |
Returns the width of the video's frames. More... | |
virtual uint32 | getHeight () const |
Returns the height of the video's frames. More... | |
void | start () |
Start playing the video. More... | |
void | abort () |
Abort the playing of the video. More... | |
bool | needsUpdate () const |
Check whether a new frame should be decoded, i.e. More... | |
bool | endOfVideo () const |
Returns if the video has reached the end or not. More... | |
bool | endOfVideoTracks () const |
Have all video tracks finished? More... | |
uint32 | getTime () const |
Returns the time position (in ms) of the current video. More... | |
uint32 | getTimeToNextFrame () const |
Return the time, in milliseconds, to the next frame. More... | |
void | calculateDistance () |
Calculate the object's distance. More... | |
void | render (Graphics::RenderPass pass) |
Render the object. More... | |
virtual Common::Timestamp | getDuration () const |
Get the duration of the video. More... | |
void | pauseVideo (bool pause) |
Pause or resume the video. More... | |
bool | isPaused () const |
Return whether the video is currently paused or not. More... | |
Public Member Functions inherited from Graphics::GLContainer | |
GLContainer () | |
~GLContainer () | |
void | rebuild () |
void | destroy () |
Public Member Functions inherited from Graphics::Queueable | |
Queueable () | |
virtual | ~Queueable () |
Public Member Functions inherited from Graphics::Renderable | |
Renderable (RenderableType type) | |
~Renderable () | |
bool | operator< (const Queueable &q) const |
virtual void | advanceTime (float dt) |
Advance time (used by renderables with animations). More... | |
virtual void | renderImmediate (const glm::mat4 &parentTransform) |
For shader based systems, don't sort anything, render this right_now. More... | |
virtual void | queueRender (const glm::mat4 &parentTransform) |
Queue the object for later rendering. More... | |
double | getDistance () const |
Get the distance of the object from the viewer. More... | |
uint32 | getID () const |
Get the object's unique ID. More... | |
bool | isClickable () const |
Is the object clickable? More... | |
void | setClickable (bool clickable) |
Set the object's clickable state. More... | |
const Common::UString & | getTag () const |
Get the object's tag. More... | |
void | setTag (const Common::UString &tag) |
Set the object's tag. More... | |
bool | isVisible () const |
Is the object visible? More... | |
virtual void | show () |
Show the object. More... | |
virtual void | hide () |
Hide the object. More... | |
virtual bool | isIn (float x, float y) const |
Is that point within the object? More... | |
virtual bool | isIn (float x, float y, float z) const |
Is that point within the object? More... | |
virtual bool | isIn (float x1, float y1, float z1, float x2, float y2, float z2) const |
Does the line from x1.y1.z1 to x2.y2.z2 intersect with the object? More... | |
Protected Types | |
typedef boost::shared_ptr< Track > | TrackPtr |
A Track pointer. More... | |
typedef boost::shared_ptr< const Track > | ConstTrackPtr |
A const Track pointer. More... | |
typedef boost::shared_ptr< AudioTrack > | AudioTrackPtr |
An AudioTrack pointer. More... | |
typedef boost::shared_ptr< VideoTrack > | VideoTrackPtr |
A VideoTrack pointer. More... | |
typedef std::vector< TrackPtr > | TrackList |
A list of tracks. More... | |
typedef std::vector< ConstTrackPtr > | ConstTrackList |
A list of const tracks. More... | |
Protected Member Functions | |
void | initVideo () |
Create a surface for video of these dimensions. More... | |
void | deinit () |
void | doRebuild () |
void | doDestroy () |
virtual void | decodeNextTrackFrame (VideoTrack &track)=0 |
Decode enough data for the next frame. More... | |
virtual void | checkAudioBuffer (AudioTrack &track, const Common::Timestamp &endTime) |
Ensure that there is enough audio buffered in the given track to reach the given timestamp. More... | |
void | addTrack (Track *track, bool isExternal=false) |
Define a track to be used by this class. More... | |
TrackPtr | getTrack (uint track) |
Get the given internal track based on its index. More... | |
ConstTrackPtr | getTrack (uint track) const |
Get the given internal track based on its index. More... | |
VideoTrackPtr | findNextVideoTrack () |
Set _nextVideoTrack to the video track with the lowest start time for the next frame. More... | |
TrackList | getInternalTracks () |
Get a copy of the internal tracks. More... | |
ConstTrackList | getInternalTracks () const |
Get a copy of the internal tracks. More... | |
Protected Member Functions inherited from Graphics::Queueable | |
bool | isInQueue (QueueType queue) const |
void | addToQueue (QueueType queue) |
void | removeFromQueue (QueueType queue) |
void | lockQueue (QueueType queue) |
void | unlockQueue (QueueType queue) |
void | sortQueue (QueueType queue) |
Protected Member Functions inherited from Graphics::Renderable | |
void | resort () |
void | lockFrame () |
void | unlockFrame () |
void | lockFrameIfVisible () |
void | unlockFrameIfVisible () |
Protected Attributes | |
bool | _needCopy |
Is new frame content available that needs to by copied? More... | |
Common::ScopedPtr< Graphics::Surface > | _surface |
The video's surface. More... | |
Protected Attributes inherited from Graphics::Renderable | |
QueueType | _queueExists |
QueueType | _queueVisible |
uint32 | _id |
bool | _clickable |
Common::UString | _tag |
double | _distance |
The distance of the object from the viewer. More... | |
Private Member Functions | |
void | stopAudio () |
Stop all audio tracks. More... | |
void | startAudio () |
Start the designated internal audio track and any external audio tracks. More... | |
bool | hasAudio () const |
void | update () |
Update the video, if necessary. More... | |
void | copyData () |
Copy the video image data to the texture. More... | |
void | getQuadDimensions (float &width, float &height) const |
Get the dimensions of the quad to draw the texture on. More... | |
Private Attributes | |
TrackList | _tracks |
Tracks owned by this VideoDecoder (both internal and external). More... | |
TrackList | _internalTracks |
Tracks internal to this VideoDecoder. More... | |
TrackList | _externalTracks |
Tracks loaded from externals files. More... | |
VideoTrackPtr | _nextVideoTrack |
The next video track that needs to display. More... | |
Graphics::TextureID | _texture |
float | _textureWidth |
float | _textureHeight |
Scale | _scale |
uint32 | _startTime |
The start time of the video, or -1 for not set. More... | |
uint32 | _pauseLevel |
The pause level of the video; 0 for not paused. More... | |
uint32 | _pauseStartTime |
The time when the track was first paused. More... | |
|
protected |
An AudioTrack pointer.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
A VideoTrack pointer.
Video::VideoDecoder::VideoDecoder | ( | ) |
Definition at line 48 of file decoder.cpp.
Video::VideoDecoder::~VideoDecoder | ( | ) |
Definition at line 56 of file decoder.cpp.
References _texture, deinit(), GfxMan, and stopAudio().
void Video::VideoDecoder::abort | ( | ) |
Abort the playing of the video.
Definition at line 405 of file decoder.cpp.
References Graphics::Renderable::hide(), and stopAudio().
|
protected |
Define a track to be used by this class.
The pointer is then owned by this base class.
track | The track to add |
isExternal | Is this an external track not found by loadStream()? |
Definition at line 152 of file decoder.cpp.
References _externalTracks, _internalTracks, _nextVideoTrack, _tracks, Video::VideoDecoder::Track::getTrackType(), isPaused(), isPlaying(), Video::VideoDecoder::Track::kTrackTypeAudio, Video::VideoDecoder::Track::kTrackTypeVideo, and Video::VideoDecoder::Track::pause().
Referenced by Video::Fader::Fader(), Video::Bink::load(), Video::XboxMediaVideo::load(), and Video::QuickTimeDecoder::load().
|
virtual |
Calculate the object's distance.
Implements Graphics::Renderable.
Definition at line 362 of file decoder.cpp.
|
protectedvirtual |
Ensure that there is enough audio buffered in the given track to reach the given timestamp.
Reimplemented in Video::QuickTimeDecoder, and Video::Bink.
Definition at line 436 of file decoder.cpp.
Referenced by update().
|
private |
|
protectedpure virtual |
Decode enough data for the next frame.
Currently, audio may be buffered here at the same time. This is deprecated in favor of using checkAudioBuffer().
Implemented in Video::Bink, Video::QuickTimeDecoder, Video::XboxMediaVideo, Video::ActimagineDecoder, and Video::Fader.
Referenced by update().
|
protected |
Definition at line 65 of file decoder.cpp.
References Graphics::Renderable::hide(), and Graphics::kQueueGLContainer.
Referenced by ~VideoDecoder().
|
protectedvirtual |
|
protectedvirtual |
Implements Graphics::GLContainer.
Definition at line 243 of file decoder.cpp.
bool Video::VideoDecoder::endOfVideo | ( | ) | const |
Returns if the video has reached the end or not.
Definition at line 106 of file decoder.cpp.
References _tracks.
Referenced by getTimeToNextFrame().
bool Video::VideoDecoder::endOfVideoTracks | ( | ) | const |
Have all video tracks finished?
Definition at line 114 of file decoder.cpp.
References _tracks, and Video::VideoDecoder::Track::kTrackTypeVideo.
Referenced by needsUpdate().
|
protected |
Set _nextVideoTrack to the video track with the lowest start time for the next frame.
Definition at line 195 of file decoder.cpp.
References _nextVideoTrack, _tracks, and Video::VideoDecoder::Track::kTrackTypeVideo.
Referenced by update().
|
virtual |
Get the duration of the video.
If the duration is unknown, this will return 0. If this is not overriden, it will take the length of the longest track.
Definition at line 439 of file decoder.cpp.
References _tracks.
|
virtual |
Returns the height of the video's frames.
By default, this finds the largest height between all of the loaded tracks. However, a subclass may override this if it does any kind of post-processing on it.
Definition at line 98 of file decoder.cpp.
References _tracks, and Video::VideoDecoder::Track::kTrackTypeVideo.
Referenced by getQuadDimensions(), and initVideo().
|
inlineprotected |
Get a copy of the internal tracks.
Definition at line 461 of file decoder.h.
References _internalTracks.
|
protected |
Get a copy of the internal tracks.
Definition at line 214 of file decoder.cpp.
References _internalTracks.
|
private |
Get the dimensions of the quad to draw the texture on.
Definition at line 332 of file decoder.cpp.
References _scale, getHeight(), getWidth(), kScaleDown, kScaleNone, kScaleUp, and WindowMan.
Referenced by render().
uint32 Video::VideoDecoder::getTime | ( | ) | const |
Returns the time position (in ms) of the current video.
Definition at line 411 of file decoder.cpp.
References _pauseStartTime, _startTime, EventMan, isPaused(), and isPlaying().
Referenced by getTimeToNextFrame().
uint32 Video::VideoDecoder::getTimeToNextFrame | ( | ) | const |
Return the time, in milliseconds, to the next frame.
Definition at line 423 of file decoder.cpp.
References _nextVideoTrack, endOfVideo(), and getTime().
Referenced by needsUpdate().
|
protected |
Get the given internal track based on its index.
Definition at line 181 of file decoder.cpp.
References _internalTracks.
|
protected |
Get the given internal track based on its index.
Definition at line 188 of file decoder.cpp.
References _internalTracks.
|
virtual |
Returns the width of the video's frames.
By default, this finds the largest width between all of the loaded tracks. However, a subclass may override this if it does any kind of post-processing on it.
Definition at line 90 of file decoder.cpp.
References _tracks, and Video::VideoDecoder::Track::kTrackTypeVideo.
Referenced by getQuadDimensions(), and initVideo().
|
private |
Definition at line 235 of file decoder.cpp.
References _tracks, and Video::VideoDecoder::Track::kTrackTypeAudio.
|
protected |
Create a surface for video of these dimensions.
Since the data will be copied into the graphics card memory, the surface's actual dimensions will be rounded up to the next power of two values.
The surface's width and height is taken from getWidth() and getHeight().
The surface's pixel format is always BGRA8888.
Definition at line 71 of file decoder.cpp.
References _surface, _textureHeight, _textureWidth, getHeight(), getWidth(), NEXTPOWER2(), Graphics::GLContainer::rebuild(), and Common::ScopedPtrBase< T, Deallocator >::reset().
Referenced by Video::Fader::Fader(), Video::Bink::load(), Video::XboxMediaVideo::load(), and Video::QuickTimeDecoder::load().
|
inline |
Return whether the video is currently paused or not.
Definition at line 152 of file decoder.h.
References _pauseLevel.
Referenced by addTrack(), getTime(), and Video::VideoDecoder::AudioTrack::start().
bool Video::VideoDecoder::isPlaying | ( | ) | const |
Is the video currently playing?
Definition at line 293 of file decoder.cpp.
References _startTime, and _tracks.
Referenced by addTrack(), getTime(), and render().
bool Video::VideoDecoder::needsUpdate | ( | ) | const |
Check whether a new frame should be decoded, i.e.
because enough time has elapsed since the last frame was decoded.
Definition at line 122 of file decoder.cpp.
References endOfVideoTracks(), and getTimeToNextFrame().
Referenced by update().
void Video::VideoDecoder::pauseVideo | ( | bool | pause | ) |
Pause or resume the video.
This should stop/resume any audio playback and other stuff. The initial pause time is kept so that any timing variables can be updated appropriately.
This is a convenience method which automatically keeps track on how often the video has been paused, ensuring that after pausing an video e.g. twice, it has to be unpaused twice before actuallying resuming.
pause | true to pause the video, false to resume it |
Definition at line 126 of file decoder.cpp.
References _pauseLevel, _pauseStartTime, _startTime, _tracks, and EventMan.
|
virtual |
Render the object.
Implements Graphics::Renderable.
Definition at line 365 of file decoder.cpp.
References _texture, _textureHeight, _textureWidth, getQuadDimensions(), isPlaying(), Graphics::kRenderPassTransparent, pass, and update().
void Video::VideoDecoder::setScale | ( | Scale | scale | ) |
Definition at line 289 of file decoder.cpp.
References _scale.
void Video::VideoDecoder::start | ( | ) |
Start playing the video.
Definition at line 397 of file decoder.cpp.
References _startTime, EventMan, Graphics::Renderable::show(), and startAudio().
|
private |
Start the designated internal audio track and any external audio tracks.
Definition at line 223 of file decoder.cpp.
References _tracks, and Video::VideoDecoder::Track::kTrackTypeAudio.
Referenced by start().
|
private |
Stop all audio tracks.
Definition at line 229 of file decoder.cpp.
References _tracks, and Video::VideoDecoder::Track::kTrackTypeAudio.
Referenced by abort(), and ~VideoDecoder().
|
private |
Update the video, if necessary.
Definition at line 304 of file decoder.cpp.
References _internalTracks, _nextVideoTrack, Video::VideoDecoder::AudioTrack::canBufferData(), checkAudioBuffer(), copyData(), debugC(), decodeNextTrackFrame(), findNextVideoTrack(), Common::kDebugVideo, Video::VideoDecoder::Track::kTrackTypeAudio, and needsUpdate().
Referenced by render().
|
private |
Tracks loaded from externals files.
Definition at line 471 of file decoder.h.
Referenced by addTrack().
|
private |
Tracks internal to this VideoDecoder.
Definition at line 470 of file decoder.h.
Referenced by addTrack(), getInternalTracks(), getTrack(), and update().
|
protected |
Is new frame content available that needs to by copied?
Definition at line 391 of file decoder.h.
Referenced by copyData(), Video::Fader::decodeNextTrackFrame(), Video::QuickTimeDecoder::decodeNextTrackFrame(), Video::Bink::decodeNextTrackFrame(), and Video::XboxMediaVideo::processNextFrame().
|
private |
The next video track that needs to display.
Definition at line 473 of file decoder.h.
Referenced by addTrack(), findNextVideoTrack(), getTimeToNextFrame(), and update().
|
private |
The pause level of the video; 0 for not paused.
Definition at line 491 of file decoder.h.
Referenced by isPaused(), and pauseVideo().
|
private |
The time when the track was first paused.
Definition at line 494 of file decoder.h.
Referenced by getTime(), and pauseVideo().
|
private |
Definition at line 484 of file decoder.h.
Referenced by getQuadDimensions(), and setScale().
|
private |
The start time of the video, or -1 for not set.
Definition at line 488 of file decoder.h.
Referenced by getTime(), isPlaying(), pauseVideo(), and start().
|
protected |
The video's surface.
Definition at line 393 of file decoder.h.
Referenced by copyData(), Video::Fader::decodeNextTrackFrame(), Video::QuickTimeDecoder::decodeNextTrackFrame(), Video::Bink::decodeNextTrackFrame(), doRebuild(), initVideo(), and Video::XboxMediaVideo::processNextFrame().
|
private |
Definition at line 479 of file decoder.h.
Referenced by copyData(), doDestroy(), doRebuild(), render(), and ~VideoDecoder().
|
private |
Definition at line 482 of file decoder.h.
Referenced by initVideo(), and render().
|
private |
Definition at line 481 of file decoder.h.
Referenced by initVideo(), and render().
|
private |
Tracks owned by this VideoDecoder (both internal and external).
Definition at line 469 of file decoder.h.
Referenced by addTrack(), endOfVideo(), endOfVideoTracks(), findNextVideoTrack(), getDuration(), getHeight(), getWidth(), hasAudio(), isPlaying(), pauseVideo(), startAudio(), and stopAudio().