annotate TOOLS/movinfo.c @ 26234:f0788169e503

Ignore if we fail to get disc key, fixes playback of one of my DVDs which claims to be scrambled but actually is not, and always allows to fallback to cached keys.
author reimar
date Fri, 21 Mar 2008 12:31:47 +0000
parents bed2ed7f132c
children 5ac02417f474
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
24202
bed2ed7f132c warning fixes:
diego
parents: 23659
diff changeset
66 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
24202
bed2ed7f132c warning fixes:
diego
parents: 23659
diff changeset
82 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
24202
bed2ed7f132c warning fixes:
diego
parents: 23659
diff changeset
101 void userdata_info(FILE *f, int len, int pos, int level)
1199
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 int atom_size = 1;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
105 unsigned int atom_type;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
106
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
107 // printf("userdata @ %d:%d (%d)\n", pos, pos+len, len);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
108
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
109 // fseek(f, pos+3, SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
110
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
111 while (atom_size != 0)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
112 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
113 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
114 if(fread(&atom_type,4,1,f)<=0) break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
115
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
116 if(atom_size<8) break; // error
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
117
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
118 // printf("%08X: %*s %.4s (%08X) %05d (begin: %08X)\n",pos,level*2,"",
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
119 // &atom_type,atom_type,atom_size,pos+8);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
120
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
121 switch(atom_type)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
122 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
123 case 0x797063A9: /* cpy (copyright) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
124 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
125 char *data = malloc(atom_size-8);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
126
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
127 fseek(f, pos+6, SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
128 fread(data, atom_size-8, 1, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
129 printf(" Copyright: %s\n", data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
130 free(data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
131 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
132 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
133 case 0x666E69A9: /* inf (information) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
134 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
135 char data[atom_size-8];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
136
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
137 fread(&data, 1, atom_size-8, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
138 printf(" Owner: %s\n", &data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
139 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
140 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
141 case 0x6D616EA9: /* nam (name) */
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
142 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
143 char data[atom_size-8];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
144
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
145 fread(&data, 1, atom_size-8, f);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
146 printf(" Name: %s\n", &data);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
147 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
148 break;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
149 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
150 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
151 fseek(f,orig_pos,SEEK_SET);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
152 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
153
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
154 int time_scale = 0;
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
155
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 void lschunks(FILE *f,int level,unsigned int endpos){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157 unsigned int atom_size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 unsigned int atom_type;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 int pos;
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
160
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 while(endpos==0 || ftell(f)<endpos){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162 pos=ftell(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 atom_size=read_dword(f);// if(fread(&atom_size_b,4,1,f)<=0) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 if(fread(&atom_type,4,1,f)<=0) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 if(atom_size<8) break; // error
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
168 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
169 atom2human_type(atom_type), pos+8); // 8: atom_size fields (4) + atom_type fields (4)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
170
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
171 #ifndef NO_SPECIAL
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
172 // if (atom_type == 0x61746475)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
173 // userdata_info(f, atom_size, pos, level);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
174
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
175 if (atom_type == 0x6468646D)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
176 {
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
177 char data[4];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
178
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
179 fread(&data, 1, 1, f); // char
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
180 printf("mdhd version %d\n", data[0]);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
181 fread(&data, 3, 1, f); // int24
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
182 fread(&data, 4, 1, f); // int32
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
183 fread(&data, 4, 1, f); // int32
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 time_scale = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
186 printf("timescale: %d\n", time_scale);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
187 fread(&data, 4, 1, f); // int32
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
188 fread(&data, 2, 1, f); // int16
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
189 fread(&data, 2, 1, f); // int16
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
190 }
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
191
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
192 if (atom_type == 0x64686D76)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
193 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
194 stream = S_VIDEO;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
195 printf(" Found VIDEO Stream #%d\n", v_stream++);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
196 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
197
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
198 if (atom_type == 0x64686D73)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
199 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
200 stream = S_AUDIO;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
201 printf(" Found AUDIO Stream #%d\n", a_stream++);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
202 }
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
203
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
204 if (atom_type == 0x64686B74) // tkhd - track header
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
205 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
206 int i;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
207 unsigned char data[atom_size];
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
208 int x, y;
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
209
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
210 for (i=0; i<atom_size; i++)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
211 fread(&data[i], 1, 1, f);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
212
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
213 x = data[77];
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
214 y = data[81];
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
215 printf(" Flags: %d\n", data[3]);
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
216 printf(" Picture size: %dx%d\n", x, y);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
217 if (x == 0 && y == 0)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
218 printf(" Possible audio stream!\n");
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
219 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 if(atom_type==0x64737473) { // stsd
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 unsigned int tmp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 unsigned int count;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 fread(&tmp,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 count=read_dword(f);// fread(&count,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 printf("desc count = %d\n",count);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 for(i=0;i<count;i++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 unsigned int len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 unsigned int format;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 len=read_dword(f); // fread(&len,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 fread(&format,4,1,f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 printf(" desc #%d: %.4s (%d)\n",i+1,&format,len);
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
234 if (stream == S_VIDEO)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
235 video_stream_info(f, len);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
236 if (stream == S_AUDIO)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
237 audio_stream_info(f, len);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 fseek(f,len-8,SEEK_CUR);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 if(atom_type==0x6F637473) { // stco
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243 int len,i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 printf("Chunk table size :%d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 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
248 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 if(atom_type==0x73747473) { // stts
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 int len,i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 printf("T->S table size :%d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 for(i=0;i<len;i++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 int num=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 int dur=read_dword(f);
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
259 printf("%5d samples: %d duration", num, dur);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
260 if (stream == S_AUDIO)
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
261 printf("(rate: %f Hz)\n", (float)time_scale/dur);
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
262 else
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
263 printf("(fps: %f)\n", (float)time_scale/dur);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267 if(atom_type==0x63737473) { // stsc
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 int len,i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 printf("S->C table size :%d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272 for(i=0;i<len;i++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 int first=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 int spc=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 int sdid=read_dword(f);
1199
75bd6146cc77 fps es frequency megallapitas mukodik :)
al3x
parents: 1175
diff changeset
276 printf(" chunk %d... %d s/c desc: %d\n",first,spc,sdid);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 if(atom_type==0x7A737473) { // stsz
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281 int len,i,ss;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
282 read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
283 ss=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
284 len=read_dword(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
285 printf("Sample size table len: %d\n",len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
286 if(ss){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
287 printf(" common sample size: %d bytes\n",ss);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
288 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
289 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
290 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291 }
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
292 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 #if 1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295 switch(atom_type){
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
296 case 0x7461646D: // mdat Movie data
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
297 case 0x75716D72: // rmqu
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
298 case 0x65657266: // free JUNK
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299 case 0x64686B74: // tkhd Track header
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300 case 0x61746475: // udta User data
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301 case 0x64737473: // stsd Sample description
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
302 case 0x6F637473: // stco Chunk offset table
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 case 0x73747473: // stts Sample time table
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
304 case 0x63737473: // stsc Sample->Chunk mapping table
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
305 case 0x7A737473: // stsz Sample size table
6870
dad5f8b3e8a0 ignore pnot/PICT
arpi
parents: 1199
diff changeset
306 case 0x746f6e70: // pnot
dad5f8b3e8a0 ignore pnot/PICT
arpi
parents: 1199
diff changeset
307 case 0x54434950: // PICT
6908
598f58f545ec small fixes...
arpi
parents: 6870
diff changeset
308 case 0x70797466:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
310 default: lschunks(f,level+1,pos+atom_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 switch(atom_type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 case 0x766F6F6D: // moov
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 case 0x61726D72: // rmra
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 case 0x61646D72: // rmda
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 lschunks(f,level+1,pos+atom_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 fseek(f,pos+atom_size,SEEK_SET);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
324 int main(int argc,char* argv[])
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
325 {
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
326 FILE *f;
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
327
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
328 if ((f = fopen(argc>1?argv[1]:"Akira.mov","rb")) == NULL)
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
329 return 1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
331 printf("%.8s %.4s (%.8s) %05s [%s]\n\n",
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
332 "position", "atom", "atomtype", "len", "human readable atom name");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333
1175
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
334 lschunks(f, 0, 0);
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
335
f8bc3143449f sok hacking
al3x
parents: 1
diff changeset
336 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
337
f15f95c2671a Fix "control reaches end of non-void function" warnings.
diego
parents: 23658
diff changeset
338 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 }