diff options
author | al3x <al3x@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-06-23 13:28:51 +0000 |
---|---|---|
committer | al3x <al3x@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-06-23 13:28:51 +0000 |
commit | a355df169b0718406a8be0e667a2b43e27bd9518 (patch) | |
tree | e322e572d31c3fd6fbeed754c375880377d9631a /TOOLS/movinfo.c | |
parent | eb1bede70a31f9a36c4500842363309c700007b4 (diff) | |
download | mpv-a355df169b0718406a8be0e667a2b43e27bd9518.tar.bz2 mpv-a355df169b0718406a8be0e667a2b43e27bd9518.tar.xz |
fps es frequency megallapitas mukodik :)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1200 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'TOOLS/movinfo.c')
-rw-r--r-- | TOOLS/movinfo.c | 95 |
1 files changed, 86 insertions, 9 deletions
diff --git a/TOOLS/movinfo.c b/TOOLS/movinfo.c index cfa15769d3..05ec02c600 100644 --- a/TOOLS/movinfo.c +++ b/TOOLS/movinfo.c @@ -33,7 +33,7 @@ switch (type) case 0x64686D73: return ("Sound media header"); /* smhd */ case 0x6468646D: return ("Media header"); /* mdhd */ case 0x666E696D: return ("Media information"); /* minf */ - case 0x726C6468: return ("Handler.."); /* hdlr */ + case 0x726C6468: return ("Handler reference"); /* hdlr */ case 0x6B617274: return ("New track (stream)"); /* trak */ case 0x75716D72: return ("rmqu"); case 0x65657266: return ("free"); @@ -98,6 +98,63 @@ void *audio_stream_info(FILE *f, int len) fseek(f,orig_pos,SEEK_SET); } +void *userdata_info(FILE *f, int len, int pos, int level) +{ + int orig_pos = pos; /*ftell(f);*/ + unsigned char data[len-8]; + int i; + unsigned int atom_size = 1; + unsigned int atom_type; + +// printf("userdata @ %d:%d (%d)\n", pos, pos+len, len); + +// fseek(f, pos+3, SEEK_SET); + + while (atom_size != 0) + { + atom_size=read_dword(f);// if(fread(&atom_size_b,4,1,f)<=0) break; + if(fread(&atom_type,4,1,f)<=0) break; + + if(atom_size<8) break; // error + +// printf("%08X: %*s %.4s (%08X) %05d (begin: %08X)\n",pos,level*2,"", +// &atom_type,atom_type,atom_size,pos+8); + + switch(atom_type) + { + case 0x797063A9: /* cpy (copyright) */ + { + char *data = malloc(atom_size-8); + + fseek(f, pos+6, SEEK_SET); + fread(data, atom_size-8, 1, f); + printf(" Copyright: %s\n", data); + free(data); + } + break; + case 0x666E69A9: /* inf (information) */ + { + char data[atom_size-8]; + + fread(&data, 1, atom_size-8, f); + printf(" Owner: %s\n", &data); + } + break; + case 0x6D616EA9: /* nam (name) */ + { + char data[atom_size-8]; + + fread(&data, 1, atom_size-8, f); + printf(" Name: %s\n", &data); + } + break; + } + } + fseek(f,orig_pos,SEEK_SET); +} + +int time_scale = 0; + void lschunks(FILE *f,int level,unsigned int endpos){ unsigned int atom_size; unsigned int atom_type; @@ -114,6 +171,26 @@ void lschunks(FILE *f,int level,unsigned int endpos){ atom2human_type(atom_type), pos+8); // 8: atom_size fields (4) + atom_type fields (4) #ifndef NO_SPECIAL +// if (atom_type == 0x61746475) +// userdata_info(f, atom_size, pos, level); + + if (atom_type == 0x6468646D) + { + char data[4]; + + fread(&data, 1, 1, f); // char + printf("mdhd version %d\n", data[0]); + fread(&data, 3, 1, f); // int24 + fread(&data, 4, 1, f); // int32 + fread(&data, 4, 1, f); // int32 + fread(&data, 4, 1, f); // int32 + time_scale = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; + printf("timescale: %d\n", time_scale); + fread(&data, 4, 1, f); // int32 + fread(&data, 2, 1, f); // int16 + fread(&data, 2, 1, f); // int16 + } + if (atom_type == 0x64686D76) { stream = S_VIDEO; @@ -130,15 +207,14 @@ void lschunks(FILE *f,int level,unsigned int endpos){ { int i; unsigned char data[atom_size]; - int fps, x, y; + int x, y; for (i=0; i<atom_size; i++) fread(&data[i], 1, 1, f); - fps = data[3]; x = data[77]; y = data[81]; - printf(" Movie fps: %d\n", fps); /* na ez itt az atbaszas ;( */ + printf(" Flags: %d\n", data[3]); printf(" Picture size: %dx%d\n", x, y); if (x == 0 && y == 0) printf(" Possible audio stream!\n"); @@ -182,7 +258,11 @@ void lschunks(FILE *f,int level,unsigned int endpos){ for(i=0;i<len;i++){ int num=read_dword(f); int dur=read_dword(f); - printf("%5d samples: %d duration\n",num,dur); + printf("%5d samples: %d duration", num, dur); + if (stream == S_AUDIO) + printf("(rate: %f Hz)\n", (float)time_scale/dur); + else + printf("(fps: %f)\n", (float)time_scale/dur); } } @@ -195,10 +275,7 @@ void lschunks(FILE *f,int level,unsigned int endpos){ int first=read_dword(f); int spc=read_dword(f); int sdid=read_dword(f); - if (stream == S_AUDIO) - printf(" chunk from %d: %d Khz (desc: %d)\n", first, spc, sdid); - else - printf(" chunk %d... %d s/c desc: %d\n",first,spc,sdid); + printf(" chunk %d... %d s/c desc: %d\n",first,spc,sdid); } } |