summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_fli.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/libmpdemux/demux_fli.c b/libmpdemux/demux_fli.c
index 367fbaac64..09970fb86a 100644
--- a/libmpdemux/demux_fli.c
+++ b/libmpdemux/demux_fli.c
@@ -55,6 +55,8 @@ demuxer_t* demux_open_fli(demuxer_t* demuxer){
fli_frames_t *frames = (fli_frames_t *)malloc(sizeof(fli_frames_t));
int frame_number;
int speed;
+ unsigned int frame_size;
+ int magic_number;
// go back to the beginning
stream_reset(demuxer->stream);
@@ -107,11 +109,21 @@ demuxer_t* demux_open_fli(demuxer_t* demuxer){
while ((!stream_eof(demuxer->stream)) && (frame_number < frames->num_frames))
{
frames->filepos[frame_number] = stream_tell(demuxer->stream);
- frames->frame_size[frame_number] = stream_read_dword_le(demuxer->stream);
- stream_skip(demuxer->stream, frames->frame_size[frame_number] - 4);
- frame_number++;
+ frame_size = stream_read_dword_le(demuxer->stream);
+ magic_number = stream_read_word_le(demuxer->stream);
+ stream_skip(demuxer->stream, frame_size - 6);
+
+ // if this chunk has the right magic number, index it
+ if (magic_number == 0xF1FA)
+ {
+ frames->frame_size[frame_number] = frame_size;
+ frame_number++;
+ }
}
+ // save the actual number of frames indexed
+ frames->num_frames = frame_number;
+
demuxer->priv = frames;
return demuxer;