annotate TOOLS/vivodump.c @ 33672:e576232a39d5

Prevent balance from hopping. Only recalculate the balance if the balance has changed, not if just the volume has changed. Because (at least with my soundcard) not all volume values can be stored, but seem to be mapped onto a discrete value set, recalculation the balance from the volume isn't accurate enough.
author ib
date Tue, 28 Jun 2011 18:16:06 +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 }