44 uint32_t stream_bitrates[128];
46 char stream_languages[128][6];
98 #define ASF_MAX_STREAMS 127
99 #define FRAME_HEADER_SIZE 16
104 0xce, 0x75, 0xf8, 0x7b, 0x8d, 0x46, 0xd1, 0x11, 0x8d, 0x82, 0x00, 0x60, 0x97, 0xc9, 0xa2, 0xb2
107 #define PRINT_IF_GUID(g,cmp) \
108 if (!ff_guidcmp(g, &cmp)) \
109 av_dlog(NULL, "(GUID: %s) ", #cmp)
136 else PRINT_IF_GUID(g, stream_bitrate_guid);
146 #define print_guid(g)
164 default:
return INT_MIN;
179 int ret, type, picsize, desc_len;
182 if (len < 1 + 4 + 2 + 2) {
202 if (!strncmp(mime->
str, mimetype,
sizeof(mimetype))) {
214 if (picsize >= len) {
221 desc_len = (len - picsize) * 2 + 1;
268 if ((
unsigned)len >= (UINT_MAX - 1)/2)
277 }
else if (type == -1) {
280 }
else if (type > 1 && type <= 5) {
282 snprintf(value, len,
"%"PRIu64, num);
283 }
else if (type == 1 && !strcmp(key,
"WM/Picture")) {
329 int type_specific_size, sizeX;
332 int test_for_ext_stream_audio, is_dvr_ms_audio=0;
357 (10000000 / 1000) - start_time;
361 test_for_ext_stream_audio = 0;
372 test_for_ext_stream_audio = 1;
387 if (test_for_ext_stream_audio) {
406 if (is_dvr_ms_audio) {
419 if (size >= (pos2 + 8 - pos1 + 24)) {
433 size - (
avio_tell(pb) - pos1 + 24) >= 51) {
469 if(tag1 ==
MKTAG(
'D',
'V',
'R',
' ')){
481 avio_skip(pb, size - (pos2 - pos1 + 24));
491 int ext_len, payload_ext_ct, stream_ct, i;
492 uint32_t leak_rate, stream_num;
493 unsigned int stream_languageid_index;
508 if (stream_num < 128)
515 if (stream_num < 128) {
520 for (i=0; i<stream_ct; i++){
526 for (i=0; i<payload_ext_ct; i++){
547 int len1, len2, len3, len4, len5;
555 get_tag(s,
"author" , 0, len2);
556 get_tag(s,
"copyright", 0, len3);
557 get_tag(s,
"comment" , 0, len4);
567 int desc_count, i, ret;
570 for(i=0;i<desc_count;i++) {
571 int name_len,value_type,value_len;
581 if (!value_type && value_len%2)
587 if (!strcmp(name,
"AspectRatioX")){
589 }
else if(!strcmp(name,
"AspectRatioY")){
592 get_tag(s, name, value_type, value_len);
604 for(j = 0; j < stream_count; j++) {
606 unsigned int lang_len =
avio_r8(pb);
620 int n, stream_num, name_len, value_len, value_num;
636 av_dlog(s,
"%d %d %d %d %d <%s>\n",
637 i, stream_num, name_len, value_type, value_len, name);
642 if (!strcmp(name,
"AspectRatioX")) asf->
dar[stream_num].
num= value_num;
643 else if(!strcmp(name,
"AspectRatioY")) asf->
dar[stream_num].
den= value_num;
653 int i, count, name_len, ret;
661 for(i=0;i<name_len;i++){
665 for(i=0;i<count;i++){
675 if ((ret =
avio_get_str16le(pb, name_len * 2, name,
sizeof(name))) < name_len)
707 if (!(asf->
hdr.
flags & 0x01) && gsize >= 100) {
754 get_tag(s,
"ASF_Protection_Type", -1, len);
756 get_tag(s,
"ASF_Key_ID", -1, len);
758 get_tag(s,
"ASF_License_URL", -1, len);
781 for(i=0; i<128; i++){
796 av_dlog(s,
"i=%d, st->codec->codec_type:%d, asf->dar %d:%d sar=%d:%d\n",
803 if (rfc1766 && strlen(rfc1766) > 1) {
804 const char primary_tag[3] = { rfc1766[0], rfc1766[1],
'\0' };
818 #define DO_2BITS(bits, var, defval) \
821 case 3: var = avio_rl32(pb); rsize += 4; break; \
822 case 2: var = avio_rl16(pb); rsize += 2; break; \
823 case 1: var = avio_r8(pb); rsize++; break; \
824 default: var = defval; break; \
836 uint32_t packet_length, padsize;
851 if(c == 0x82 && !d && !e)
867 if ((c & 0x8f) == 0x82) {
888 if(!packet_length || packet_length >= (1
U<<29)){
892 if(padsize >= packet_length){
908 if (rsize > packet_length - padsize) {
911 "invalid packet header length %d for pktlen %d-%d at %"PRId64
"\n",
912 rsize, packet_length, padsize,
avio_tell(pb));
916 if (packet_length < asf->hdr.min_pktsize)
938 asfst = &asf->
streams[num & 0x7f];
943 av_dlog(asf,
"key:%d stream:%d seq:%d offset:%d replic_size:%d\n",
1145 av_dlog(asf,
"new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n",
1157 av_dlog(asf,
"READ PACKET s:%d os:%d o:%d,%d l:%d DATA:%p\n",
1174 if (ret < 0 || asf->packet_frag_offset + ret == 0)
1212 "ds_span (%d %d %d)\n", asf_st->
pkt.
size,
1220 while (offset < asf_st->pkt.
size) {
1222 int row = off / asf_st->
ds_span;
1223 int col = off % asf_st->
ds_span;
1227 memcpy(newdata + offset,
1385 int64_t itime, last_pos=-1;
1395 for (i=0;i<ict;i++){
1401 if(pos != last_pos){
1402 av_log(s,
AV_LOG_DEBUG,
"pktnum:%d, pktct:%d pts: %"PRId64
"\n", pktnum, pktct, index_pts);
1464 .priv_class = &asf_class,