Panda3D
movieVideoCursor.I
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file movieVideoCursor.I
10  * @author jyelon
11  * @date 2007-07-02
12  */
13 
14 /**
15  * Get the MovieVideo which this cursor references.
16  */
17 INLINE PT(MovieVideo) MovieVideoCursor::
18 get_source() const {
19  return _source;
20 }
21 
22 /**
23  * Get the horizontal size of the movie.
24  */
25 INLINE int MovieVideoCursor::
26 size_x() const {
27  return _size_x;
28 }
29 
30 /**
31  * Get the vertical size of the movie.
32  */
33 INLINE int MovieVideoCursor::
34 size_y() const {
35  return _size_y;
36 }
37 
38 /**
39  * Returns 4 if the movie has an alpha channel, 3 otherwise.
40  */
41 INLINE int MovieVideoCursor::
42 get_num_components() const {
43  return _num_components;
44 }
45 
46 /**
47  * Returns the length of the movie.
48  *
49  * Some kinds of Movie, such as internet TV station, might not have a
50  * predictable length. In that case, the length will be set to a very large
51  * number: 1.0E10. If the internet TV station goes offline, the video or audio
52  * stream will set its abort flag. Reaching the end of the movie (ie, the
53  * specified length) normally does not cause the abort flag to be set.
54  *
55  * The video and audio streams produced by get_video and get_audio are always
56  * of unlimited duration - you can always read another video frame or another
57  * audio sample. This is true even if the specified length is reached, or an
58  * abort is flagged. If either stream runs out of data, it will synthesize
59  * blank video frames and silent audio samples as necessary to satisfy read
60  * requests.
61  *
62  * Some AVI files have incorrect length values encoded into them - usually,
63  * they're a second or two long or short. When playing such an AVI using the
64  * Movie class, you may see a slightly truncated video, or a slightly
65  * elongated video (padded with black frames). There are utilities out there
66  * to fix the length values in AVI files.
67  *
68  */
69 INLINE double MovieVideoCursor::
70 length() const {
71  return _length;
72 }
73 
74 /**
75  * Returns true if the movie can seek. If this is true, seeking is still not
76  * guaranteed to be fast: for some movies, seeking is implemented by rewinding
77  * to the beginning and then fast-forwarding to the desired location. Even if
78  * the movie cannot seek, the fetch methods can still advance to an arbitrary
79  * location by reading frames and discarding them. However, to move backward,
80  * can_seek must return true.
81  */
82 INLINE bool MovieVideoCursor::
83 can_seek() const {
84  return _can_seek;
85 }
86 
87 /**
88  * Returns true if seek operations are constant time.
89  */
90 INLINE bool MovieVideoCursor::
91 can_seek_fast() const {
92  return _can_seek_fast;
93 }
94 
95 /**
96  * Returns true if the video has aborted prematurely. For example, this could
97  * occur if the Movie was actually an internet TV station, and the connection
98  * was lost. Reaching the normal end of the video does not constitute an
99  * 'abort' condition.
100  */
101 INLINE bool MovieVideoCursor::
102 aborted() const {
103  return _aborted;
104 }
105 
106 /**
107  * Returns true if the video frames are being "pushed" at us by something that
108  * operates at its own speed - for example, a webcam. In this case, the
109  * frames come when they're ready to come. Attempting to read too soon will
110  * produce nothing, reading too late will cause frames to be dropped. In this
111  * case, the ready flag can be used to determine whether or not a frame is
112  * ready for reading.
113  *
114  * When streaming, you should still pay attention to last_start, but the value
115  * of next_start is only a guess.
116  */
117 INLINE bool MovieVideoCursor::
118 streaming() const {
119  return _streaming;
120 }
121 
122 /**
123  * Returns true if the cursor is a streaming source, and if a video frame is
124  * ready to be read. For non- streaming sources, this is always false.
125  */
126 INLINE bool MovieVideoCursor::
127 ready() const {
128  return _ready;
129 }
A MovieVideo is actually any source that provides a sequence of video frames.
Definition: movieVideo.h:38