annotate TOOLS/vivodump.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 8e73e469970c
children 1ca484e74f18
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
1 #include <stdio.h>
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
2 #include <stdlib.h>
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
3 #include <string.h>
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
4 #include <inttypes.h>
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
5
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
6 #include "loader/wine/mmreg.h"
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
7 #include "loader/wine/avifmt.h"
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
8 #include "loader/wine/vfw.h"
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
9
22627
b5e31dca2b0b Fix compilation due to reorganized header files.
diego
parents: 17487
diff changeset
10 #include "stream/stream.h"
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
11 #include "libmpdemux/muxer.h"
22627
b5e31dca2b0b Fix compilation due to reorganized header files.
diego
parents: 17487
diff changeset
12 #include "libmpdemux/demuxer.h"
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
13
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
14 char *info_name;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
15 char *info_artist;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
16 char *info_genre;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
17 char *info_subject;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
18 char *info_copyright;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
19 char *info_sourceform;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
20 char *info_comment;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
21
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
22 static const short h263_format[8][2] = {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
23 { 0, 0 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
24 { 128, 96 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
25 { 176, 144 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
26 { 352, 288 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
27 { 704, 576 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
28 { 1408, 1152 },
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
29 { 320, 240 }
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
30 };
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
31
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
32 unsigned char* buffer;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
33 int bufptr=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
34 int bitcnt=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
35 unsigned char buf=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
36
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
37 unsigned int x_get_bits(int n){
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
38 unsigned int x=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
39 while(n-->0){
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
40 if(!bitcnt){
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
41 // fill buff
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
42 buf=buffer[bufptr++];
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
43 bitcnt=8;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
44 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
45 //x=(x<<1)|(buf&1);buf>>=1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
46 x=(x<<1)|(buf>>7);buf<<=1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
47 --bitcnt;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
48 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
49 return x;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
50 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
51
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
52 #define get_bits(xxx,n) x_get_bits(n)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
53 #define get_bits1(xxx) x_get_bits(1)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
54 #define skip_bits(xxx,n) x_get_bits(n)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
55 #define skip_bits1(xxx) x_get_bits(1)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
56
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
57 int format;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
58 int width=320;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
59 int height=240;
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
60
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
61 /* most is hardcoded. should extend to handle all h263 streams */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
62 int h263_decode_picture_header(unsigned char *b_ptr)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
63 {
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
64 int i;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
65
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
66 for(i=0;i<16;i++) printf(" %02X",b_ptr[i]); printf("\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
67
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
68 buffer=b_ptr;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
69 bufptr=bitcnt=buf=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
70
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
71 /* picture header */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
72 if (get_bits(&s->gb, 22) != 0x20){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
73 printf("bad picture header\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
74 return -1;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
75 }
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
76 skip_bits(&s->gb, 8); /* picture timestamp */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
77
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
78 if (get_bits1(&s->gb) != 1){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
79 printf("bad marker\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
80 return -1; /* marker */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
81 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
82 if (get_bits1(&s->gb) != 0){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
83 printf("bad h263 id\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
84 return -1; /* h263 id */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
85 }
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
86 skip_bits1(&s->gb); /* split screen off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
87 skip_bits1(&s->gb); /* camera off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
88 skip_bits1(&s->gb); /* freeze picture release off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
89
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
90 format = get_bits(&s->gb, 3);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
91
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
92 if (format != 7) {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
93 printf("h263_plus = 0 format = %d\n",format);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
94 /* H.263v1 */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
95 width = h263_format[format][0];
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
96 height = h263_format[format][1];
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
97 printf("%d x %d\n",width,height);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
98 // if (!width) return -1;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
99
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
100 printf("pict_type=%d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
101 printf("unrestricted_mv=%d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
102 #if 1
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
103 printf("SAC: %d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
104 printf("advanced prediction mode: %d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
105 printf("PB frame: %d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
106 #else
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
107 if (get_bits1(&s->gb) != 0)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
108 return -1; /* SAC: off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
109 if (get_bits1(&s->gb) != 0)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
110 return -1; /* advanced prediction mode: off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
111 if (get_bits1(&s->gb) != 0)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
112 return -1; /* not PB frame */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
113 #endif
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
114 printf("qscale=%d\n",get_bits(&s->gb, 5));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
115 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
116 } else {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
117 printf("h263_plus = 1\n");
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
118 /* H.263v2 */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
119 if (get_bits(&s->gb, 3) != 1){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
120 printf("H.263v2 A error\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
121 return -1;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
122 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
123 if (get_bits(&s->gb, 3) != 6){ /* custom source format */
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
124 printf("custom source format\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
125 return -1;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
126 }
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
127 skip_bits(&s->gb, 12);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
128 skip_bits(&s->gb, 3);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
129 printf("pict_type=%d\n",get_bits(&s->gb, 3) + 1);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
130 // if (s->pict_type != I_TYPE &&
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
131 // s->pict_type != P_TYPE)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
132 // return -1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
133 skip_bits(&s->gb, 7);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
134 skip_bits(&s->gb, 4); /* aspect ratio */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
135 width = (get_bits(&s->gb, 9) + 1) * 4;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
136 skip_bits1(&s->gb);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
137 height = get_bits(&s->gb, 9) * 4;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
138 printf("%d x %d\n",width,height);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
139 //if (height == 0)
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
140 // return -1;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
141 printf("qscale=%d\n",get_bits(&s->gb, 5));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
142 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
143
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
144 /* PEI */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
145 while (get_bits1(&s->gb) != 0) {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
146 skip_bits(&s->gb, 8);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
147 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
148 // s->f_code = 1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
149 // s->width = width;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
150 // s->height = height;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
151 return 0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
152 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
153
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
154 int postable[32768];
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
155
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
156 int main(int argc,char ** argv){
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
157 int c;
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
158 FILE *f;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
159 FILE *f2;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
160 muxer_t* avi;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
161 muxer_stream_t* mux;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
162 //unsigned char* buffer=malloc(0x200000);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
163 int i,len;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
164 int v_id=0;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
165 int flag2=0;
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
166 int prefix=0;
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
167
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
168 // check if enough args were given
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
169 if ( argc < 3 ){
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
170 printf("Too few arguments given!\n"
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
171 "Usage: %s <input_file> <output_file>\n", argv[0]);
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
172
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
173 return -1;
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
174 }
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
175 // input
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
176 if(!(f=fopen(argv[1],"rb"))){
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
177 printf("Couldn't open input file.\n");
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
178 return -1;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
179 }
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
180 // output
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
181 if(!(f2=fopen(argv[2],"wb"))){
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
182 printf("Couldn't open output file.\n");
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
183 return -1;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
184 }
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
185
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
186 avi=muxer_new_muxer(MUXER_TYPE_AVI,f2);
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
187 mux=muxer_new_stream(avi,MUXER_TYPE_VIDEO);
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
188
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
189 mux->buffer_size=0x200000;
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
190 mux->buffer=malloc(mux->buffer_size);
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
191
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
192 mux->h.dwScale=1;
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
193 mux->h.dwRate=10;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
194
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
195 mux->bih=malloc(sizeof(BITMAPINFOHEADER));
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
196 mux->bih->biSize=sizeof(BITMAPINFOHEADER);
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
197 mux->bih->biPlanes=1;
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
198 mux->bih->biBitCount=24;
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
199 mux->bih->biCompression=0x6f766976;// 7669766f;
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
200 muxer_write_header(avi);
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
201
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
202 /*
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
203 c=fgetc(f); if(c) printf("error! not vivo file?\n");
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
204 len=0;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
205 while((c=fgetc(f))>=0x80) len+=0x80*(c&0x0F);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
206 len+=c;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
207 printf("hdr1: %d\n",len);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
208 for(i=0;i<len;i++) fgetc(f);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
209 */
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
210
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
211 while((c=fgetc(f))>=0){
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
212
25309
8e73e469970c Fix printf format string length modifiers, removes the warnings:
diego
parents: 24203
diff changeset
213 printf("%08lX %02X\n",ftell(f),c);
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
214
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
215 prefix=0;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
216 if(c==0x82){
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
217 prefix=1;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
218 //continue;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
219 c=fgetc(f);
25309
8e73e469970c Fix printf format string length modifiers, removes the warnings:
diego
parents: 24203
diff changeset
220 printf("%08lX %02X\n",ftell(f),c);
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
221 }
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
222
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
223 if(c==0x00){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
224 // header
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
225 int len=0;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
226 while((c=fgetc(f))>=0x80) len+=0x80*(c&0x0F);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
227 len+=c;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
228 printf("header: 00 (%d)\n",len);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
229 for(i=0;i<len;i++) fgetc(f);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
230 continue;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
231 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
232
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
233 if((c&0xF0)==0x40){
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
234 // audio
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
235 len=24;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
236 if(prefix) len=fgetc(f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
237 printf("audio: %02X (%d)\n",c,len);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
238 for(i=0;i<len;i++) fgetc(f);
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
239 continue;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
240 }
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
241 if((c&0xF0)==0x30){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
242 // audio
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
243 len=40;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
244 if(prefix) len=fgetc(f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
245 printf("audio: %02X (%d)\n",c,len);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
246 for(i=0;i<len;i++) fgetc(f);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
247 continue;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
248 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
249 if(flag2 || (((c&0xF0)==0x10 || (c&0xF0)==0x20) && (c&0x0F)!=(v_id&0xF))){
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
250 // end of frame:
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
251 printf("Frame size: %d\n",mux->buffer_len);
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
252 h263_decode_picture_header(mux->buffer);
17487
fa17424b4c7b change muxer_write_chunk() so that pts/dts _could_ be passed from encoder to muxer
michael
parents: 13801
diff changeset
253 muxer_write_chunk(mux,mux->buffer_len,0x10, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
254 mux->buffer_len=0;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
255
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
256 if((v_id&0xF0)==0x10) fprintf(stderr,"hmm. last video packet %02X\n",v_id);
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
257 }
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
258 flag2=0;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
259 if((c&0xF0)==0x10){
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
260 // 128 byte
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
261 len=128;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
262 if(prefix) len=fgetc(f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
263 printf("video: %02X (%d)\n",c,len);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
264 fread(mux->buffer+mux->buffer_len,len,1,f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
265 mux->buffer_len+=len;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
266 v_id=c;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
267 continue;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
268 }
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
269 if((c&0xF0)==0x20){
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
270 int len=fgetc(f);
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
271 printf("video: %02X (%d)\n",c,len);
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
272 fread(mux->buffer+mux->buffer_len,len,1,f);
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
273 mux->buffer_len+=len;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
274 flag2=1;
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
275 v_id=c;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
276 continue;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
277 }
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
278 printf("error: %02X!\n",c);
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
279 exit(1);
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
280 }
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
281
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
282 if(!width) width=320;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
283 if(!height) height=240;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
284
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
285 mux->bih->biWidth=width;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
286 mux->bih->biHeight=height;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
287 mux->bih->biSizeImage=3*width*height;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
288
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
289 muxer_write_index(avi);
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
290 fseek(f2,0,SEEK_SET);
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
291 muxer_write_header(avi);
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
292
24203
bd25487e561f warning fix:
diego
parents: 23992
diff changeset
293 return 0;
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
294 }