41 uint32_t stream_bitrates[128];
43 char stream_languages[128][6];
81 #define ASF_MAX_STREAMS 127
82 #define FRAME_HEADER_SIZE 17
86 0x90, 0x08, 0x00, 0x33, 0xb1, 0xe5, 0xcf, 0x11, 0x89, 0xf4, 0x00, 0xa0, 0xc9, 0x03, 0x49, 0xcb
91 0xce, 0x75, 0xf8, 0x7b, 0x8d, 0x46, 0xd1, 0x11, 0x8d, 0x82, 0x00, 0x60, 0x97, 0xc9, 0xa2, 0xb2
94 #define PRINT_IF_GUID(g,cmp) \
95 if (!ff_guidcmp(g, &cmp)) \
96 av_dlog(NULL, "(GUID: %s) ", #cmp)
123 else PRINT_IF_GUID(g, stream_bitrate_guid);
133 #define print_guid(g)
138 assert(
sizeof(*g) == 16);
157 default:
return INT_MIN;
166 if ((
unsigned)len >= (UINT_MAX - 1)/2)
175 }
else if (type > 1 && type <= 5) {
177 snprintf(value, len,
"%"PRIu64, num);
221 int type_specific_size, sizeX;
224 int test_for_ext_stream_audio, is_dvr_ms_audio=0;
248 (10000000 / 1000) - start_time;
252 test_for_ext_stream_audio = 0;
263 test_for_ext_stream_audio = 1;
278 if (test_for_ext_stream_audio) {
297 if (is_dvr_ms_audio) {
310 if (size >= (pos2 + 8 - pos1 + 24)) {
346 size - (
avio_tell(pb) - pos1 + 24) >= 51) {
383 if(tag1 ==
MKTAG(
'D',
'V',
'R',
' ')){
395 avio_skip(pb, size - (pos2 - pos1 + 24));
405 int ext_len, payload_ext_ct, stream_ct, i;
406 uint32_t leak_rate, stream_num;
407 unsigned int stream_languageid_index;
422 if (stream_num < 128)
429 if (stream_num < 128)
432 for (i=0; i<stream_ct; i++){
438 for (i=0; i<payload_ext_ct; i++){
451 int len1, len2, len3, len4, len5;
459 get_tag(s,
"author" , 0, len2);
460 get_tag(s,
"copyright", 0, len3);
461 get_tag(s,
"comment" , 0, len4);
471 int desc_count, i, ret;
474 for(i=0;i<desc_count;i++) {
475 int name_len,value_type,value_len;
485 if (!value_type && value_len%2)
491 if (!strcmp(name,
"AspectRatioX")){
493 }
else if(!strcmp(name,
"AspectRatioY")){
496 get_tag(s, name, value_type, value_len);
508 for(j = 0; j < stream_count; j++) {
510 unsigned int lang_len =
avio_r8(pb);
524 int n, stream_num, name_len, value_len, value_num;
544 if (!strcmp(name,
"AspectRatioX")) asf->
dar[stream_num].
num= value_num;
545 else if(!strcmp(name,
"AspectRatioY")) asf->
dar[stream_num].
den= value_num;
555 int i, count, name_len, ret;
563 for(i=0;i<name_len;i++){
567 for(i=0;i<count;i++){
577 if ((ret =
avio_get_str16le(pb, name_len * 2, name,
sizeof(name))) < name_len)
605 av_dlog(s,
"%08"PRIx64
": ", gpos);
607 av_dlog(s,
" size=0x%"PRIx64
"\n", gsize);
611 if (!(asf->
hdr.
flags & 0x01) && gsize >= 100) {
673 for(i=0; i<128; i++){
693 if (rfc1766 && strlen(rfc1766) > 1) {
694 const char primary_tag[3] = { rfc1766[0], rfc1766[1],
'\0' };
708 #define DO_2BITS(bits, var, defval) \
711 case 3: var = avio_rl32(pb); rsize += 4; break; \
712 case 2: var = avio_rl16(pb); rsize += 2; break; \
713 case 1: var = avio_r8(pb); rsize++; break; \
714 default: var = defval; break; \
726 uint32_t packet_length, padsize;
739 if(c == 0x82 && !d && !e)
755 if ((c & 0x8f) == 0x82) {
776 if(!packet_length || packet_length >= (1
U<<29)){
780 if(padsize >= packet_length){
796 if (rsize > packet_length - padsize) {
799 "invalid packet header length %d for pktlen %d-%d at %"PRId64
"\n",
800 rsize, packet_length, padsize,
avio_tell(pb));
804 if (packet_length < asf->hdr.min_pktsize)
1029 if (ret < 0 || asf->packet_frag_offset + ret == 0)
1071 while (offset < asf_st->pkt.
size) {
1073 int row = off / asf_st->
ds_span;
1074 int col = off % asf_st->
ds_span;
1080 memcpy(newdata + offset,
1228 if (gsize < 24 || s->pb->eof_reached) {
1237 int64_t itime, last_pos=-1;
1246 for (i=0;i<ict;i++){
1252 if(pos != last_pos){
1253 av_log(s,
AV_LOG_DEBUG,
"pktnum:%d, pktct:%d pts: %"PRId64
"\n", pktnum, pktct, index_pts);