annotate TOOLS/vivodump.c @ 18715:30d7ddf08889

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