annotate libmpdemux/asfheader.c @ 7492:5465cbd5c5ef

Modern versions of OpenSSH listen on localhost to forward the X11 connection (X11UseLocalhost defaults to yes). The following patch permits to consider as non local any DISPLAY environment which port is greater or equal to 10 else mplayer tries a local optimization on a distant X server which doesn't work. patch by Denis.Ducamp@groar.org
author arpi
date Mon, 23 Sep 2002 21:17:30 +0000
parents 349138a7b414
children e44ec5681211
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 // .asf fileformat docs from http://divx.euro.ru
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
3
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
4 #include <stdio.h>
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
5 #include <stdlib.h>
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1342
diff changeset
6 #include <unistd.h>
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
7
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
8 extern int verbose; // defined in mplayer.c
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
9
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
10 #include "config.h"
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
11 #include "mp_msg.h"
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
12
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
13 #include "stream.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
14 #include "demuxer.h"
2338
4f3e8c8ea32f includes cleanup
arpi
parents: 2310
diff changeset
15 #include "stheader.h"
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
16
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
17 #include "asf.h"
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
18
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
19 #ifdef ARCH_X86
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
20 #define ASF_LOAD_GUID_PREFIX(guid) (*(uint32_t *)(guid))
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
21 #else
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
22 #define ASF_LOAD_GUID_PREFIX(guid) \
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
23 ((guid)[3] << 24 | (guid)[2] << 16 | (guid)[1] << 8 | (guid)[0])
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
24 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
26 #define ASF_GUID_PREFIX_audio_stream 0xF8699E40
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
27 #define ASF_GUID_PREFIX_video_stream 0xBC19EFC0
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
28 #define ASF_GUID_PREFIX_audio_conceal_none 0x49f1a440
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
29 #define ASF_GUID_PREFIX_audio_conceal_interleave 0xbfc3cd50
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
30 #define ASF_GUID_PREFIX_header 0x75B22630
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
31 #define ASF_GUID_PREFIX_data_chunk 0x75b22636
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
32 #define ASF_GUID_PREFIX_index_chunk 0x33000890
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
33 #define ASF_GUID_PREFIX_stream_header 0xB7DC0791
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
34 #define ASF_GUID_PREFIX_header_2_0 0xD6E229D1
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
35 #define ASF_GUID_PREFIX_file_header 0x8CABDCA1
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
36 #define ASF_GUID_PREFIX_content_desc 0x75b22633
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
37 #define ASF_GUID_PREFIX_stream_group 0x7bf875ce
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
40 static ASF_header_t asfh;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
41 static ASF_obj_header_t objh;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
42 static ASF_file_header_t fileh;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
43 static ASF_stream_header_t streamh;
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
44 static ASF_content_description_t contenth;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
45
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 unsigned char* asf_packet=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 int asf_scrambling_h=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 int asf_scrambling_w=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 int asf_scrambling_b=1;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
50 int asf_packetsize=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
52 //int i;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
54 // the variable string is modify in this function
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
55 void pack_asf_string(char* string, int length) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
56 int i,j;
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
57 if( string==NULL ) return;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
58 for( i=0, j=0; i<length && string[i]!='\0'; i+=2, j++) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
59 string[j]=string[i];
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
60 }
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
61 string[j]='\0';
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
62 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
63
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
64 // the variable string is modify in this function
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
65 void print_asf_string(const char* name, char* string, int length) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
66 pack_asf_string(string, length);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
67 mp_msg(MSGT_HEADER,MSGL_V,"%s%s\n", name, string);
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
68 }
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
69
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
70 static char* asf_chunk_type(unsigned char* guid) {
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
71 static char tmp[60];
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
72 char *p;
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
73 int i;
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
74
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
75 switch(ASF_LOAD_GUID_PREFIX(guid)){
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
76 case ASF_GUID_PREFIX_audio_stream:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
77 return "guid_audio_stream";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
78 case ASF_GUID_PREFIX_video_stream:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
79 return "guid_video_stream";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
80 case ASF_GUID_PREFIX_audio_conceal_none:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
81 return "guid_audio_conceal_none";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
82 case ASF_GUID_PREFIX_audio_conceal_interleave:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
83 return "guid_audio_conceal_interleave";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
84 case ASF_GUID_PREFIX_header:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
85 return "guid_header";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
86 case ASF_GUID_PREFIX_data_chunk:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
87 return "guid_data_chunk";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
88 case ASF_GUID_PREFIX_index_chunk:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
89 return "guid_index_chunk";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
90 case ASF_GUID_PREFIX_stream_header:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
91 return "guid_stream_header";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
92 case ASF_GUID_PREFIX_header_2_0:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
93 return "guid_header_2_0";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
94 case ASF_GUID_PREFIX_file_header:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
95 return "guid_file_header";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
96 case ASF_GUID_PREFIX_content_desc:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
97 return "guid_content_desc";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
98 default:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
99 strcpy(tmp, "unknown guid ");
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
100 p = tmp + strlen(tmp);
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
101 for (i = 0; i < 16; i++) {
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
102 if ((1 << i) & ((1<<4) | (1<<6) | (1<<8))) *p++ = '-';
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
103 sprintf(p, "%02x", guid[i]);
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
104 p += 2;
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
105 }
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
106 return tmp;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
110 int asf_check_header(demuxer_t *demuxer){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 unsigned char asfhdrguid[16]={0x30,0x26,0xB2,0x75,0x8E,0x66,0xCF,0x11,0xA6,0xD9,0x00,0xAA,0x00,0x62,0xCE,0x6C};
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 stream_read(demuxer->stream,(char*) &asfh,sizeof(asfh)); // header obj
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
113 le2me_ASF_header_t(&asfh); // swap to machine endian
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 // for(i=0;i<16;i++) printf(" %02X",temp[i]);printf("\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 // for(i=0;i<16;i++) printf(" %02X",asfhdrguid[i]);printf("\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 if(memcmp(asfhdrguid,asfh.objh.guid,16)){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
117 mp_msg(MSGT_HEADER,MSGL_V,"ASF_check: not ASF guid!\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 return 0; // not ASF guid
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 if(asfh.cno>256){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
121 mp_msg(MSGT_HEADER,MSGL_V,"ASF_check: invalid subchunks_no %d\n",(int) asfh.cno);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 return 0; // invalid header???
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126
601
2d3a4339bb5a warnings killed
szabii
parents: 600
diff changeset
127 extern void print_wave_header(WAVEFORMATEX *h);
2d3a4339bb5a warnings killed
szabii
parents: 600
diff changeset
128 extern void print_video_header(BITMAPINFOHEADER *h);
2d3a4339bb5a warnings killed
szabii
parents: 600
diff changeset
129
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
130 int read_asf_header(demuxer_t *demuxer){
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
131 static unsigned char buffer[1024];
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
132 uint32_t* streams = NULL;
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
133 int audio_streams=0;
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
134 int video_streams=0;
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
135 uint16_t stream_count=0;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
136 int best_video = -1;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
137 int best_audio = -1;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
138
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 #if 1
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 291
diff changeset
140 //printf("ASF file! (subchunks: %d)\n",asfh.cno);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 while(!stream_eof(demuxer->stream)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 int pos,endpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 pos=stream_tell(demuxer->stream);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 stream_read(demuxer->stream,(char*) &objh,sizeof(objh));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
145 le2me_ASF_obj_header_t(&objh);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 if(stream_eof(demuxer->stream)) break; // EOF
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 endpos=pos+objh.size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 // for(i=0;i<16;i++) printf("%02X ",objh.guid[i]);
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 291
diff changeset
149 //printf("0x%08X [%s] %d\n",pos, asf_chunk_type(objh.guid),(int) objh.size);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
150 switch(ASF_LOAD_GUID_PREFIX(objh.guid)){
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
151 case ASF_GUID_PREFIX_stream_header:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 stream_read(demuxer->stream,(char*) &streamh,sizeof(streamh));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
153 le2me_ASF_stream_header_t(&streamh);
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
154 if(verbose){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
155 mp_msg(MSGT_HEADER,MSGL_V,"stream type: %s\n",asf_chunk_type(streamh.type));
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
156 mp_msg(MSGT_HEADER,MSGL_V,"stream concealment: %s\n",asf_chunk_type(streamh.concealment));
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
157 mp_msg(MSGT_HEADER,MSGL_V,"type: %d bytes, stream: %d bytes ID: %d\n",(int)streamh.type_size,(int)streamh.stream_size,(int)streamh.stream_no);
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
158 mp_msg(MSGT_HEADER,MSGL_V,"unk1: %lX unk2: %X\n",(unsigned long)streamh.unk1,(unsigned int)streamh.unk2);
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
159 mp_msg(MSGT_HEADER,MSGL_V,"FILEPOS=0x%X\n",stream_tell(demuxer->stream));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
160 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
161 if(streamh.type_size>1024 || streamh.stream_size>1024){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
162 mp_msg(MSGT_HEADER,MSGL_FATAL,"FATAL: header size bigger than 1024 bytes!\n"
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
163 "Please contact mplayer authors, and upload/send this file.\n");
1631
09284c9c2b49 exit() -> return NULL
arpi
parents: 1567
diff changeset
164 return 0;
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
165 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 // type-specific data:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 stream_read(demuxer->stream,(char*) buffer,streamh.type_size);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
168 switch(ASF_LOAD_GUID_PREFIX(streamh.type)){
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
169 case ASF_GUID_PREFIX_audio_stream: {
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1003
diff changeset
170 sh_audio_t* sh_audio=new_sh_audio(demuxer,streamh.stream_no & 0x7F);
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
171 ++audio_streams;
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
172 sh_audio->wf=calloc((streamh.type_size<sizeof(WAVEFORMATEX))?sizeof(WAVEFORMATEX):streamh.type_size,1);
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
173 memcpy(sh_audio->wf,buffer,streamh.type_size);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
174 le2me_WAVEFORMATEX(sh_audio->wf);
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
175 if(verbose>=1) print_wave_header(sh_audio->wf);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
176 if(ASF_LOAD_GUID_PREFIX(streamh.concealment)==ASF_GUID_PREFIX_audio_conceal_interleave){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177 stream_read(demuxer->stream,(char*) buffer,streamh.stream_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 asf_scrambling_h=buffer[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 asf_scrambling_w=(buffer[2]<<8)|buffer[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 asf_scrambling_b=(buffer[4]<<8)|buffer[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 asf_scrambling_w/=asf_scrambling_b;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183 asf_scrambling_b=asf_scrambling_h=asf_scrambling_w=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
185 mp_msg(MSGT_HEADER,MSGL_V,"ASF: audio scrambling: %d x %d x %d\n",asf_scrambling_h,asf_scrambling_w,asf_scrambling_b);
426
26e513f392b2 new stream selection code
arpi_esp
parents: 340
diff changeset
186 //if(demuxer->audio->id==-1) demuxer->audio->id=streamh.stream_no & 0x7F;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 break;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 109
diff changeset
188 }
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
189 case ASF_GUID_PREFIX_video_stream: {
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1003
diff changeset
190 sh_video_t* sh_video=new_sh_video(demuxer,streamh.stream_no & 0x7F);
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
191 unsigned int len=streamh.type_size-(4+4+1+2);
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
192 ++video_streams;
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
193 // sh_video->bih=malloc(chunksize); memset(sh_video->bih,0,chunksize);
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
194 sh_video->bih=calloc((len<sizeof(BITMAPINFOHEADER))?sizeof(BITMAPINFOHEADER):len,1);
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
195 memcpy(sh_video->bih,&buffer[4+4+1+2],len);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
196 le2me_BITMAPINFOHEADER(sh_video->bih);
426
26e513f392b2 new stream selection code
arpi_esp
parents: 340
diff changeset
197 //sh_video->fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale;
26e513f392b2 new stream selection code
arpi_esp
parents: 340
diff changeset
198 //sh_video->frametime=(float)sh_video->video.dwScale/(float)sh_video->video.dwRate;
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
199 if(verbose>=1) print_video_header(sh_video->bih);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 //asf_video_id=streamh.stream_no & 0x7F;
426
26e513f392b2 new stream selection code
arpi_esp
parents: 340
diff changeset
201 //if(demuxer->video->id==-1) demuxer->video->id=streamh.stream_no & 0x7F;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 break;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 109
diff changeset
203 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 // stream-specific data:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 // stream_read(demuxer->stream,(char*) buffer,streamh.stream_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 break;
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
208 // case ASF_GUID_PREFIX_header_2_0: return "guid_header_2_0";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
209 case ASF_GUID_PREFIX_file_header: // guid_file_header
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 stream_read(demuxer->stream,(char*) &fileh,sizeof(fileh));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
211 le2me_ASF_file_header_t(&fileh);
4288
b84e9861461c Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents: 3070
diff changeset
212 //mp_msg(MSGT_HEADER,MSGL_V,"ASF: packets: %d flags: %d pack_size: %d frame_size: %d\n",(int)fileh.packets,(int)fileh.flags,(int)fileh.packetsize,(int)fileh.frame_size);
b84e9861461c Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents: 3070
diff changeset
213 mp_msg(MSGT_HEADER,MSGL_V,"ASF: packets: %d flags: %d max_packet_size: %d min_packet_size: %d max_bitrate: %d preroll: %d\n",(int)fileh.num_packets,(int)fileh.flags,(int)fileh.min_packet_size,(int)fileh.max_packet_size,(int)fileh.max_bitrate,(int)fileh.preroll);
b84e9861461c Changed the asf_file_header_t struct to read all the fields properly.
bertrand
parents: 3070
diff changeset
214 asf_packetsize=fileh.max_packet_size;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
215 asf_packet=malloc(asf_packetsize); // !!!
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 break;
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
217 case ASF_GUID_PREFIX_data_chunk: // guid_data_chunk
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
218 demuxer->movi_start=stream_tell(demuxer->stream)+26;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
219 demuxer->movi_end=endpos;
1754
3e2a7150cf11 largefile printf fix
arpi
parents: 1631
diff changeset
220 mp_msg(MSGT_HEADER,MSGL_V,"Found movie at 0x%X - 0x%X\n",(int)demuxer->movi_start,(int)demuxer->movi_end);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
223 // case ASF_GUID_PREFIX_index_chunk: return "guid_index_chunk";
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
225 case ASF_GUID_PREFIX_content_desc: // Content description
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
226 {
1003
26579d6e6c38 Initialisation of ptr string to NULL to avoid gcc warning.
bertrand
parents: 848
diff changeset
227 char *string=NULL;
838
fdce0d25bbfa asf info moved to -v. Lucky.asf is broken with it
arpi_esp
parents: 833
diff changeset
228 stream_read(demuxer->stream,(char*) &contenth,sizeof(contenth));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
229 le2me_ASF_content_description_t(&contenth);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
230 mp_msg(MSGT_HEADER,MSGL_V,"\n");
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
231 // extract the title
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
232 if( contenth.title_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
233 string=(char*)malloc(contenth.title_size);
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
234 stream_read(demuxer->stream, string, contenth.title_size);
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
235 if(verbose)
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
236 print_asf_string(" Title: ", string, contenth.title_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
237 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
238 pack_asf_string(string, contenth.title_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
239 demux_info_add(demuxer, "name", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
240 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
241 // extract the author
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
242 if( contenth.author_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
243 string=(char*)realloc((void*)string, contenth.author_size);
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
244 stream_read(demuxer->stream, string, contenth.author_size);
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
245 if(verbose)
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
246 print_asf_string(" Author: ", string, contenth.author_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
247 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
248 pack_asf_string(string, contenth.author_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
249 demux_info_add(demuxer, "author", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
250 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
251 // extract the copyright
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
252 if( contenth.copyright_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
253 string=(char*)realloc((void*)string, contenth.copyright_size);
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
254 stream_read(demuxer->stream, string, contenth.copyright_size);
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
255 if(verbose)
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
256 print_asf_string(" Copyright: ", string, contenth.copyright_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
257 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
258 pack_asf_string(string, contenth.copyright_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
259 demux_info_add(demuxer, "copyright", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
260 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
261 // extract the comment
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
262 if( contenth.comment_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
263 string=(char*)realloc((void*)string, contenth.comment_size);
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
264 stream_read(demuxer->stream, string, contenth.comment_size);
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
265 if(verbose)
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
266 print_asf_string(" Comment: ", string, contenth.comment_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
267 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
268 pack_asf_string(string, contenth.comment_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
269 demux_info_add(demuxer, "comments", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
270 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
271 // extract the rating
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
272 if( contenth.rating_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
273 string=(char*)realloc((void*)string, contenth.rating_size);
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
274 stream_read(demuxer->stream, string, contenth.rating_size);
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
275 if(verbose)
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
276 print_asf_string(" Rating: ", string, contenth.rating_size);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
277 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
278 mp_msg(MSGT_HEADER,MSGL_V,"\n");
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
279 free(string);
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
280 break;
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
281 }
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
282 case ASF_GUID_PREFIX_stream_group: {
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
283 uint16_t stream_id, i;
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
284 uint32_t max_bitrate;
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
285 char *object=NULL, *ptr=NULL;
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
286 printf("============ ASF Stream group == START ===\n");
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
287 printf(" object size = %d\n", (int)objh.size);
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
288 object = (char*)malloc(objh.size);
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
289 if( object==NULL ) {
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
290 printf("Memory allocation failed\n");
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
291 return 0;
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
292 }
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
293 stream_read( demuxer->stream, object, objh.size );
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
294 // FIXME: We need some endian handling below...
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
295 ptr = object;
5618
f02b9bec4eed Changed the big handling to make it use mplayer's endian macros.
bertrand
parents: 5597
diff changeset
296 stream_count = le2me_16(*(uint16_t*)ptr);
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
297 ptr += sizeof(uint16_t);
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
298 if(stream_count > 0)
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
299 streams = (uint32_t*)malloc(2*stream_count*sizeof(uint32_t));
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
300 printf(" stream count=[0x%x][%u]\n", stream_count, stream_count );
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
301 for( i=0 ; i<stream_count && ptr<((char*)object+objh.size) ; i++ ) {
5618
f02b9bec4eed Changed the big handling to make it use mplayer's endian macros.
bertrand
parents: 5597
diff changeset
302 stream_id = le2me_16(*(uint16_t*)ptr);
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
303 ptr += sizeof(uint16_t);
6187
50858d90c8d0 On the sun all int32 objects have to be aligned on 32 bit boundaries. With
arpi
parents: 5618
diff changeset
304 memcpy(&max_bitrate, ptr, sizeof(uint32_t));// workaround unaligment bug on sparc
50858d90c8d0 On the sun all int32 objects have to be aligned on 32 bit boundaries. With
arpi
parents: 5618
diff changeset
305 max_bitrate = le2me_32(max_bitrate);
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
306 ptr += sizeof(uint32_t);
5597
e9ceb08cc007 bigendlian fix by Guillaume Morin <guillaume@morinfr.org>
arpi
parents: 4538
diff changeset
307 printf(" stream id=[0x%x][%u]\n", stream_id, stream_id );
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
308 printf(" max bitrate=[0x%x][%u]\n", max_bitrate, max_bitrate );
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
309 streams[2*i] = stream_id;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
310 streams[2*i+1] = max_bitrate;
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
311 }
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
312 printf("============ ASF Stream group == END ===\n");
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
313 free( object );
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
314 break;
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
315 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 } // switch GUID
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 601
diff changeset
317
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
318 if(ASF_LOAD_GUID_PREFIX(objh.guid)==ASF_GUID_PREFIX_data_chunk) break; // movi chunk
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 601
diff changeset
319
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 if(!stream_seek(demuxer->stream,endpos)) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 } // while EOF
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
323 if(streams) {
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
324 uint32_t vr = 0, ar = 0,i;
6666
349138a7b414 Fix -bandwidth if no streaming available, 10l ;)
atmos4
parents: 6645
diff changeset
325 #ifdef STREAMING
6645
fc2de514a140 If network is used, take the streams id that were requested.
bertrand
parents: 6187
diff changeset
326 if( demuxer->stream->streaming_ctrl!=NULL ) {
fc2de514a140 If network is used, take the streams id that were requested.
bertrand
parents: 6187
diff changeset
327 if( demuxer->stream->streaming_ctrl->bandwidth!=0 && demuxer->stream->streaming_ctrl->data!=NULL ) {
fc2de514a140 If network is used, take the streams id that were requested.
bertrand
parents: 6187
diff changeset
328 best_audio = ((asf_http_streaming_ctrl_t*)demuxer->stream->streaming_ctrl->data)->audio_id;
fc2de514a140 If network is used, take the streams id that were requested.
bertrand
parents: 6187
diff changeset
329 best_video = ((asf_http_streaming_ctrl_t*)demuxer->stream->streaming_ctrl->data)->video_id;
fc2de514a140 If network is used, take the streams id that were requested.
bertrand
parents: 6187
diff changeset
330 }
6666
349138a7b414 Fix -bandwidth if no streaming available, 10l ;)
atmos4
parents: 6645
diff changeset
331 } else
349138a7b414 Fix -bandwidth if no streaming available, 10l ;)
atmos4
parents: 6645
diff changeset
332 #endif
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
333 for(i = 0; i < stream_count; i++) {
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
334 uint32_t id = streams[2*i];
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
335 uint32_t rate = streams[2*i+1];
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
336 if(demuxer->v_streams[id] && rate > vr) {
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
337 vr = rate;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
338 best_video = id;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
339 } else if(demuxer->a_streams[id] && rate > ar) {
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
340 ar = rate;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
341 best_audio = id;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
342 }
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
343 }
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
344 free(streams);
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
345 }
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
346
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
347 mp_msg(MSGT_HEADER,MSGL_V,"ASF: %d audio and %d video streams found\n",audio_streams,video_streams);
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
348 if(!audio_streams) demuxer->audio->id=-2; // nosound
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
349 else if(best_audio > 0 && demuxer->audio->id == -1) demuxer->audio->id=best_audio;
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
350 if(!video_streams){
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
351 if(!audio_streams){
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
352 mp_msg(MSGT_HEADER,MSGL_ERR,"ASF: no audio or video headers found - broken file?\n");
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
353 return 0;
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
354 }
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
355 demuxer->video->id=-2; // audio-only
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
356 } else if (best_video > 0 && demuxer->video->id == -1) demuxer->video->id = best_video;
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
357
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 #if 0
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359 if(verbose){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360 printf("ASF duration: %d\n",(int)fileh.duration);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 printf("ASF start pts: %d\n",(int)fileh.start_timestamp);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 printf("ASF end pts: %d\n",(int)fileh.end_timestamp);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
365
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
366 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
367 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
368 }