annotate TOOLS/movinfo.c @ 1346:d6e6132bff35

AUDIO_ENCODING_LINEAR8 format is not available on sunos 5.5. Format is unsupported in mplayer for now, to get the code compiled on that old version of the OS.
author jkeil
date Thu, 19 Jul 2001 20:04:54 +0000
parents 75bd6146cc77
children dad5f8b3e8a0
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
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
25 char *atom2human_type(int type)
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 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
29 case 0x766F6F6D: return ("Information sections"); /* moov */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
30 case 0x6468766D: return ("Movie header"); /* mvhd */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
31 case 0x6169646D: return ("Media stream"); /* mdia */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
32 case 0x64686D76: return ("Video media header"); /* vmhd */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
33 case 0x64686D73: return ("Sound media header"); /* smhd */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
34 case 0x6468646D: return ("Media header"); /* mdhd */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
35 case 0x666E696D: return ("Media information"); /* minf */
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
36 case 0x726C6468: return ("Handler reference"); /* hdlr */
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
37 case 0x6B617274: return ("New track (stream)"); /* trak */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
38 case 0x75716D72: return ("rmqu");
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
39 case 0x65657266: return ("free");
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
40 case 0x64686B74: return ("Track header"); /* tkhd */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
41 case 0x61746475: return ("User data"); /* udta */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
42 case 0x7461646D: return ("Movie data"); /* mdat */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
43 case 0x6C627473: return ("Sample information table"); /* stbl */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
44 case 0x64737473: return ("Sample description"); /* stsd */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
45 case 0x6F637473: return ("Chunk offset table"); /* stco */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
46 case 0x73747473: return ("Sample time table"); /* stts */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
47 case 0x63737473: return ("Sample->Chunk mapping table"); /* stsc */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
48 case 0x7A737473: return ("Sample size table"); /* stsz */
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
49 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
50 return("unknown");
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
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 unsigned int read_dword(FILE *f){
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
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
66 void *video_stream_info(FILE *f, int len)
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;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
71 char codec[len-8];
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
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
77 strncpy(codec, &data[43], len-43);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
78 printf(" [codec: %s]\n", &codec);
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
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
82 void *audio_stream_info(FILE *f, int len)
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
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
101 void *userdata_info(FILE *f, int len, int pos, int level)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
102 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
103 int orig_pos = pos; /*ftell(f);*/
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
104 unsigned char data[len-8];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
105 int i;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
106 unsigned int atom_size = 1;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
107 unsigned int atom_type;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
108
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
109 // printf("userdata @ %d:%d (%d)\n", pos, pos+len, len);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
110
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
111 // fseek(f, pos+3, SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
112
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
113 while (atom_size != 0)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
114 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
115 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
116 if(fread(&atom_type,4,1,f)<=0) break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
117
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
118 if(atom_size<8) break; // error
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
119
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
120 // printf("%08X: %*s %.4s (%08X) %05d (begin: %08X)\n",pos,level*2,"",
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
121 // &atom_type,atom_type,atom_size,pos+8);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
122
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
123 switch(atom_type)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
124 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
125 case 0x797063A9: /* cpy (copyright) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
126 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
127 char *data = malloc(atom_size-8);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
128
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
129 fseek(f, pos+6, SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
130 fread(data, atom_size-8, 1, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
131 printf(" Copyright: %s\n", data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
132 free(data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
133 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
134 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
135 case 0x666E69A9: /* inf (information) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
136 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
137 char data[atom_size-8];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
138
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
139 fread(&data, 1, atom_size-8, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
140 printf(" Owner: %s\n", &data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
141 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
142 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
143 case 0x6D616EA9: /* nam (name) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
144 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
145 char data[atom_size-8];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
146
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
147 fread(&data, 1, atom_size-8, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
148 printf(" Name: %s\n", &data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
149 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
150 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
151 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
152 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
153 fseek(f,orig_pos,SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
154 }
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
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 void lschunks(FILE *f,int level,unsigned int endpos){
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
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 default: lschunks(f,level+1,pos+atom_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
310 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 switch(atom_type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 case 0x766F6F6D: // moov
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 case 0x61726D72: // rmra
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 case 0x61646D72: // rmda
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 lschunks(f,level+1,pos+atom_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 fseek(f,pos+atom_size,SEEK_SET);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
323 int main(int argc,char* argv[])
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
324 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
325 FILE *f;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
326
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
327 if ((f = fopen(argc>1?argv[1]:"Akira.mov","rb")) == NULL)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
328 return 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
329
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
330 printf("%.8s %.4s (%.8s) %05s [%s]\n\n",
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
331 "position", "atom", "atomtype", "len", "human readable atom name");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
333 lschunks(f, 0, 0);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
334
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
335 printf("\nSummary: streams: %d video/%d audio\n", v_stream, a_stream);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
336 }