diff libmpdemux/demuxer.c @ 3101:637e540831b9

mostly complete support for loading and decoding FLI/FLC animations
author melanson
date Sat, 24 Nov 2001 23:58:12 +0000
parents a98d486508db
children 8dae87740d33
line wrap: on
line diff
--- a/libmpdemux/demuxer.c	Sat Nov 24 23:28:22 2001 +0000
+++ b/libmpdemux/demuxer.c	Sat Nov 24 23:58:12 2001 +0000
@@ -149,6 +149,7 @@
 // return value:
 //     0 = EOF or no stream found or invalid type
 //     1 = successfully read a packet
+int demux_fli_fill_buffer(demuxer_t *demux);
 int demux_mpg_es_fill_buffer(demuxer_t *demux);
 int demux_mpg_fill_buffer(demuxer_t *demux);
 int demux_avi_fill_buffer(demuxer_t *demux);
@@ -170,6 +171,7 @@
   // Note: parameter 'ds' can be NULL!
 //  printf("demux->type=%d\n",demux->type);
   switch(demux->type){
+    case DEMUXER_TYPE_FLI: return demux_fli_fill_buffer(demux);
     case DEMUXER_TYPE_MPEG_ES: return demux_mpg_es_fill_buffer(demux);
     case DEMUXER_TYPE_MPEG_PS: return demux_mpg_fill_buffer(demux);
     case DEMUXER_TYPE_AVI: return demux_avi_fill_buffer(demux);
@@ -354,6 +356,7 @@
 demuxer_t* demux_open_avi(demuxer_t* demuxer);
 int mov_check_file(demuxer_t* demuxer);
 int mov_read_header(demuxer_t* demuxer);
+int demux_open_fli(demuxer_t* demuxer);
 
 extern int vivo_check_file(demuxer_t *demuxer);
 extern void demux_open_vivo(demuxer_t *demuxer);
@@ -381,6 +384,20 @@
   file_format=DEMUXER_TYPE_TV;
 }
 #endif
+//=============== Try to open as FLI file: =================
+if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_FLI){
+  demuxer=new_demuxer(stream,DEMUXER_TYPE_FLI,audio_id,video_id,dvdsub_id);
+  {
+    int size=stream_read_dword_le(demuxer->stream);
+    int id=stream_read_word_le(demuxer->stream);
+    // chech for the FLI file magic number
+    if((id==0xAF11) || (id==0xAF12)){ 
+      mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_DetectedFLIfile);
+      file_format=DEMUXER_TYPE_FLI;
+    }
+  }
+}
+
 //=============== Try to open as AVI file: =================
 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_AVI){
   demuxer=new_demuxer(stream,DEMUXER_TYPE_AVI,audio_id,video_id,dvdsub_id);
@@ -481,6 +498,10 @@
 demuxer->file_format=file_format;
 
 switch(file_format){
+ case DEMUXER_TYPE_FLI: {
+  if (!demux_open_fli(demuxer)) return NULL;
+  break;
+ }
  case DEMUXER_TYPE_MOV: {
   if(!mov_read_header(demuxer)) return NULL;
 //  sh_video=d_video->sh;if(sh_video) sh_video->ds=d_video;