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) {
675 for(i=0; i<128; i++){
695 if (rfc1766 && strlen(rfc1766) > 1) {
696 const char primary_tag[3] = { rfc1766[0], rfc1766[1],
'\0' };
710 #define DO_2BITS(bits, var, defval) \
713 case 3: var = avio_rl32(pb); rsize += 4; break; \
714 case 2: var = avio_rl16(pb); rsize += 2; break; \
715 case 1: var = avio_r8(pb); rsize++; break; \
716 default: var = defval; break; \
728 uint32_t packet_length, padsize;
741 if(c == 0x82 && !d && !e)
757 if ((c & 0x8f) == 0x82) {
778 if(!packet_length || packet_length >= (1
U<<29)){
782 if(padsize >= packet_length){
798 if (rsize > packet_length - padsize) {
801 "invalid packet header length %d for pktlen %d-%d at %"PRId64
"\n",
802 rsize, packet_length, padsize,
avio_tell(pb));
806 if (packet_length < asf->hdr.min_pktsize)
1031 if (ret < 0 || asf->packet_frag_offset + ret == 0)
1073 while (offset < asf_st->pkt.
size) {
1075 int row = off / asf_st->
ds_span;
1076 int col = off % asf_st->
ds_span;
1082 memcpy(newdata + offset,
1230 if (gsize < 24 || s->pb->eof_reached) {
1239 int64_t itime, last_pos=-1;
1248 for (i=0;i<ict;i++){
1254 if(pos != last_pos){
1255 av_log(s,
AV_LOG_DEBUG,
"pktnum:%d, pktct:%d pts: %"PRId64
"\n", pktnum, pktct, index_pts);