annotate TOOLS/movinfo.c @ 27409:e2de11109139

If (has outline) blur(outline) else blur(glyph). If there is an outline, the glyph itself should not be blurred. Keeps the border between glyph and outline clear (unblurred), which is probably how it should be. Patch by Diogo Franco (diogomfranco gmail com).
author eugeni
date Thu, 07 Aug 2008 22:20:58 +0000
parents 8eff880f638c
children 0f1b5b68af32
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 // show QuickTime .mov file structure (C) 2001. by A'rpi/ESP-team
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
2 // various hacks by alex@naxine.org
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
3
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
4 /*
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
5 Blocks: 4bytes atom_size
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
6 4bytes atom_type (name)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
7 ...
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
8
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
9 By older files, mdat is at the beginning, and moov follows it later,
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
10 by newer files, moov is at the begininng.
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
11
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
12 Fontosabb typeok:
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
13
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
14 trak: track: ezeken belul van egy-egy stream (video/audio)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
15 tkhd: track header: fps (video esten picture size is itt van)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
16 vmhd: video media handler (video stream informaciok)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
17 smhd: sound media handler (audio stream informaciok)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
18 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
23 #undef NO_SPECIAL
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
24
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 26474
diff changeset
25 static char *atom2human_type(int type)
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
26 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
27 switch (type)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
28 {
26759
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
29 case 0x766F6F6D: return "Information sections"; /* moov */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
30 case 0x6468766D: return "Movie header"; /* mvhd */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
31 case 0x6169646D: return "Media stream"; /* mdia */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
32 case 0x64686D76: return "Video media header"; /* vmhd */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
33 case 0x64686D73: return "Sound media header"; /* smhd */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
34 case 0x6468646D: return "Media header"; /* mdhd */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
35 case 0x666E696D: return "Media information"; /* minf */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
36 case 0x726C6468: return "Handler reference"; /* hdlr */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
37 case 0x6B617274: return "New track (stream)"; /* trak */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
38 case 0x75716D72: return "rmqu";
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
39 case 0x65657266: return "free";
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
40 case 0x64686B74: return "Track header"; /* tkhd */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
41 case 0x61746475: return "User data"; /* udta */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
42 case 0x7461646D: return "Movie data"; /* mdat */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
43 case 0x6C627473: return "Sample information table"; /* stbl */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
44 case 0x64737473: return "Sample description"; /* stsd */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
45 case 0x6F637473: return "Chunk offset table"; /* stco */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
46 case 0x73747473: return "Sample time table"; /* stts */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
47 case 0x63737473: return "Sample->Chunk mapping table"; /* stsc */
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
48 case 0x7A737473: return "Sample size table"; /* stsz */
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
49 }
26759
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 26576
diff changeset
50 return "unknown";
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
51 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
52
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
53 #define S_NONE 0
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
54 #define S_AUDIO 1
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
55 #define S_VIDEO 2
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
56 int stream = S_NONE;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
57 int v_stream = 0;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
58 int a_stream = 0;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
59
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 26474
diff changeset
60 static unsigned int read_dword(FILE *f){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 unsigned char atom_size_b[4];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 if(fread(&atom_size_b,4,1,f)<=0) return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 return (atom_size_b[0]<<24)|(atom_size_b[1]<<16)|(atom_size_b[2]<<8)|atom_size_b[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 26474
diff changeset
66 static void video_stream_info(FILE *f, int len)
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
67 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
68 int orig_pos = ftell(f);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
69 unsigned char data[len-8];
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
70 int i;
23658
22201fbf9c0e Fix unused variable warnings.
diego
parents: 6908
diff changeset
71 // char codec[len-8];
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
72
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
73 len -= 8;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
74 for (i=0; i<len; i++)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
75 fread(&data[i], 1, 1, f);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
76
6908
598f58f545ec small fixes...
arpi
parents: 6870
diff changeset
77 // strncpy(codec, &data[43], len-43);
598f58f545ec small fixes...
arpi
parents: 6870
diff changeset
78 // printf(" [codec: %s]\n", &codec);
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
79 fseek(f,orig_pos,SEEK_SET);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
80 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
81
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 26474
diff changeset
82 static void audio_stream_info(FILE *f, int len)
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
83 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
84 int orig_pos = ftell(f);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
85 unsigned char data[len-8];
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
86 int i;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
87
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
88 len -= 8;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
89 for (i=0; i<len; i++)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
90 fread(&data[i], 1, 1, f);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
91
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
92 printf(" [%d bit", data[19]);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
93 if (data[17] == 1)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
94 printf(" mono");
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
95 else
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
96 printf(" %d channels", data[17]);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
97 printf("]\n");
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
98 fseek(f,orig_pos,SEEK_SET);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
99 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
100
26576
89b58769e45b Disable unused function.
diego
parents: 26575
diff changeset
101 #if 0
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 26474
diff changeset
102 static void userdata_info(FILE *f, int len, int pos, int level)
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
103 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
104 int orig_pos = pos; /*ftell(f);*/
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
105 unsigned int atom_size = 1;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
106 unsigned int atom_type;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
107
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
108 // printf("userdata @ %d:%d (%d)\n", pos, pos+len, len);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
109
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
110 // fseek(f, pos+3, SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
111
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
112 while (atom_size != 0)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
113 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
114 atom_size=read_dword(f);// if(fread(&atom_size_b,4,1,f)<=0) break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
115 if(fread(&atom_type,4,1,f)<=0) break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
116
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
117 if(atom_size<8) break; // error
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
118
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
119 // printf("%08X: %*s %.4s (%08X) %05d (begin: %08X)\n",pos,level*2,"",
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
120 // &atom_type,atom_type,atom_size,pos+8);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
121
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
122 switch(atom_type)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
123 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
124 case 0x797063A9: /* cpy (copyright) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
125 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
126 char *data = malloc(atom_size-8);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
127
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
128 fseek(f, pos+6, SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
129 fread(data, atom_size-8, 1, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
130 printf(" Copyright: %s\n", data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
131 free(data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
132 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
133 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
134 case 0x666E69A9: /* inf (information) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
135 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
136 char data[atom_size-8];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
137
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
138 fread(&data, 1, atom_size-8, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
139 printf(" Owner: %s\n", &data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
140 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
141 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
142 case 0x6D616EA9: /* nam (name) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
143 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
144 char data[atom_size-8];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
145
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
146 fread(&data, 1, atom_size-8, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
147 printf(" Name: %s\n", &data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
148 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
149 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
150 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
151 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
152 fseek(f,orig_pos,SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
153 }
26576
89b58769e45b Disable unused function.
diego
parents: 26575
diff changeset
154 #endif
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
155
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
156 int time_scale = 0;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
157
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 26474
diff changeset
158 static void lschunks(FILE *f,int level,unsigned int endpos){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 unsigned int atom_size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 unsigned int atom_type;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 int pos;
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
162
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 while(endpos==0 || ftell(f)<endpos){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 pos=ftell(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 atom_size=read_dword(f);// if(fread(&atom_size_b,4,1,f)<=0) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 if(fread(&atom_type,4,1,f)<=0) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168 if(atom_size<8) break; // error
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
170 printf("%08X: %*s %.4s (%08X) %05d [%s] (begin: %08X)\n",pos,level*2,"",&atom_type,atom_type,atom_size,
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
171 atom2human_type(atom_type), pos+8); // 8: atom_size fields (4) + atom_type fields (4)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
172
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
173 #ifndef NO_SPECIAL
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
174 // if (atom_type == 0x61746475)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
175 // userdata_info(f, atom_size, pos, level);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
176
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
177 if (atom_type == 0x6468646D)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
178 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
179 char data[4];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
180
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
181 fread(&data, 1, 1, f); // char
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
182 printf("mdhd version %d\n", data[0]);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
183 fread(&data, 3, 1, f); // int24
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
184 fread(&data, 4, 1, f); // int32
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
185 fread(&data, 4, 1, f); // int32
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
186 fread(&data, 4, 1, f); // int32
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
187 time_scale = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
188 printf("timescale: %d\n", time_scale);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
189 fread(&data, 4, 1, f); // int32
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
190 fread(&data, 2, 1, f); // int16
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
191 fread(&data, 2, 1, f); // int16
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
192 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
193
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
194 if (atom_type == 0x64686D76)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
195 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
196 stream = S_VIDEO;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
197 printf(" Found VIDEO Stream #%d\n", v_stream++);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
198 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
199
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
200 if (atom_type == 0x64686D73)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
201 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
202 stream = S_AUDIO;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
203 printf(" Found AUDIO Stream #%d\n", a_stream++);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
204 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
205
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
206 if (atom_type == 0x64686B74) // tkhd - track header
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
207 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
208 int i;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
209 unsigned char data[atom_size];
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
210 int x, y;
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
211
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
212 for (i=0; i<atom_size; i++)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
213 fread(&data[i], 1, 1, f);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
214
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
215 x = data[77];
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
216 y = data[81];
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
217 printf(" Flags: %d\n", data[3]);
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
218 printf(" Picture size: %dx%d\n", x, y);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
219 if (x == 0 && y == 0)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
220 printf(" Possible audio stream!\n");
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
221 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 if(atom_type==0x64737473) { // stsd
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 unsigned int tmp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 unsigned int count;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 fread(&tmp,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 count=read_dword(f);// fread(&count,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 printf("desc count = %d\n",count);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 for(i=0;i<count;i++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 unsigned int len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 unsigned int format;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 len=read_dword(f); // fread(&len,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234 fread(&format,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 printf(" desc #%d: %.4s (%d)\n",i+1,&format,len);
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
236 if (stream == S_VIDEO)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
237 video_stream_info(f, len);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
238 if (stream == S_AUDIO)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
239 audio_stream_info(f, len);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 fseek(f,len-8,SEEK_CUR);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 if(atom_type==0x6F637473) { // stco
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 int len,i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 printf("Chunk table size :%d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 for(i=0;i<len;i++) printf(" chunk #%d: 0x%X\n",i+1,read_dword(f));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 if(atom_type==0x73747473) { // stts
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 int len,i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 printf("T->S table size :%d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 for(i=0;i<len;i++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259 int num=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 int dur=read_dword(f);
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
261 printf("%5d samples: %d duration", num, dur);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
262 if (stream == S_AUDIO)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
263 printf("(rate: %f Hz)\n", (float)time_scale/dur);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
264 else
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
265 printf("(fps: %f)\n", (float)time_scale/dur);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 if(atom_type==0x63737473) { // stsc
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 int len,i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 printf("S->C table size :%d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 for(i=0;i<len;i++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 int first=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
276 int spc=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277 int sdid=read_dword(f);
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
278 printf(" chunk %d... %d s/c desc: %d\n",first,spc,sdid);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
282 if(atom_type==0x7A737473) { // stsz
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
283 int len,i,ss;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
284 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
285 ss=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
286 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
287 printf("Sample size table len: %d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
288 if(ss){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
289 printf(" common sample size: %d bytes\n",ss);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
290 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291 for(i=0;i<len;i++) printf(" sample #%d: %d bytes\n",i+1,read_dword(f));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
292 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293 }
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
294 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
296 #if 1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
297 switch(atom_type){
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
298 case 0x7461646D: // mdat Movie data
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299 case 0x75716D72: // rmqu
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300 case 0x65657266: // free JUNK
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301 case 0x64686B74: // tkhd Track header
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
302 case 0x61746475: // udta User data
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 case 0x64737473: // stsd Sample description
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
304 case 0x6F637473: // stco Chunk offset table
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
305 case 0x73747473: // stts Sample time table
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
306 case 0x63737473: // stsc Sample->Chunk mapping table
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
307 case 0x7A737473: // stsz Sample size table
6870
dad5f8b3e8a0 ignore pnot/PICT
arpi
parents: 1199
diff changeset
308 case 0x746f6e70: // pnot
dad5f8b3e8a0 ignore pnot/PICT
arpi
parents: 1199
diff changeset
309 case 0x54434950: // PICT
6908
598f58f545ec small fixes...
arpi
parents: 6870
diff changeset
310 case 0x70797466:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 default: lschunks(f,level+1,pos+atom_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 switch(atom_type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 case 0x766F6F6D: // moov
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 case 0x61726D72: // rmra
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 case 0x61646D72: // rmda
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 lschunks(f,level+1,pos+atom_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 fseek(f,pos+atom_size,SEEK_SET);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
326 int main(int argc,char* argv[])
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
327 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
328 FILE *f;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
329
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
330 if ((f = fopen(argc>1?argv[1]:"Akira.mov","rb")) == NULL)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
331 return 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332
26474
5ac02417f474 Remove useless 0 flag from s printf conversion specifier, fixes the warning:
diego
parents: 24202
diff changeset
333 printf("%.8s %.4s (%.8s) %5s [%s]\n\n",
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
334 "position", "atom", "atomtype", "len", "human readable atom name");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
336 lschunks(f, 0, 0);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
337
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
338 printf("\nSummary: streams: %d video/%d audio\n", v_stream, a_stream);
23659
f15f95c2671a Fix "control reaches end of non-void function" warnings.
diego
parents: 23658
diff changeset
339
f15f95c2671a Fix "control reaches end of non-void function" warnings.
diego
parents: 23658
diff changeset
340 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 }