annotate libmpdemux/asfheader.c @ 9009:f2d4324561b2

1) Removed the code to remove {} from sub_read_line_ssa 2) Put this code in a separated function: sub_pp_ssa 3) After recoding added a call to sub_pp_ssa. To be more acqurate: I added a pointer to function to hold a postprocessing function to be invoked after using iconv. There are one pointer for each format, if this pointer isn.t NULL the post processing function is called. patch by Salvador Eduardo Tropea <salvador@inti.gov.ar> help by <hephooey@fastmail.fm>
author arpi
date Sun, 19 Jan 2003 00:54:55 +0000
parents ae5a2ae1c349
children d42177a0da2a
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;
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8027
diff changeset
51 double asf_packetrate=0;
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8027
diff changeset
52 int asf_movielength=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
54 //int i;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
56 // the variable string is modify in this function
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
57 void pack_asf_string(char* string, int length) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
58 int i,j;
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
59 if( string==NULL ) return;
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
60 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
61 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
62 }
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
63 string[j]='\0';
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
64 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
65
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
66 // the variable string is modify in this function
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
67 void print_asf_string(const char* name, char* string, int length) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents: 816
diff changeset
68 pack_asf_string(string, length);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
69 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
70 }
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
71
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
72 static char* asf_chunk_type(unsigned char* guid) {
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
73 static char tmp[60];
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
74 char *p;
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
75 int i;
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
76
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
77 switch(ASF_LOAD_GUID_PREFIX(guid)){
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
78 case ASF_GUID_PREFIX_audio_stream:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
79 return "guid_audio_stream";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
80 case ASF_GUID_PREFIX_video_stream:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
81 return "guid_video_stream";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
82 case ASF_GUID_PREFIX_audio_conceal_none:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
83 return "guid_audio_conceal_none";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
84 case ASF_GUID_PREFIX_audio_conceal_interleave:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
85 return "guid_audio_conceal_interleave";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
86 case ASF_GUID_PREFIX_header:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
87 return "guid_header";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
88 case ASF_GUID_PREFIX_data_chunk:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
89 return "guid_data_chunk";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
90 case ASF_GUID_PREFIX_index_chunk:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
91 return "guid_index_chunk";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
92 case ASF_GUID_PREFIX_stream_header:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
93 return "guid_stream_header";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
94 case ASF_GUID_PREFIX_header_2_0:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
95 return "guid_header_2_0";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
96 case ASF_GUID_PREFIX_file_header:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
97 return "guid_file_header";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
98 case ASF_GUID_PREFIX_content_desc:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
99 return "guid_content_desc";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
100 default:
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
101 strcpy(tmp, "unknown guid ");
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
102 p = tmp + strlen(tmp);
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
103 for (i = 0; i < 16; i++) {
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
104 if ((1 << i) & ((1<<4) | (1<<6) | (1<<8))) *p++ = '-';
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
105 sprintf(p, "%02x", guid[i]);
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
106 p += 2;
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
107 }
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
108 return tmp;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
112 int asf_check_header(demuxer_t *demuxer){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113 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
114 stream_read(demuxer->stream,(char*) &asfh,sizeof(asfh)); // header obj
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
115 le2me_ASF_header_t(&asfh); // swap to machine endian
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 // for(i=0;i<16;i++) printf(" %02X",temp[i]);printf("\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 // for(i=0;i<16;i++) printf(" %02X",asfhdrguid[i]);printf("\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 if(memcmp(asfhdrguid,asfh.objh.guid,16)){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
119 mp_msg(MSGT_HEADER,MSGL_V,"ASF_check: not ASF guid!\n");
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 return 0; // not ASF guid
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 if(asfh.cno>256){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
123 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
124 return 0; // invalid header???
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128
601
2d3a4339bb5a warnings killed
szabii
parents: 600
diff changeset
129 extern void print_wave_header(WAVEFORMATEX *h);
2d3a4339bb5a warnings killed
szabii
parents: 600
diff changeset
130 extern void print_video_header(BITMAPINFOHEADER *h);
2d3a4339bb5a warnings killed
szabii
parents: 600
diff changeset
131
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
132 int read_asf_header(demuxer_t *demuxer){
7889
e44ec5681211 max header size increased
arpi
parents: 6666
diff changeset
133 static unsigned char buffer[2048];
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
134 uint32_t* streams = NULL;
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
135 int audio_streams=0;
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
136 int video_streams=0;
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
137 uint16_t stream_count=0;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
138 int best_video = -1;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
139 int best_audio = -1;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
140
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 #if 1
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 291
diff changeset
142 //printf("ASF file! (subchunks: %d)\n",asfh.cno);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 while(!stream_eof(demuxer->stream)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 int pos,endpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 pos=stream_tell(demuxer->stream);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 stream_read(demuxer->stream,(char*) &objh,sizeof(objh));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
147 le2me_ASF_obj_header_t(&objh);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 if(stream_eof(demuxer->stream)) break; // EOF
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 endpos=pos+objh.size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 // for(i=0;i<16;i++) printf("%02X ",objh.guid[i]);
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 291
diff changeset
151 //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
152 switch(ASF_LOAD_GUID_PREFIX(objh.guid)){
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
153 case ASF_GUID_PREFIX_stream_header:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154 stream_read(demuxer->stream,(char*) &streamh,sizeof(streamh));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
155 le2me_ASF_stream_header_t(&streamh);
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7889
diff changeset
156 if(verbose>0){
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
157 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
158 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
159 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
160 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
161 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
162 }
7889
e44ec5681211 max header size increased
arpi
parents: 6666
diff changeset
163 if(streamh.type_size>2048 || streamh.stream_size>2048){
e44ec5681211 max header size increased
arpi
parents: 6666
diff changeset
164 mp_msg(MSGT_HEADER,MSGL_FATAL,"FATAL: header size bigger than 2048 bytes (%d,%d)!\n"
e44ec5681211 max header size increased
arpi
parents: 6666
diff changeset
165 "Please contact mplayer authors, and upload/send this file.\n",
e44ec5681211 max header size increased
arpi
parents: 6666
diff changeset
166 (int)streamh.type_size,(int)streamh.stream_size);
1631
09284c9c2b49 exit() -> return NULL
arpi
parents: 1567
diff changeset
167 return 0;
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
168 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 // type-specific data:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 stream_read(demuxer->stream,(char*) buffer,streamh.type_size);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
171 switch(ASF_LOAD_GUID_PREFIX(streamh.type)){
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
172 case ASF_GUID_PREFIX_audio_stream: {
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1003
diff changeset
173 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
174 ++audio_streams;
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
175 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
176 memcpy(sh_audio->wf,buffer,streamh.type_size);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
177 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
178 if(verbose>=1) print_wave_header(sh_audio->wf);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
179 if(ASF_LOAD_GUID_PREFIX(streamh.concealment)==ASF_GUID_PREFIX_audio_conceal_interleave){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 stream_read(demuxer->stream,(char*) buffer,streamh.stream_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 asf_scrambling_h=buffer[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 asf_scrambling_w=(buffer[2]<<8)|buffer[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183 asf_scrambling_b=(buffer[4]<<8)|buffer[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 asf_scrambling_w/=asf_scrambling_b;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 asf_scrambling_b=asf_scrambling_h=asf_scrambling_w=1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
188 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
189 //if(demuxer->audio->id==-1) demuxer->audio->id=streamh.stream_no & 0x7F;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 break;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 109
diff changeset
191 }
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
192 case ASF_GUID_PREFIX_video_stream: {
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1003
diff changeset
193 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
194 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
195 ++video_streams;
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 426
diff changeset
196 // 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
197 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
198 memcpy(sh_video->bih,&buffer[4+4+1+2],len);
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
199 le2me_BITMAPINFOHEADER(sh_video->bih);
426
26e513f392b2 new stream selection code
arpi_esp
parents: 340
diff changeset
200 //sh_video->fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale;
26e513f392b2 new stream selection code
arpi_esp
parents: 340
diff changeset
201 //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
202 if(verbose>=1) print_video_header(sh_video->bih);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 //asf_video_id=streamh.stream_no & 0x7F;
426
26e513f392b2 new stream selection code
arpi_esp
parents: 340
diff changeset
204 //if(demuxer->video->id==-1) demuxer->video->id=streamh.stream_no & 0x7F;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 break;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents: 109
diff changeset
206 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 // stream-specific data:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 // stream_read(demuxer->stream,(char*) buffer,streamh.stream_size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 break;
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
211 // case ASF_GUID_PREFIX_header_2_0: return "guid_header_2_0";
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
212 case ASF_GUID_PREFIX_file_header: // guid_file_header
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 stream_read(demuxer->stream,(char*) &fileh,sizeof(fileh));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
214 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
215 //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
216 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
217 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
218 asf_packet=malloc(asf_packetsize); // !!!
8208
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8027
diff changeset
219 asf_packetrate=fileh.max_bitrate/8.0/(double)asf_packetsize;
ae5a2ae1c349 demuxer_control(), percent position and time length query implemented in
arpi
parents: 8027
diff changeset
220 asf_movielength=fileh.send_duration/10000000LL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 break;
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
222 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
223 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
224 demuxer->movi_end=endpos;
1754
3e2a7150cf11 largefile printf fix
arpi
parents: 1631
diff changeset
225 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
226 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
228 // case ASF_GUID_PREFIX_index_chunk: return "guid_index_chunk";
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
230 case ASF_GUID_PREFIX_content_desc: // Content description
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
231 {
1003
26579d6e6c38 Initialisation of ptr string to NULL to avoid gcc warning.
bertrand
parents: 848
diff changeset
232 char *string=NULL;
838
fdce0d25bbfa asf info moved to -v. Lucky.asf is broken with it
arpi_esp
parents: 833
diff changeset
233 stream_read(demuxer->stream,(char*) &contenth,sizeof(contenth));
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
234 le2me_ASF_content_description_t(&contenth);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
235 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
236 // extract the title
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
237 if( contenth.title_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
238 string=(char*)malloc(contenth.title_size);
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
239 stream_read(demuxer->stream, string, contenth.title_size);
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7889
diff changeset
240 if(verbose>0)
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
241 print_asf_string(" Title: ", string, contenth.title_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
242 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
243 pack_asf_string(string, contenth.title_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
244 demux_info_add(demuxer, "name", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
245 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
246 // extract the author
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
247 if( contenth.author_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
248 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
249 stream_read(demuxer->stream, string, contenth.author_size);
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7889
diff changeset
250 if(verbose>0)
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
251 print_asf_string(" Author: ", string, contenth.author_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
252 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
253 pack_asf_string(string, contenth.author_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
254 demux_info_add(demuxer, "author", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
255 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
256 // extract the copyright
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
257 if( contenth.copyright_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
258 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
259 stream_read(demuxer->stream, string, contenth.copyright_size);
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7889
diff changeset
260 if(verbose>0)
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
261 print_asf_string(" Copyright: ", string, contenth.copyright_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
262 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
263 pack_asf_string(string, contenth.copyright_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
264 demux_info_add(demuxer, "copyright", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
265 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
266 // extract the comment
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
267 if( contenth.comment_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
268 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
269 stream_read(demuxer->stream, string, contenth.comment_size);
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7889
diff changeset
270 if(verbose>0)
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
271 print_asf_string(" Comment: ", string, contenth.comment_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
272 else
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
273 pack_asf_string(string, contenth.comment_size);
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
274 demux_info_add(demuxer, "comments", string);
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
275 }
816
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
276 // extract the rating
843
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
277 if( contenth.rating_size!=0 ) {
a88b87750b8a Fixed crashing while reading the content description for some ASF file.
bertrand
parents: 838
diff changeset
278 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
279 stream_read(demuxer->stream, string, contenth.rating_size);
8027
b9da278e4c92 verbose can be negative
arpi
parents: 7889
diff changeset
280 if(verbose>0)
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
281 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
282 }
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1485
diff changeset
283 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
284 free(string);
6d72528d56ff ASF description printing patch by Bertrand BAUDET, fixed segfault of hory_bug/a.asf
arpi_esp
parents: 692
diff changeset
285 break;
3070
dee70d05a406 added demux_info support
alex
parents: 2338
diff changeset
286 }
4333
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
287 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
288 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
289 uint32_t max_bitrate;
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
290 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
291 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
292 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
293 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
294 if( object==NULL ) {
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
295 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
296 return 0;
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
297 }
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
298 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
299 // 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
300 ptr = object;
5618
f02b9bec4eed Changed the big handling to make it use mplayer's endian macros.
bertrand
parents: 5597
diff changeset
301 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
302 ptr += sizeof(uint16_t);
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
303 if(stream_count > 0)
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
304 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
305 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
306 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
307 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
308 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
309 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
310 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
311 ptr += sizeof(uint32_t);
5597
e9ceb08cc007 bigendlian fix by Guillaume Morin <guillaume@morinfr.org>
arpi
parents: 4538
diff changeset
312 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
313 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
314 streams[2*i] = stream_id;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
315 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
316 }
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
317 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
318 free( object );
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
319 break;
c67d50d4a889 Add a parser for the "ASF group stream object" and display the bitrate values
bertrand
parents: 4288
diff changeset
320 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 } // switch GUID
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 601
diff changeset
322
1342
baf646413408 ASF support for non-x86 cpus
jkeil
parents: 1289
diff changeset
323 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
324
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325 if(!stream_seek(demuxer->stream,endpos)) break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326 } // while EOF
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
327
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
328 if(streams) {
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
329 uint32_t vr = 0, ar = 0,i;
6666
349138a7b414 Fix -bandwidth if no streaming available, 10l ;)
atmos4
parents: 6645
diff changeset
330 #ifdef STREAMING
6645
fc2de514a140 If network is used, take the streams id that were requested.
bertrand
parents: 6187
diff changeset
331 if( demuxer->stream->streaming_ctrl!=NULL ) {
fc2de514a140 If network is used, take the streams id that were requested.
bertrand
parents: 6187
diff changeset
332 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
333 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
334 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
335 }
6666
349138a7b414 Fix -bandwidth if no streaming available, 10l ;)
atmos4
parents: 6645
diff changeset
336 } else
349138a7b414 Fix -bandwidth if no streaming available, 10l ;)
atmos4
parents: 6645
diff changeset
337 #endif
4538
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
338 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
339 uint32_t id = streams[2*i];
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
340 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
341 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
342 vr = rate;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
343 best_video = id;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
344 } 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
345 ar = rate;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
346 best_audio = id;
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
347 }
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
348 }
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
349 free(streams);
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
350 }
354048e506ab Added auto selection of the best streams and fixed a few compiler
albeu
parents: 4349
diff changeset
351
4349
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
352 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
353 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
354 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
355 if(!video_streams){
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
356 if(!audio_streams){
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
357 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
358 return 0;
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
359 }
266cb1a68519 pre-check for audio/video streams (hope it fix wma steraming)
arpi
parents: 4333
diff changeset
360 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
361 } 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
362
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 #if 0
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 if(verbose){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
365 printf("ASF duration: %d\n",(int)fileh.duration);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
366 printf("ASF start pts: %d\n",(int)fileh.start_timestamp);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
367 printf("ASF end pts: %d\n",(int)fileh.end_timestamp);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
368 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
370
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
371 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 }