Mercurial > mplayer.hg
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 }; |