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) {
765 for(i=0; i<128; i++){
780 av_dlog(s,
"i=%d, st->codec->codec_type:%d, asf->dar %d:%d sar=%d:%d\n",
787 if (rfc1766 && strlen(rfc1766) > 1) {
788 const char primary_tag[3] = { rfc1766[0], rfc1766[1],
'\0' };
802 #define DO_2BITS(bits, var, defval) \
805 case 3: var = avio_rl32(pb); rsize += 4; break; \
806 case 2: var = avio_rl16(pb); rsize += 2; break; \
807 case 1: var = avio_r8(pb); rsize++; break; \
808 default: var = defval; break; \
820 uint32_t packet_length, padsize;
835 if(c == 0x82 && !d && !e)
851 if ((c & 0x8f) == 0x82) {
872 if(!packet_length || packet_length >= (1
U<<29)){
876 if(padsize >= packet_length){
892 if (rsize > packet_length - padsize) {
895 "invalid packet header length %d for pktlen %d-%d at %"PRId64
"\n",
896 rsize, packet_length, padsize,
avio_tell(pb));
900 if (packet_length < asf->hdr.min_pktsize)
924 av_dlog(asf,
"key:%d stream:%d seq:%d offset:%d replic_size:%d\n",
1094 av_dlog(asf,
"new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n",
1106 av_dlog(asf,
"READ PACKET s:%d os:%d o:%d,%d l:%d DATA:%p\n",
1123 if (ret < 0 || asf->packet_frag_offset + ret == 0)
1161 "ds_span (%d %d %d)\n", asf_st->
pkt.
size,
1169 while (offset < asf_st->pkt.
size) {
1171 int row = off / asf_st->
ds_span;
1172 int col = off % asf_st->
ds_span;
1176 memcpy(newdata + offset,
1320 if (gsize < 24 || s->pb->eof_reached) {
1329 int64_t itime, last_pos=-1;
1338 for (i=0;i<ict;i++){
1344 if(pos != last_pos){
1345 av_log(s,
AV_LOG_DEBUG,
"pktnum:%d, pktct:%d pts: %"PRId64
"\n", pktnum, pktct, index_pts);
1408 .priv_class = &asf_class,