changeset 774:ec7e6bd74b46

very outdated, and does teh same as -dump[audio|video] in mplayer
author arpi_esp
date Fri, 11 May 2001 23:07:15 +0000
parents 50c5a214b0d4
children 1cc160d46319
files aviparse.c
diffstat 1 files changed, 0 insertions(+), 336 deletions(-) [+]
line wrap: on
line diff
--- a/aviparse.c	Fri May 11 23:01:52 2001 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,336 +0,0 @@
-// AVI Parser tool   v0.1   (C) 2000. by A'rpi/ESP-team
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <signal.h>
-
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <sys/mman.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <linux/cdrom.h>
-
-#include "config.h"
-
-#include "loader.h"
-#include "wine/avifmt.h"
-//#include "libvo/video_out.h"
-
-#include "linux/timer.h"
-#include "linux/shmem.h"
-
-#include "help_avp.h"
-
-#define DEBUG if(0)
-
-//static int show_packets=0;
-
-typedef struct {
-  // file:
-  MainAVIHeader avih;
-  unsigned int movi_start;
-  unsigned int movi_end;
-  // index:
-  AVIINDEXENTRY* idx;
-  int idx_size;
-  int idx_pos;
-//  int a_idx;
-//  int v_idx;
-  // video:
-  AVIStreamHeader video;
-  char *video_codec;
-  BITMAPINFOHEADER bih;   // in format
-  BITMAPINFOHEADER o_bih; // out format
-  HIC hic;
-  void *our_out_buffer;
-  char yuv_supported;   // 1 if codec support YUY2 output format
-  char yuv_hack_needed; // requires for divx & mpeg4
-  // audio:
-  AVIStreamHeader audio;
-  char *audio_codec;
-  char wf_ext[64];     // in format
-  WAVEFORMATEX wf;     // out format
-  HACMSTREAM srcstream;
-  int audio_minsize;
-} avi_header_t;
-
-avi_header_t avi_header;
-
-#include "aviprint.c"
-//#include "codecs.c"
-
-//**************************************************************************//
-#include "stream.c"
-//#include "demuxer.c"
-//#include "demux_avi.c"
-
-static stream_t* stream=NULL;
-
-//**************************************************************************//
-
-extern int errno;
-static int play_in_bg=0;
-
-void exit_player(){
-//  int tmp;
-  // restore terminal:
-  getch2_disable();
-  printf("\n\n");
-  if(play_in_bg) system("xsetroot -solid \\#000000");
-  exit(1);
-}
-
-void exit_sighandler(int x){
-  printf("\nmpgplay2 interrupted by signal %d\n",x);
-  exit_player();
-}
-
-
-int main(int argc,char* argv[]){
-char* filename=NULL; //"MI2-Trailer.avi";
-int i;
-//int seek_to_sec=0;
-int seek_to_byte=0;
-int f; // filedes
-int has_audio=1;
-//int audio_format=0;
-//int alsa=0;
-//int audio_buffer_size=-1;
-int audio_id=-1;
-//int video_id=-1;
-//float default_max_pts_correction=0.01f;
-//int delay_corrected=0;
-//float force_fps=0;
-//float default_fps=25;
-//float audio_delay=0;
-int stream_type;
-//int elementary_stream=0;
-int vcd_track=0;
-#ifdef VCD_CACHE
-int vcd_cache_size=128;
-#endif
-//char* video_driver="mga"; // default
-//int out_fmt=0;
-int idx_filepos=0;
-FILE *audiofile=NULL;
-FILE *videofile=NULL;
-char *audiofile_name=NULL;
-char *videofile_name=NULL;
-
-  printf("%s",banner_text);
-
-for(i=1;i<argc;i++){
-  if(strcmp(argv[i],"-afile")==0)  audiofile_name=argv[++i]; else
-  if(strcmp(argv[i],"-vfile")==0)  videofile_name=argv[++i]; else
-//  if(strcmp(argv[i],"-sb")==0) seek_to_byte=strtol(argv[++i],NULL,0); else
-  if(strcmp(argv[i],"-aid")==0) audio_id=strtol(argv[++i],NULL,0); else
-//  if(strcmp(argv[i],"-vid")==0) video_id=strtol(argv[++i],NULL,0); else
-//  if(strcmp(argv[i],"-afm")==0) audio_format=strtol(argv[++i],NULL,0); else
-//  if(strcmp(argv[i],"-vcd")==0) vcd_track=strtol(argv[++i],NULL,0); else
-  if(strcmp(argv[i],"-h")==0) break; else
-  if(strcmp(argv[i],"--help")==0) break; else
-  { if(filename){ printf("invalid option: %s\n",filename);exit(1);}
-    filename=argv[i];
-  }
-}
-
-if(!filename){
-  if(vcd_track) filename="/dev/cdrom"; 
-//  else
-//  filename="/4/Film/Joan of Arc [Hun DivX]/Joan of Arc - CD2.avi";
-  { printf("%s",help_text); exit(0);}
-}
-
-
-if(vcd_track){
-//============ Open VideoCD track ==============
-  f=open(filename,O_RDONLY);
-  if(f<0){ printf("Device not found!\n");return 1; }
-  vcd_read_toc(f);
-  if(!vcd_seek_to_track(f,vcd_track)){ printf("Error selecting VCD track!\n");return 1;}
-  seek_to_byte+=VCD_SECTOR_DATA*vcd_get_msf();
-  stream_type=STREAMTYPE_VCD;
-#ifdef VCD_CACHE
-  vcd_cache_init(vcd_cache_size);
-#endif
-} else {
-//============ Open plain FILE ============
-  f=open(filename,O_RDONLY);
-  if(f<0){ printf("File not found!\n");return 1; }
-  stream_type=STREAMTYPE_FILE;
-}
-
-//============ Open & Sync stream and detect file format ===============
-
-stream=new_stream(f,stream_type);
-//=============== Read AVI header:
-{ //---- RIFF header:
-  int id=stream_read_dword_le(stream); // "RIFF"
-  if(id!=mmioFOURCC('R','I','F','F')){ printf("Not RIFF format file!\n");return 1; }
-  stream_read_dword_le(stream); //filesize
-  id=stream_read_dword_le(stream); // "AVI "
-  if(id!=formtypeAVI){ printf("Not AVI file!\n");return 1; }
-}
-//---- AVI header:
-avi_header.idx_size=0;
-while(1){
-  int id=stream_read_dword_le(stream);
-  int chunksize,size2;
-  static int last_fccType=0;
-  //
-  if(stream_eof(stream)) break;
-  //
-  if(id==mmioFOURCC('L','I','S','T')){
-    int len=stream_read_dword_le(stream)-4; // list size
-    id=stream_read_dword_le(stream);        // list type
-    printf("LIST %.4s  len=%d\n",&id,len);
-    if(id==listtypeAVIMOVIE){
-      // found MOVI header
-      avi_header.movi_start=stream_tell(stream);
-      avi_header.movi_end=avi_header.movi_start+len;
-//      printf("Found movie at 0x%X - 0x%X\n",avi_header.movi_start,avi_header.movi_end);
-      len=(len+1)&(~1);
-      stream_skip(stream,len);
-    }
-    continue;
-  }
-  size2=stream_read_dword_le(stream);
-  printf("CHUNK %.4s  len=%d\n",&id,size2);
-  chunksize=(size2+1)&(~1);
-  switch(id){
-    case ckidAVIMAINHDR:          // read 'avih'
-      stream_read(stream,(char*) &avi_header.avih,sizeof(avi_header.avih));
-      chunksize-=sizeof(avi_header.avih);
-      print_avih(&avi_header.avih);
-      break;
-    case ckidSTREAMHEADER: {      // read 'strh'
-      AVIStreamHeader h;
-      stream_read(stream,(char*) &h,sizeof(h));
-      chunksize-=sizeof(h);
-      if(h.fccType==streamtypeVIDEO) memcpy(&avi_header.video,&h,sizeof(h));else
-      if(h.fccType==streamtypeAUDIO) memcpy(&avi_header.audio,&h,sizeof(h));
-      last_fccType=h.fccType;
-      print_strh(&h);
-      break; }
-    case ckidSTREAMFORMAT: {      // read 'strf'
-      if(last_fccType==streamtypeVIDEO){
-        stream_read(stream,(char*) &avi_header.bih,sizeof(avi_header.bih));
-        chunksize-=sizeof(avi_header.bih);
-//        init_video_codec();
-//        init_video_out();
-      } else
-      if(last_fccType==streamtypeAUDIO){
-        int z=(chunksize<64)?chunksize:64;
-        printf("found 'wf', %d bytes of %d\n",chunksize,sizeof(WAVEFORMATEX));
-        stream_read(stream,(char*) &avi_header.wf_ext,z);
-        chunksize-=z;
-        print_wave_header((WAVEFORMATEX*)&avi_header.wf_ext);
-//        init_audio_codec();
-//        init_audio_out();
-      }
-      break;
-    }
-    case ckidAVINEWINDEX: {
-      avi_header.idx_size=size2>>4;
-//      printf("Reading INDEX block, %d chunks for %d frames\n",
-//        avi_header.idx_size,avi_header.avih.dwTotalFrames);
-      avi_header.idx=malloc(avi_header.idx_size<<4);
-      idx_filepos=stream_tell(stream);
-      stream_read(stream,(char*)avi_header.idx,avi_header.idx_size<<4);
-      chunksize-=avi_header.idx_size<<4;
-      print_index();
-      break;
-    }
-  }
-  if(chunksize>0) stream_skip(stream,chunksize); else
-  if(chunksize<0) printf("WARNING!!! chunksize=%d  (id=%.4s)\n",chunksize,&id);
-  
-}
-
-printf("----------------------------------------------------------------------\n");
-printf("Found movie at 0x%X - 0x%X\n",avi_header.movi_start,avi_header.movi_end);
-if(avi_header.idx_size<=0){ printf("No index block found!\n");return 0;}
-printf("Index block at 0x%X, %d entries for %d frames\n",idx_filepos,
-  avi_header.idx_size,avi_header.avih.dwTotalFrames  );
-
-stream_reset(stream);
-stream_seek(stream,avi_header.movi_start);
-avi_header.idx_pos=0;
-
-if(audiofile_name) audiofile=fopen(audiofile_name,"wb");
-if(videofile_name) videofile=fopen(videofile_name,"wb");
-
-for(i=0;i<avi_header.idx_size;i++){
-#if 0
-    printf("%.4s  %4X  %08X  %d  ",
-      &avi_header.idx[i].ckid,
-      avi_header.idx[i].dwFlags,
-      avi_header.idx[i].dwChunkOffset,
-      avi_header.idx[i].dwChunkLength
-    );fflush(stdout);
-#endif
-    if(avi_header.idx[i].ckid&AVIIF_LIST){
-//      printf("LIST\n");
-    } else {
-      int id,size;
-      stream_seek(stream,avi_header.movi_start+avi_header.idx[i].dwChunkOffset-4);
-      id=stream_read_dword_le(stream);
-      size=stream_read_dword_le(stream);
-      if(id!=avi_header.idx[i].ckid){
-        printf("ChunkID mismatch! raw=%.4s (0x%X) idx=%.4s (0x%X)\n",
-          &id,avi_header.movi_start+avi_header.idx[i].dwChunkOffset-4,
-          &avi_header.idx[i].ckid,idx_filepos+16*i
-        );
-        continue;
-      }
-      if(size!=avi_header.idx[i].dwChunkLength){
-        printf("ChunkSize mismatch! raw=%d (0x%X) idx=%d (0x%X)\n",
-          size,avi_header.movi_start+avi_header.idx[i].dwChunkOffset-4,
-          avi_header.idx[i].dwChunkLength,idx_filepos+16*i
-        );
-        continue;
-      }
-
-      if(id!=mmioFOURCC('J','U','N','K'))
-      if(TWOCCFromFOURCC(id)==cktypeWAVEbytes){
-          // audio
-          int aid=StreamFromFOURCC(id);
-          if(audio_id==-1) audio_id=aid;
-          if(audio_id==aid){
-            if(audiofile){
-              void* mem=malloc(size);
-              stream_read(stream,mem,size);
-              fwrite(mem,size,1,audiofile);
-              free(mem);
-            }
-          } else {
-            printf("Invalid audio stream id: %d (%.4s)\n",aid,&id);
-          }
-      } else 
-      if(LOWORD(id)==aviTWOCC('0','0')){
-         // video
-            if(videofile){
-              void* mem=malloc(size);
-              stream_read(stream,mem,size);
-              fwrite(&size,4,1,videofile);
-              fwrite(mem,size,1,videofile);
-              free(mem);
-            }
-      } else {
-         // unknown
-         printf("Unknown chunk: %.4s (%X)\n",&id,id);
-      }
-
-    } // LIST or CHUNK
-
-}
-
-return 0;
-}
-