annotate TOOLS/vivodump.c @ 28638:7b16ccf423b4

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