summaryrefslogtreecommitdiffstats
path: root/TOOLS
diff options
context:
space:
mode:
authoral3x <al3x@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-06-23 13:28:51 +0000
committeral3x <al3x@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-06-23 13:28:51 +0000
commita355df169b0718406a8be0e667a2b43e27bd9518 (patch)
treee322e572d31c3fd6fbeed754c375880377d9631a /TOOLS
parenteb1bede70a31f9a36c4500842363309c700007b4 (diff)
downloadmpv-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')
-rw-r--r--TOOLS/movinfo.c95
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);
}
}