comparison libmpdemux/demux_fli.c @ 16175:6b86089c2edd

Demuxer modularization Demuxer selection by name with -demuxer command (bakward compatible)
author rtognimp
date Fri, 05 Aug 2005 19:57:47 +0000
parents e3c3d01e9b86
children 67c30d47ffd4
comparison
equal deleted inserted replaced
16174:b118c000ddd2 16175:6b86089c2edd
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){ 25 static void demux_seek_fli(demuxer_t *demuxer,float rel_seek_secs,int flags){
26 fli_frames_t *frames = (fli_frames_t *)demuxer->priv; 26 fli_frames_t *frames = (fli_frames_t *)demuxer->priv;
27 sh_video_t *sh_video = demuxer->video->sh; 27 sh_video_t *sh_video = demuxer->video->sh;
28 int newpos=(flags&1)?0:frames->current_frame; 28 int newpos=(flags&1)?0:frames->current_frame;
29 if(flags&2){ 29 if(flags&2){
30 // float 0..1 30 // float 0..1
39 } 39 }
40 40
41 // return value: 41 // return value:
42 // 0 = EOF or no stream found 42 // 0 = EOF or no stream found
43 // 1 = successfully read a packet 43 // 1 = successfully read a packet
44 int demux_fli_fill_buffer(demuxer_t *demuxer){ 44 static int demux_fli_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds){
45 fli_frames_t *frames = (fli_frames_t *)demuxer->priv; 45 fli_frames_t *frames = (fli_frames_t *)demuxer->priv;
46 sh_video_t *sh_video = demuxer->video->sh; 46 sh_video_t *sh_video = demuxer->video->sh;
47 47
48 // see if the end has been reached 48 // see if the end has been reached
49 if (frames->current_frame >= frames->num_frames) 49 if (frames->current_frame >= frames->num_frames)
65 frames->current_frame++; 65 frames->current_frame++;
66 66
67 return 1; 67 return 1;
68 } 68 }
69 69
70 demuxer_t* demux_open_fli(demuxer_t* demuxer){ 70 static demuxer_t* demux_open_fli(demuxer_t* demuxer){
71 sh_video_t *sh_video = NULL; 71 sh_video_t *sh_video = NULL;
72 fli_frames_t *frames = (fli_frames_t *)malloc(sizeof(fli_frames_t)); 72 fli_frames_t *frames = (fli_frames_t *)malloc(sizeof(fli_frames_t));
73 int frame_number; 73 int frame_number;
74 int speed; 74 int speed;
75 unsigned int frame_size; 75 unsigned int frame_size;
162 demuxer->priv = frames; 162 demuxer->priv = frames;
163 163
164 return demuxer; 164 return demuxer;
165 } 165 }
166 166
167 void demux_close_fli(demuxer_t* demuxer) { 167 static void demux_close_fli(demuxer_t* demuxer) {
168 fli_frames_t *frames = demuxer->priv; 168 fli_frames_t *frames = demuxer->priv;
169 169
170 if(!frames) 170 if(!frames)
171 return; 171 return;
172 172
176 free(frames->frame_size); 176 free(frames->frame_size);
177 177
178 free(frames); 178 free(frames);
179 179
180 } 180 }
181
182
183 static int fli_check_file(demuxer_t* demuxer)
184 {
185 int id;
186
187 stream_seek(demuxer->stream, 4);
188 id=stream_read_word_le(demuxer->stream);
189 // check for the FLI file magic number
190 if((id==0xAF11) || (id==0xAF12))
191 return DEMUXER_TYPE_FLI;
192
193 return 0;
194 }
195
196
197 demuxer_desc_t demuxer_desc_fli = {
198 "Autodesk FLIC demuxer",
199 "fli",
200 "FLI",
201 "Mike Melanson",
202 "Supports also some extensions",
203 DEMUXER_TYPE_FLI,
204 0, // unsafe autodetect (short signature)
205 fli_check_file,
206 demux_fli_fill_buffer,
207 demux_open_fli,
208 demux_close_fli,
209 demux_seek_fli,
210 NULL
211 };