44 uint32_t stream_bitrates[128];
46 char stream_languages[128][6];
98 #define ASF_MAX_STREAMS 127
99 #define FRAME_HEADER_SIZE 17
103 0x90, 0x08, 0x00, 0x33, 0xb1, 0xe5, 0xcf, 0x11, 0x89, 0xf4, 0x00, 0xa0, 0xc9, 0x03, 0x49, 0xcb
108 0xce, 0x75, 0xf8, 0x7b, 0x8d, 0x46, 0xd1, 0x11, 0x8d, 0x82, 0x00, 0x60, 0x97, 0xc9, 0xa2, 0xb2
111 #define PRINT_IF_GUID(g,cmp) \
112 if (!ff_guidcmp(g, &cmp)) \
113 av_dlog(NULL, "(GUID: %s) ", #cmp)
140 else PRINT_IF_GUID(g, stream_bitrate_guid);
150 #define print_guid(g)
155 assert(
sizeof(*g) == 16);
174 default:
return INT_MIN;
189 int ret, type, picsize, desc_len;
192 if (len < 1 + 4 + 2 + 2) {
212 if (!strncmp(mime->
str, mimetype,
sizeof(mimetype))) {
224 if (picsize >= len) {
231 desc_len = (len - picsize) * 2 + 1;
278 if ((
unsigned)len >= (UINT_MAX - 1)/2)
287 }
else if (type > 1 && type <= 5) {
289 snprintf(value, len,
"%"PRIu64, num);
290 }
else if (type == 1 && !strcmp(key,
"WM/Picture")) {
336 int type_specific_size, sizeX;
339 int test_for_ext_stream_audio, is_dvr_ms_audio=0;
363 (10000000 / 1000) - start_time;
367 test_for_ext_stream_audio = 0;
378 test_for_ext_stream_audio = 1;
393 if (test_for_ext_stream_audio) {
412 if (is_dvr_ms_audio) {
425 if (size >= (pos2 + 8 - pos1 + 24)) {
439 size - (
avio_tell(pb) - pos1 + 24) >= 51) {
475 if(tag1 ==
MKTAG(
'D',
'V',
'R',
' ')){
487 avio_skip(pb, size - (pos2 - pos1 + 24));
497 int ext_len, payload_ext_ct, stream_ct, i;
498 uint32_t leak_rate, stream_num;
499 unsigned int stream_languageid_index;
514 if (stream_num < 128)
521 if (stream_num < 128)
524 for (i=0; i<stream_ct; i++){
530 for (i=0; i<payload_ext_ct; i++){
543 int len1, len2, len3, len4, len5;
551 get_tag(s,
"author" , 0, len2);
552 get_tag(s,
"copyright", 0, len3);
553 get_tag(s,
"comment" , 0, len4);
563 int desc_count, i, ret;
566 for(i=0;i<desc_count;i++) {
567 int name_len,value_type,value_len;
577 if (!value_type && value_len%2)
583 if (!strcmp(name,
"AspectRatioX")){
585 }
else if(!strcmp(name,
"AspectRatioY")){
588 get_tag(s, name, value_type, value_len);
600 for(j = 0; j < stream_count; j++) {
602 unsigned int lang_len =
avio_r8(pb);
616 int n, stream_num, name_len, value_len, value_num;
632 av_dlog(s,
"%d %d %d %d %d <%s>\n",
633 i, stream_num, name_len, value_type, value_len, name);
638 if (!strcmp(name,
"AspectRatioX")) asf->
dar[stream_num].
num= value_num;
639 else if(!strcmp(name,
"AspectRatioY")) asf->
dar[stream_num].
den= value_num;
649 int i, count, name_len, ret;
657 for(i=0;i<name_len;i++){
661 for(i=0;i<count;i++){
671 if ((ret =
avio_get_str16le(pb, name_len * 2, name,
sizeof(name))) < name_len)
703 if (!(asf->
hdr.
flags & 0x01) && gsize >= 100) {
767 for(i=0; i<128; i++){
782 av_dlog(s,
"i=%d, st->codec->codec_type:%d, asf->dar %d:%d sar=%d:%d\n",
789 if (rfc1766 && strlen(rfc1766) > 1) {
790 const char primary_tag[3] = { rfc1766[0], rfc1766[1],
'\0' };
804 #define DO_2BITS(bits, var, defval) \
807 case 3: var = avio_rl32(pb); rsize += 4; break; \
808 case 2: var = avio_rl16(pb); rsize += 2; break; \
809 case 1: var = avio_r8(pb); rsize++; break; \
810 default: var = defval; break; \
822 uint32_t packet_length, padsize;
837 if(c == 0x82 && !d && !e)
853 if ((c & 0x8f) == 0x82) {
874 if(!packet_length || packet_length >= (1
U<<29)){
878 if(padsize >= packet_length){
894 if (rsize > packet_length - padsize) {
897 "invalid packet header length %d for pktlen %d-%d at %"PRId64
"\n",
898 rsize, packet_length, padsize,
avio_tell(pb));
902 if (packet_length < asf->hdr.min_pktsize)
926 av_dlog(asf,
"key:%d stream:%d seq:%d offset:%d replic_size:%d\n",
1096 av_dlog(asf,
"new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n",
1108 av_dlog(asf,
"READ PACKET s:%d os:%d o:%d,%d l:%d DATA:%p\n",
1125 if (ret < 0 || asf->packet_frag_offset + ret == 0)
1163 "ds_span (%d %d %d)\n", asf_st->
pkt.
size,
1171 while (offset < asf_st->pkt.
size) {
1173 int row = off / asf_st->
ds_span;
1174 int col = off % asf_st->
ds_span;
1178 memcpy(newdata + offset,
1322 if (gsize < 24 || s->pb->eof_reached) {
1331 int64_t itime, last_pos=-1;
1340 for (i=0;i<ict;i++){
1346 if(pos != last_pos){
1347 av_log(s,
AV_LOG_DEBUG,
"pktnum:%d, pktct:%d pts: %"PRId64
"\n", pktnum, pktct, index_pts);
1410 .priv_class = &asf_class,