Mercurial > mplayer.hg
comparison demux_asf.c @ 1567:5c7760aa4f94
printf->mp_msg/mp_dbg
author | arpi |
---|---|
date | Fri, 17 Aug 2001 00:40:25 +0000 |
parents | b895f95e7657 |
children | bd1ef18cdf33 |
comparison
equal
deleted
inserted
replaced
1566:913c1ee56b4f | 1567:5c7760aa4f94 |
---|---|
2 | 2 |
3 #include <stdio.h> | 3 #include <stdio.h> |
4 #include <stdlib.h> | 4 #include <stdlib.h> |
5 #include <unistd.h> | 5 #include <unistd.h> |
6 | 6 |
7 extern int verbose; // defined in mplayer.c | 7 #include "config.h" |
8 #include "mp_msg.h" | |
8 | 9 |
9 #include "stream.h" | 10 #include "stream.h" |
10 #include "asf.h" | 11 #include "asf.h" |
11 #include "demuxer.h" | 12 #include "demuxer.h" |
12 | 13 |
40 static void asf_descrambling(unsigned char *src,int len){ | 41 static void asf_descrambling(unsigned char *src,int len){ |
41 unsigned char *dst=malloc(len); | 42 unsigned char *dst=malloc(len); |
42 unsigned char *s2=src; | 43 unsigned char *s2=src; |
43 int i=0,x,y; | 44 int i=0,x,y; |
44 while(len-i>=asf_scrambling_h*asf_scrambling_w*asf_scrambling_b){ | 45 while(len-i>=asf_scrambling_h*asf_scrambling_w*asf_scrambling_b){ |
45 // printf("descrambling! (w=%d b=%d)\n",w,asf_scrambling_b); | 46 // mp_msg(MSGT_DEMUX,MSGL_DBG4,"descrambling! (w=%d b=%d)\n",w,asf_scrambling_b); |
46 //i+=asf_scrambling_h*asf_scrambling_w; | 47 //i+=asf_scrambling_h*asf_scrambling_w; |
47 for(x=0;x<asf_scrambling_w;x++) | 48 for(x=0;x<asf_scrambling_w;x++) |
48 for(y=0;y<asf_scrambling_h;y++){ | 49 for(y=0;y<asf_scrambling_h;y++){ |
49 memcpy(dst+i,s2+(y*asf_scrambling_w+x)*asf_scrambling_b,asf_scrambling_b); | 50 memcpy(dst+i,s2+(y*asf_scrambling_w+x)*asf_scrambling_b,asf_scrambling_b); |
50 i+=asf_scrambling_b; | 51 i+=asf_scrambling_b; |
58 | 59 |
59 | 60 |
60 static int demux_asf_read_packet(demuxer_t *demux,unsigned char *data,int len,int id,int seq,unsigned long time,unsigned short dur,int offs,int keyframe){ | 61 static int demux_asf_read_packet(demuxer_t *demux,unsigned char *data,int len,int id,int seq,unsigned long time,unsigned short dur,int offs,int keyframe){ |
61 demux_stream_t *ds=NULL; | 62 demux_stream_t *ds=NULL; |
62 | 63 |
63 if(verbose>=4) printf("demux_asf.read_packet: id=%d seq=%d len=%d\n",id,seq,len); | 64 mp_dbg(MSGT_DEMUX,MSGL_DBG4,"demux_asf.read_packet: id=%d seq=%d len=%d\n",id,seq,len); |
64 | 65 |
65 if(demux->video->id==-1) | 66 if(demux->video->id==-1) |
66 if(demux->v_streams[id]) | 67 if(demux->v_streams[id]) |
67 demux->video->id=id; | 68 demux->video->id=id; |
68 | 69 |
73 if(id==demux->audio->id){ | 74 if(id==demux->audio->id){ |
74 // audio | 75 // audio |
75 ds=demux->audio; | 76 ds=demux->audio; |
76 if(!ds->sh){ | 77 if(!ds->sh){ |
77 ds->sh=demux->a_streams[id]; | 78 ds->sh=demux->a_streams[id]; |
78 if(verbose) printf("Auto-selected ASF audio ID = %d\n",ds->id); | 79 mp_msg(MSGT_DEMUX,MSGL_V,"Auto-selected ASF audio ID = %d\n",ds->id); |
79 } | 80 } |
80 } else | 81 } else |
81 if(id==demux->video->id){ | 82 if(id==demux->video->id){ |
82 // video | 83 // video |
83 ds=demux->video; | 84 ds=demux->video; |
84 if(!ds->sh){ | 85 if(!ds->sh){ |
85 ds->sh=demux->v_streams[id]; | 86 ds->sh=demux->v_streams[id]; |
86 if(verbose) printf("Auto-selected ASF video ID = %d\n",ds->id); | 87 mp_msg(MSGT_DEMUX,MSGL_V,"Auto-selected ASF video ID = %d\n",ds->id); |
87 } | 88 } |
88 } | 89 } |
89 | 90 |
90 if(ds){ | 91 if(ds){ |
91 if(ds->asf_packet){ | 92 if(ds->asf_packet){ |
97 ds_add_packet(ds,ds->asf_packet); | 98 ds_add_packet(ds,ds->asf_packet); |
98 ds->asf_packet=NULL; | 99 ds->asf_packet=NULL; |
99 } else { | 100 } else { |
100 // append data to it! | 101 // append data to it! |
101 demux_packet_t* dp=ds->asf_packet; | 102 demux_packet_t* dp=ds->asf_packet; |
102 if(dp->len!=offs && offs!=-1) printf("warning! fragment.len=%d BUT next fragment offset=%d \n",dp->len,offs); | 103 if(dp->len!=offs && offs!=-1) mp_msg(MSGT_DEMUX,MSGL_V,"warning! fragment.len=%d BUT next fragment offset=%d \n",dp->len,offs); |
103 dp->buffer=realloc(dp->buffer,dp->len+len); | 104 dp->buffer=realloc(dp->buffer,dp->len+len); |
104 memcpy(dp->buffer+dp->len,data,len); | 105 memcpy(dp->buffer+dp->len,data,len); |
105 if(verbose>=4) printf("data appended! %d+%d\n",dp->len,len); | 106 mp_dbg(MSGT_DEMUX,MSGL_DBG4,"data appended! %d+%d\n",dp->len,len); |
106 dp->len+=len; | 107 dp->len+=len; |
107 // we are ready now. | 108 // we are ready now. |
108 return 1; | 109 return 1; |
109 } | 110 } |
110 } | 111 } |
111 // create new packet: | 112 // create new packet: |
112 { demux_packet_t* dp; | 113 { demux_packet_t* dp; |
113 if(offs>0){ | 114 if(offs>0){ |
114 if(verbose) printf("warning! broken fragment, %d bytes missing \n",offs); | 115 mp_msg(MSGT_DEMUX,MSGL_V,"warning! broken fragment, %d bytes missing \n",offs); |
115 return 0; | 116 return 0; |
116 } | 117 } |
117 dp=new_demux_packet(len); | 118 dp=new_demux_packet(len); |
118 memcpy(dp->buffer,data,len); | 119 memcpy(dp->buffer,data,len); |
119 dp->pts=time*0.001f; | 120 dp->pts=time*0.001f; |
170 | 171 |
171 // Calculate packet size (plen): | 172 // Calculate packet size (plen): |
172 if(flags&0x40){ | 173 if(flags&0x40){ |
173 // Explicit (absoulte) packet size | 174 // Explicit (absoulte) packet size |
174 plen=LOAD_LE16(p); p+=2; | 175 plen=LOAD_LE16(p); p+=2; |
175 if(verbose>1)printf("Explicit packet size specified: %d \n",plen); | 176 mp_dbg(MSGT_DEMUX,MSGL_DBG2,"Explicit packet size specified: %d \n",plen); |
176 if(plen>asf_packetsize) printf("Warning! plen>packetsize! (%d>%d) \n",plen,asf_packetsize); | 177 if(plen>asf_packetsize) mp_msg(MSGT_DEMUX,MSGL_V,"Warning! plen>packetsize! (%d>%d) \n",plen,asf_packetsize); |
177 if(flags&(8|16)){ | 178 if(flags&(8|16)){ |
178 padding=p[0];p++; | 179 padding=p[0];p++; |
179 if(flags&16){ padding|=p[0]<<8; p++;} | 180 if(flags&16){ padding|=p[0]<<8; p++;} |
180 if(verbose)printf("Warning! explicit=%d padding=%d \n",plen,asf_packetsize-padding); | 181 mp_msg(MSGT_DEMUX,MSGL_V,"Warning! explicit=%d padding=%d \n",plen,asf_packetsize-padding); |
181 } | 182 } |
182 } else { | 183 } else { |
183 // Padding (relative) size | 184 // Padding (relative) size |
184 if(flags&8){ | 185 if(flags&8){ |
185 padding=p[0];++p; | 186 padding=p[0];++p; |
195 if(flags&1){ | 196 if(flags&1){ |
196 segsizetype=p[0] & 0xC0; | 197 segsizetype=p[0] & 0xC0; |
197 segs=p[0] & 0x3F; | 198 segs=p[0] & 0x3F; |
198 ++p; | 199 ++p; |
199 } | 200 } |
200 if(verbose>=4) printf("%08X: flag=%02X segs=%d pad=%d time=%ld dur=%d\n", | 201 mp_dbg(MSGT_DEMUX,MSGL_DBG4,"%08X: flag=%02X segs=%d pad=%d time=%ld dur=%d\n", |
201 demux->filepos,flags,segs,padding,time,duration); | 202 demux->filepos,flags,segs,padding,time,duration); |
202 for(seg=0;seg<segs;seg++){ | 203 for(seg=0;seg<segs;seg++){ |
203 //ASF_segmhdr_t* sh; | 204 //ASF_segmhdr_t* sh; |
204 unsigned char streamno; | 205 unsigned char streamno; |
205 unsigned char seq; | 206 unsigned char seq; |
207 unsigned long x; | 208 unsigned long x; |
208 unsigned char type; | 209 unsigned char type; |
209 unsigned long time2; | 210 unsigned long time2; |
210 int keyframe=0; | 211 int keyframe=0; |
211 | 212 |
212 if(p>=p_end) printf("Warning! invalid packet 1, sig11 coming soon...\n"); | 213 if(p>=p_end) mp_msg(MSGT_DEMUX,MSGL_V,"Warning! invalid packet 1, sig11 coming soon...\n"); |
213 | 214 |
214 if(verbose>1){ | 215 if(verbose>1){ |
215 int i; | 216 int i; |
216 printf("seg %d:",seg); | 217 printf("seg %d:",seg); |
217 for(i=0;i<16;i++) printf(" %02X",p[i]); | 218 for(i=0;i<16;i++) printf(" %02X",p[i]); |
235 case 0x5D: | 236 case 0x5D: |
236 x=LOAD_LE32(p); | 237 x=LOAD_LE32(p); |
237 p+=4; | 238 p+=4; |
238 break; | 239 break; |
239 default: | 240 default: |
240 printf("Warning! unknown segtype == 0x%2X \n",segtype); | 241 mp_msg(MSGT_DEMUX,MSGL_V,"Warning! unknown segtype == 0x%2X \n",segtype); |
241 x=0; | 242 x=0; |
242 } | 243 } |
243 | 244 |
244 type=p[0]; p++; // 0x01: grouping 0x08: single | 245 type=p[0]; p++; // 0x01: grouping 0x08: single |
245 | 246 |
252 //printf("!!! obj_length = %d\n",*((unsigned long*)p)); | 253 //printf("!!! obj_length = %d\n",*((unsigned long*)p)); |
253 p+=4; | 254 p+=4; |
254 time2=LOAD_LE32(p);p+=4; | 255 time2=LOAD_LE32(p);p+=4; |
255 break; | 256 break; |
256 default: | 257 default: |
257 printf("unknown segment type: 0x%02X \n",type); | 258 mp_msg(MSGT_DEMUX,MSGL_V,"unknown segment type: 0x%02X \n",type); |
258 } | 259 } |
259 | 260 |
260 if(flags&1){ | 261 if(flags&1){ |
261 // multiple segments | 262 // multiple segments |
262 if(segsizetype==0x40){ | 263 if(segsizetype==0x40){ |
267 } else { | 268 } else { |
268 // single segment | 269 // single segment |
269 len=plen-(p-asf_packet); | 270 len=plen-(p-asf_packet); |
270 } | 271 } |
271 if(len<0 || (p+len)>=p_end){ | 272 if(len<0 || (p+len)>=p_end){ |
272 printf("ASF_parser: warning! segment len=%d\n",len); | 273 mp_msg(MSGT_DEMUX,MSGL_V,"ASF_parser: warning! segment len=%d\n",len); |
273 } | 274 } |
274 if(verbose>=4) printf(" seg #%d: streamno=%d seq=%d type=%02X len=%d\n",seg,streamno,seq,type,len); | 275 mp_dbg(MSGT_DEMUX,MSGL_DBG4," seg #%d: streamno=%d seq=%d type=%02X len=%d\n",seg,streamno,seq,type,len); |
275 | 276 |
276 switch(type){ | 277 switch(type){ |
277 case 0x01: | 278 case 0x01: |
278 // GROUPING: | 279 // GROUPING: |
279 //printf("ASF_parser: warning! grouping (flag=1) not yet supported!\n",len); | 280 //printf("ASF_parser: warning! grouping (flag=1) not yet supported!\n",len); |
285 demux_asf_read_packet(demux,p,len2,streamno,seq,x,duration,-1,keyframe); | 286 demux_asf_read_packet(demux,p,len2,streamno,seq,x,duration,-1,keyframe); |
286 p+=len2; | 287 p+=len2; |
287 len-=len2+1; | 288 len-=len2+1; |
288 } | 289 } |
289 if(len!=0){ | 290 if(len!=0){ |
290 printf("ASF_parser: warning! groups total != len\n"); | 291 mp_msg(MSGT_DEMUX,MSGL_V,"ASF_parser: warning! groups total != len\n"); |
291 } | 292 } |
292 break; | 293 break; |
293 case 0x08: | 294 case 0x08: |
294 // NO GROUPING: | 295 // NO GROUPING: |
295 //printf("fragment offset: %d \n",sh->x); | 296 //printf("fragment offset: %d \n",sh->x); |
300 | 301 |
301 } // for segs | 302 } // for segs |
302 return 1; // success | 303 return 1; // success |
303 } | 304 } |
304 | 305 |
305 printf("%08X: UNKNOWN TYPE %02X %02X %02X %02X %02X...\n",demux->filepos,asf_packet[0],asf_packet[1],asf_packet[2],asf_packet[3],asf_packet[4]); | 306 mp_msg(MSGT_DEMUX,MSGL_V,"%08X: UNKNOWN TYPE %02X %02X %02X %02X %02X...\n",demux->filepos,asf_packet[0],asf_packet[1],asf_packet[2],asf_packet[3],asf_packet[4]); |
306 return 0; | 307 return 0; |
307 } | 308 } |
308 | 309 |
309 | 310 |
310 #include "wine/mmreg.h" | 311 #include "wine/mmreg.h" |