MCPcopy Create free account
hub / github.com/OpenShot/libopenshot / getFrame

Method getFrame

src/Qt/PlayerPrivate.cpp:143–185  ·  view source on GitHub ↗

Get the next displayed frame (based on speed and direction)

Source from the content-addressed store, hash-verified

141
142 // Get the next displayed frame (based on speed and direction)
143 std::shared_ptr<openshot::Frame> PlayerPrivate::getFrame()
144 {
145 try {
146 // Getting new frame, so clear this flag
147 is_dirty = false;
148
149 // Get the next frame (based on speed)
150 if (video_position + speed >= 1 && video_position + speed <= reader->info.video_length) {
151 video_position = video_position + speed;
152
153 } else if (video_position + speed < 1) {
154 // Start of reader (prevent negative frame number and pause playback)
155 video_position = 1;
156 speed = 0;
157 } else if (video_position + speed > reader->info.video_length) {
158 // End of reader (prevent negative frame number and pause playback)
159 video_position = reader->info.video_length;
160 speed = 0;
161 }
162
163 if (frame && frame->number == video_position && video_position == last_video_position) {
164 // return cached frame
165 return frame;
166 }
167 else
168 {
169 // Increment playback frames (always in the positive direction)
170 playback_frames += std::abs(speed);
171
172 // Update playhead hint for cache window tracking without triggering seek behavior.
173 videoCache->NotifyPlaybackPosition(video_position);
174
175 // return frame from reader
176 return reader->GetFrame(video_position);
177 }
178
179 } catch (const ReaderClosed & e) {
180 // ...
181 } catch (const OutOfBoundsFrame & e) {
182 // ...
183 }
184 return std::shared_ptr<openshot::Frame>();
185 }
186
187 // Seek to a new position
188 void PlayerPrivate::Seek(int64_t new_position)

Callers

nothing calls this directly

Calls 2

GetFrameMethod · 0.45

Tested by

no test coverage detected