annotate TOOLS/vivodump.c @ 37171:29802bb119f6

Add new FFmpeg AMVF tag for AMV video.
author reimar
date Sat, 06 Sep 2014 19:51:59 +0000
parents a86413775fbe
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30416
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
1 /*
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
2 * This program is free software; you can redistribute it and/or modify
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
3 * it under the terms of the GNU General Public License as published by
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
4 * the Free Software Foundation; either version 2 of the License, or
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
5 * (at your option) any later version.
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
6 *
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
7 * This program is distributed in the hope that it will be useful,
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
10 * GNU General Public License for more details.
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
11 *
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
12 * You should have received a copy of the GNU General Public License along
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
13 * with this program; if not, write to the Free Software Foundation, Inc.,
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
14 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
15 */
b573c7c7173b Add standard license header to C tools missing them.
diego
parents: 29263
diff changeset
16
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
17 #include <stdio.h>
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
18 #include <stdlib.h>
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
19 #include <string.h>
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
20 #include <inttypes.h>
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
21
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
22 #include "loader/wine/mmreg.h"
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
23 #include "loader/wine/vfw.h"
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
24
22627
b5e31dca2b0b Fix compilation due to reorganized header files.
diego
parents: 17487
diff changeset
25 #include "stream/stream.h"
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
26 #include "libmpdemux/muxer.h"
22627
b5e31dca2b0b Fix compilation due to reorganized header files.
diego
parents: 17487
diff changeset
27 #include "libmpdemux/demuxer.h"
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
28
26963
8825552ee585 Fix the linking of TOOLS/netstream and TOOLS/vivodump.
diego
parents: 26580
diff changeset
29 /* linking hacks */
13783
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
30 char *info_name;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
31 char *info_artist;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
32 char *info_genre;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
33 char *info_subject;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
34 char *info_copyright;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
35 char *info_sourceform;
4277e06630bf compilation fix, mostly by Reza Jelveh
diego
parents: 9014
diff changeset
36 char *info_comment;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
37
26963
8825552ee585 Fix the linking of TOOLS/netstream and TOOLS/vivodump.
diego
parents: 26580
diff changeset
38 char* out_filename = NULL;
8825552ee585 Fix the linking of TOOLS/netstream and TOOLS/vivodump.
diego
parents: 26580
diff changeset
39 char* force_fourcc=NULL;
8825552ee585 Fix the linking of TOOLS/netstream and TOOLS/vivodump.
diego
parents: 26580
diff changeset
40 char* passtmpfile="divx2pass.log";
8825552ee585 Fix the linking of TOOLS/netstream and TOOLS/vivodump.
diego
parents: 26580
diff changeset
41
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
42 static const short h263_format[8][2] = {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
43 { 0, 0 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
44 { 128, 96 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
45 { 176, 144 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
46 { 352, 288 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
47 { 704, 576 },
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
48 { 1408, 1152 },
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
49 { 320, 240 }
2665
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 unsigned char* buffer;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
53 int bufptr=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
54 int bitcnt=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
55 unsigned char buf=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
56
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 25309
diff changeset
57 static unsigned int x_get_bits(int n){
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
58 unsigned int x=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
59 while(n-->0){
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
60 if(!bitcnt){
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
61 // fill buff
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
62 buf=buffer[bufptr++];
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
63 bitcnt=8;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
64 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
65 //x=(x<<1)|(buf&1);buf>>=1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
66 x=(x<<1)|(buf>>7);buf<<=1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
67 --bitcnt;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
68 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
69 return x;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
70 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
71
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
72 #define get_bits(xxx,n) x_get_bits(n)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
73 #define get_bits1(xxx) x_get_bits(1)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
74 #define skip_bits(xxx,n) x_get_bits(n)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
75 #define skip_bits1(xxx) x_get_bits(1)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
76
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
77 int format;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
78 int width=320;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
79 int height=240;
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
80
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
81 /* most is hardcoded. should extend to handle all h263 streams */
26575
1ca484e74f18 Mark all functions that are only used within the file as static.
diego
parents: 25309
diff changeset
82 static int h263_decode_picture_header(unsigned char *b_ptr)
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
83 {
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
84 int i;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26963
diff changeset
85
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
86 for(i=0;i<16;i++) printf(" %02X",b_ptr[i]); printf("\n");
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26963
diff changeset
87
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
88 buffer=b_ptr;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
89 bufptr=bitcnt=buf=0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
90
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
91 /* picture header */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
92 if (get_bits(&s->gb, 22) != 0x20){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
93 printf("bad picture header\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
94 return -1;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
95 }
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
96 skip_bits(&s->gb, 8); /* picture timestamp */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
97
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
98 if (get_bits1(&s->gb) != 1){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
99 printf("bad marker\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
100 return -1; /* marker */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
101 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
102 if (get_bits1(&s->gb) != 0){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
103 printf("bad h263 id\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
104 return -1; /* h263 id */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
105 }
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
106 skip_bits1(&s->gb); /* split screen off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
107 skip_bits1(&s->gb); /* camera off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
108 skip_bits1(&s->gb); /* freeze picture release off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
109
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
110 format = get_bits(&s->gb, 3);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
111
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
112 if (format != 7) {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
113 printf("h263_plus = 0 format = %d\n",format);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
114 /* H.263v1 */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
115 width = h263_format[format][0];
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
116 height = h263_format[format][1];
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
117 printf("%d x %d\n",width,height);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
118 // if (!width) return -1;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
119
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
120 printf("pict_type=%d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
121 printf("unrestricted_mv=%d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
122 #if 1
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
123 printf("SAC: %d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
124 printf("advanced prediction mode: %d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
125 printf("PB frame: %d\n",get_bits1(&s->gb));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
126 #else
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
127 if (get_bits1(&s->gb) != 0)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
128 return -1; /* SAC: off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
129 if (get_bits1(&s->gb) != 0)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
130 return -1; /* advanced prediction mode: off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
131 if (get_bits1(&s->gb) != 0)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
132 return -1; /* not PB frame */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
133 #endif
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
134 printf("qscale=%d\n",get_bits(&s->gb, 5));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
135 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
136 } else {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
137 printf("h263_plus = 1\n");
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
138 /* H.263v2 */
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
139 if (get_bits(&s->gb, 3) != 1){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
140 printf("H.263v2 A error\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
141 return -1;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
142 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
143 if (get_bits(&s->gb, 3) != 6){ /* custom source format */
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
144 printf("custom source format\n");
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
145 return -1;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
146 }
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
147 skip_bits(&s->gb, 12);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
148 skip_bits(&s->gb, 3);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
149 printf("pict_type=%d\n",get_bits(&s->gb, 3) + 1);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
150 // if (s->pict_type != I_TYPE &&
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
151 // s->pict_type != P_TYPE)
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
152 // return -1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
153 skip_bits(&s->gb, 7);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
154 skip_bits(&s->gb, 4); /* aspect ratio */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
155 width = (get_bits(&s->gb, 9) + 1) * 4;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
156 skip_bits1(&s->gb);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
157 height = get_bits(&s->gb, 9) * 4;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
158 printf("%d x %d\n",width,height);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
159 //if (height == 0)
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
160 // return -1;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
161 printf("qscale=%d\n",get_bits(&s->gb, 5));
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
162 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
163
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
164 /* PEI */
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
165 while (get_bits1(&s->gb) != 0) {
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
166 skip_bits(&s->gb, 8);
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
167 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
168 // s->f_code = 1;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
169 // s->width = width;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
170 // s->height = height;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
171 return 0;
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
172 }
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
173
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
174 int postable[32768];
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
175
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
176 int main(int argc,char ** argv){
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
177 int c;
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
178 FILE *f;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
179 FILE *f2;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
180 muxer_t* avi;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
181 muxer_stream_t* mux;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
182 //unsigned char* buffer=malloc(0x200000);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
183 int i,len;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
184 int v_id=0;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
185 int flag2=0;
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
186 int prefix=0;
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
187
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
188 // check if enough args were given
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
189 if ( argc < 3 ){
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
190 printf("Too few arguments given!\n"
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
191 "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
192
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
193 return -1;
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
194 }
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
195 // input
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
196 if(!(f=fopen(argv[1],"rb"))){
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
197 printf("Couldn't open input file.\n");
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
198 return -1;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
199 }
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
200 // output
13801
245f5d4b4af7 Fixed the assumption user will always give 2+ args to the program.
al
parents: 13784
diff changeset
201 if(!(f2=fopen(argv[2],"wb"))){
13784
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
202 printf("Couldn't open output file.\n");
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
203 return -1;
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
204 }
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
205
7d3b84ddd2fd Remove hardcoded filenames in favor of command line parameters, some error
diego
parents: 13783
diff changeset
206 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
207 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
208
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
209 mux->buffer_size=0x200000;
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
210 mux->buffer=malloc(mux->buffer_size);
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
211
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26963
diff changeset
212 mux->h.dwScale=1;
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26963
diff changeset
213 mux->h.dwRate=10;
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
214
32123
a86413775fbe Replace sizeof(BITMAPINFOHEADER)
reimar
parents: 30416
diff changeset
215 mux->bih=malloc(sizeof(*mux->bih));
a86413775fbe Replace sizeof(BITMAPINFOHEADER)
reimar
parents: 30416
diff changeset
216 mux->bih->biSize=sizeof(*mux->bih);
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
217 mux->bih->biPlanes=1;
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
218 mux->bih->biBitCount=24;
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
219 mux->bih->biCompression=0x6f766976;// 7669766f;
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
220 muxer_write_header(avi);
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
221
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
222 /*
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
223 c=fgetc(f); if(c) printf("error! not vivo file?\n");
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
224 len=0;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
225 while((c=fgetc(f))>=0x80) len+=0x80*(c&0x0F);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
226 len+=c;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
227 printf("hdr1: %d\n",len);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
228 for(i=0;i<len;i++) fgetc(f);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
229 */
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
230
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
231 while((c=fgetc(f))>=0){
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
232
25309
8e73e469970c Fix printf format string length modifiers, removes the warnings:
diego
parents: 24203
diff changeset
233 printf("%08lX %02X\n",ftell(f),c);
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
234
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
235 prefix=0;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
236 if(c==0x82){
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
237 prefix=1;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
238 //continue;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
239 c=fgetc(f);
25309
8e73e469970c Fix printf format string length modifiers, removes the warnings:
diego
parents: 24203
diff changeset
240 printf("%08lX %02X\n",ftell(f),c);
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
241 }
2672
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==0x00){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
244 // header
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
245 int len=0;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
246 while((c=fgetc(f))>=0x80) len+=0x80*(c&0x0F);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
247 len+=c;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
248 printf("header: 00 (%d)\n",len);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
249 for(i=0;i<len;i++) fgetc(f);
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
250 continue;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
251 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
252
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
253 if((c&0xF0)==0x40){
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
254 // audio
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
255 len=24;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
256 if(prefix) len=fgetc(f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
257 printf("audio: %02X (%d)\n",c,len);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
258 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
259 continue;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
260 }
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
261 if((c&0xF0)==0x30){
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
262 // audio
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
263 len=40;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
264 if(prefix) len=fgetc(f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
265 printf("audio: %02X (%d)\n",c,len);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
266 for(i=0;i<len;i++) fgetc(f);
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
267 continue;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
268 }
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
269 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
270 // end of frame:
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
271 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
272 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
273 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
274 mux->buffer_len=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26963
diff changeset
275
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
276 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
277 }
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
278 flag2=0;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
279 if((c&0xF0)==0x10){
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
280 // 128 byte
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
281 len=128;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
282 if(prefix) len=fgetc(f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
283 printf("video: %02X (%d)\n",c,len);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
284 fread(mux->buffer+mux->buffer_len,len,1,f);
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
285 mux->buffer_len+=len;
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
286 v_id=c;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
287 continue;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
288 }
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
289 if((c&0xF0)==0x20){
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
290 int len=fgetc(f);
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
291 printf("video: %02X (%d)\n",c,len);
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
292 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
293 mux->buffer_len+=len;
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
294 flag2=1;
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
295 v_id=c;
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
296 continue;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
297 }
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
298 printf("error: %02X!\n",c);
3233
5a8d7b6920d6 0x82 support
arpi
parents: 2696
diff changeset
299 exit(1);
2665
e8d949b1bc5d dump h263 frame headers from vivo
arpi
parents:
diff changeset
300 }
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
301
2696
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
302 if(!width) width=320;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
303 if(!height) height=240;
d0f26c572633 vivo 2.0 support
arpi
parents: 2672
diff changeset
304
2672
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
305 mux->bih->biWidth=width;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
306 mux->bih->biHeight=height;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
307 mux->bih->biSizeImage=3*width*height;
1ff47e4ff44d works! copy video steram to .avi file playable with ivvideo.dll
arpi
parents: 2667
diff changeset
308
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
309 muxer_write_index(avi);
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
310 fseek(f2,0,SEEK_SET);
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
311 muxer_write_header(avi);
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
312
24203
bd25487e561f warning fix:
diego
parents: 23992
diff changeset
313 return 0;
2667
a17fcca740ff convertiong to avi
arpi
parents: 2665
diff changeset
314 }