comparison libmpdemux/demux_fli.c @ 3544:61b89c10e4e8

fli seeking implemented
author arpi
date Mon, 17 Dec 2001 00:24:03 +0000
parents 85feae032869
children e47b32c0eca8
comparison
equal deleted inserted replaced
3543:5a11cbf8791f 3544:61b89c10e4e8
20 int current_frame; 20 int current_frame;
21 off_t *filepos; 21 off_t *filepos;
22 unsigned int *frame_size; 22 unsigned int *frame_size;
23 } fli_frames_t; 23 } fli_frames_t;
24 24
25 void demux_seek_fli(demuxer_t *demuxer,float rel_seek_secs,int flags){
26 fli_frames_t *frames = (fli_frames_t *)demuxer->priv;
27 sh_video_t *sh_video = demuxer->video->sh;
28 int newpos=(flags&1)?0:frames->current_frame;
29 if(flags&2){
30 // float 0..1
31 newpos+=rel_seek_secs*frames->num_frames;
32 } else {
33 // secs
34 newpos+=rel_seek_secs*sh_video->fps;
35 }
36 if(newpos<0) newpos=0; else
37 if(newpos>frames->num_frames) newpos=frames->num_frames;
38 frames->current_frame=newpos;
39 }
40
25 // return value: 41 // return value:
26 // 0 = EOF or no stream found 42 // 0 = EOF or no stream found
27 // 1 = successfully read a packet 43 // 1 = successfully read a packet
28 int demux_fli_fill_buffer(demuxer_t *demuxer){ 44 int demux_fli_fill_buffer(demuxer_t *demuxer){
29 fli_frames_t *frames = (fli_frames_t *)demuxer->priv; 45 fli_frames_t *frames = (fli_frames_t *)demuxer->priv;
30 sh_video_t *sh_video = demuxer->video->sh; 46 sh_video_t *sh_video = demuxer->video->sh;
31 47
32 // see if the end has been reached 48 // see if the end has been reached
33 if (frames->current_frame == frames->num_frames) 49 if (frames->current_frame >= frames->num_frames)
34 return 0; 50 return 0;
35 51
36 // fetch the frame from the file 52 // fetch the frame from the file
37 // first, position the file properly since ds_read_packet() doesn't 53 // first, position the file properly since ds_read_packet() doesn't
38 // seem to do it, even though it takes a file offset as a parameter 54 // seem to do it, even though it takes a file offset as a parameter