@@ -10,7 +10,10 @@ use super::{VideoFrameTexture, chunk_decoder::VideoSampleDecoder};
10
10
use crate :: {
11
11
RenderContext ,
12
12
resource_managers:: { GpuTexture2D , SourceImageDataFormat } ,
13
- video:: { DecoderDelayState , VideoPlayerError , chunk_decoder:: update_video_texture_with_frame} ,
13
+ video:: {
14
+ DecoderDelayState , InsufficientSampleDataError , VideoPlayerError ,
15
+ chunk_decoder:: update_video_texture_with_frame,
16
+ } ,
14
17
} ;
15
18
16
19
pub struct PlayerConfiguration {
@@ -200,14 +203,20 @@ impl VideoPlayer {
200
203
video_description : & re_video:: VideoDataDescription ,
201
204
video_buffers : & StableIndexDeque < & [ u8 ] > ,
202
205
) -> Result < VideoFrameTexture , VideoPlayerError > {
206
+ if video_description. gops . is_empty ( ) {
207
+ return Err ( InsufficientSampleDataError :: NoKeyFrames . into ( ) ) ;
208
+ }
209
+ if video_description. samples . is_empty ( ) {
210
+ return Err ( InsufficientSampleDataError :: NoSamples . into ( ) ) ;
211
+ }
203
212
if requested_pts. 0 < 0 {
204
213
return Err ( VideoPlayerError :: NegativeTimestamp ) ;
205
214
}
206
215
207
216
// Find which sample best represents the requested PTS.
208
217
let requested_sample_idx = video_description
209
218
. latest_sample_index_at_presentation_timestamp ( requested_pts)
210
- . ok_or ( VideoPlayerError :: EmptyVideo ) ?;
219
+ . ok_or ( InsufficientSampleDataError :: NoSamplesPriorToRequestedTimestamp ) ?;
211
220
let requested_sample = video_description. samples . get ( requested_sample_idx) ; // This is only `None` if we no longer have the sample around.
212
221
let requested_sample_pts =
213
222
requested_sample. map_or ( requested_pts, |s| s. presentation_timestamp ) ;
@@ -330,7 +339,7 @@ impl VideoPlayer {
330
339
. gop_index_containing_decode_timestamp (
331
340
video_description. samples [ requested_sample_idx] . decode_timestamp ,
332
341
)
333
- . ok_or ( VideoPlayerError :: EmptyVideo ) ?;
342
+ . ok_or ( InsufficientSampleDataError :: NoKeyFramesPriorToRequestedTimestamp ) ?;
334
343
335
344
let requested = SampleAndGopIndex {
336
345
sample_idx : requested_sample_idx,
@@ -508,7 +517,7 @@ impl VideoPlayer {
508
517
video_buffers : & StableIndexDeque < & [ u8 ] > ,
509
518
) -> Result < ( ) , VideoPlayerError > {
510
519
let Some ( gop) = video_description. gops . get ( gop_idx) else {
511
- return Err ( VideoPlayerError :: MissingSample ) ;
520
+ return Err ( InsufficientSampleDataError :: ExpectedSampleNotAvailable . into ( ) ) ;
512
521
} ;
513
522
514
523
self . enqueue_samples_of_gop ( video_description, gop_idx, & gop. sample_range , video_buffers)
0 commit comments