Lines Matching defs:asf

39 #include "asf.h"
76 int asfid2avid[128]; ///< conversion table from asf ID 2 AVStream ID
127 .class_name = "asf demuxer",
224 ASFContext *asf = s->priv_data;
231 if (!asf->export_xmp && !strncmp(key, "xmp", 3))
276 ASFContext *asf = s->priv_data;
279 ff_get_guid(pb, &asf->hdr.guid);
280 asf->hdr.file_size = avio_rl64(pb);
281 asf->hdr.create_time = avio_rl64(pb);
283 asf->hdr.play_time = avio_rl64(pb);
284 asf->hdr.send_time = avio_rl64(pb);
285 asf->hdr.preroll = avio_rl32(pb);
286 asf->hdr.ignore = avio_rl32(pb);
287 asf->hdr.flags = avio_rl32(pb);
288 asf->hdr.min_pktsize = avio_rl32(pb);
289 asf->hdr.max_pktsize = avio_rl32(pb);
290 if (asf->hdr.min_pktsize >= (1U << 29))
292 asf->hdr.max_bitrate = avio_rl32(pb);
293 s->packet_size = asf->hdr.max_pktsize;
300 ASFContext *asf = s->priv_data;
324 start_time = asf->hdr.preroll;
326 if (!(asf->hdr.flags & 0x01)) { // if we aren't streaming...
328 if (fsize <= 0 || (int64_t)asf->hdr.file_size <= 0 ||
329 FFABS(fsize - (int64_t)asf->hdr.file_size) < FFMIN(fsize, asf->hdr.file_size)/20)
330 st->duration = asf->hdr.play_time /
356 // mapping of asf ID to AV stream ID;
357 asf->asfid2avid[st->id] = s->nb_streams - 1;
358 asf_st = &asf->streams[st->id];
415 /* not available for asf */
471 ASFContext *asf = s->priv_data;
492 asf->streams[stream_num].stream_language_index = stream_languageid_index;
499 asf->stream_bitrates[stream_num] = leak_rate;
500 asf->streams[stream_num].payload_ext_ct = 0;
517 if (stream_num < 128 && i < FF_ARRAY_ELEMS(asf->streams[stream_num].payload)) {
518 ASFPayload *p = &asf->streams[stream_num].payload[i];
522 asf->streams[stream_num].payload_ext_ct ++;
551 ASFContext *asf = s->priv_data;
572 asf->dar[0].num = get_value(s->pb, value_type, 32);
574 asf->dar[0].den = get_value(s->pb, value_type, 32);
585 ASFContext *asf = s->priv_data;
595 av_strlcpy(asf->stream_languages[j], lang,
596 sizeof(*asf->stream_languages));
605 ASFContext *asf = s->priv_data;
636 asf->dar[stream_num].num = aspect_x;
640 asf->dar[stream_num].den = aspect_y;
653 ASFContext *asf = s->priv_data;
673 pres_time = av_sat_sub64(pres_time, asf->hdr.preroll * 10000LL);
692 ASFContext *asf = s->priv_data;
705 memset(&asf->asfid2avid, -1, sizeof(asf->asfid2avid));
708 asf->streams[i].stream_language_index = 128; // invalid stream index means no language info
717 asf->data_object_offset = avio_tell(pb);
720 if (!(asf->hdr.flags & 0x01) && gsize >= 100)
721 asf->data_object_size = gsize - 24;
723 asf->data_object_size = (uint64_t)-1;
809 asf->data_offset = avio_tell(pb);
810 asf->packet_size_left = 0;
813 int stream_num = asf->asfid2avid[i];
817 st->codecpar->bit_rate = asf->stream_bitrates[i];
818 if (asf->dar[i].num > 0 && asf->dar[i].den > 0) {
821 asf->dar[i].num, asf->dar[i].den, INT_MAX);
822 } else if ((asf->dar[0].num > 0) && (asf->dar[0].den > 0) &&
827 asf->dar[0].num, asf->dar[0].den, INT_MAX);
829 av_log(s, AV_LOG_TRACE, "i=%d, st->codecpar->codec_type:%d, asf->dar %d:%d sar=%d:%d\n",
830 i, st->codecpar->codec_type, asf->dar[i].num, asf->dar[i].den,
834 if (asf->streams[i].stream_language_index < 128) {
835 const char *rfc1766 = asf->stream_languages[asf->streams[i].stream_language_index];
879 ASFContext *asf = s->priv_data;
884 if (asf->uses_std_ecc > 0) {
887 if (asf->no_resync_search)
889 // else if (s->packet_size > 0 && !asf->uses_std_ecc)
910 "ff asf bad header %x at:%"PRId64"\n", c, avio_tell(pb));
915 av_log(s, AV_LOG_ERROR, "ff asf bad non zero\n");
938 if (!asf->uses_std_ecc)
939 asf->uses_std_ecc = (c == 0x82 && !d && !e) ? 1 : -1;
943 asf->uses_std_ecc = -1;
947 asf->packet_flags = c;
948 asf->packet_property = d;
950 DO_2BITS(asf->packet_flags >> 5, packet_length, s->packet_size);
951 DO_2BITS(asf->packet_flags >> 1, padsize, 0); // sequence ignored
952 DO_2BITS(asf->packet_flags >> 3, padsize, 0); // padding length
967 asf->packet_timestamp = avio_rl32(pb);
971 if (asf->packet_flags & 0x01) {
972 asf->packet_segsizetype = avio_r8(pb);
974 asf->packet_segments = asf->packet_segsizetype & 0x3f;
976 asf->packet_segments = 1;
977 asf->packet_segsizetype = 0x80;
980 asf->packet_size_left = 0;
986 asf->packet_size_left = packet_length - padsize - rsize;
987 if (packet_length < asf->hdr.min_pktsize)
988 padsize += asf->hdr.min_pktsize - packet_length;
989 asf->packet_padsize = padsize;
991 s->packet_size, asf->packet_padsize, asf->packet_size_left);
1001 ASFContext *asf = s->priv_data;
1008 asf->packet_segments--;
1009 asf->packet_key_frame = num >> 7;
1010 asf->stream_index = asf->asfid2avid[num & 0x7f];
1011 asfst = &asf->streams[num & 0x7f];
1013 DO_2BITS(asf->packet_property >> 4, asf->packet_seq, 0);
1014 DO_2BITS(asf->packet_property >> 2, asf->packet_frag_offset, 0);
1015 DO_2BITS(asf->packet_property, asf->packet_replic_size, 0);
1016 av_log(asf, AV_LOG_TRACE, "key:%d stream:%d seq:%d offset:%d replic_size:%d num:%X packet_property %X\n",
1017 asf->packet_key_frame, asf->stream_index, asf->packet_seq,
1018 asf->packet_frag_offset, asf->packet_replic_size, num, asf->packet_property);
1019 if (rsize+(int64_t)asf->packet_replic_size > asf->packet_size_left) {
1020 av_log(s, AV_LOG_ERROR, "packet_replic_size %d is invalid\n", asf->packet_replic_size);
1023 if (asf->packet_replic_size >= 8) {
1024 int64_t end = avio_tell(pb) + asf->packet_replic_size;
1032 asf->packet_frag_timestamp = avio_rl32(pb); // timestamp
1052 if (aspect.num > 0 && aspect.den > 0 && asf->stream_index >= 0) {
1053 s->streams[asf->stream_index]->sample_aspect_ratio = aspect;
1060 if (ts0!= -1) asf->packet_frag_timestamp = ts0/10000;
1061 else asf->packet_frag_timestamp = AV_NOPTS_VALUE;
1062 asf->ts_is_pts = 1;
1076 rsize += asf->packet_replic_size; // FIXME - check validity
1077 } else if (asf->packet_replic_size == 1) {
1079 asf->packet_time_start = asf->packet_frag_offset;
1080 asf->packet_frag_offset = 0;
1081 asf->packet_frag_timestamp = asf->packet_timestamp;
1083 asf->packet_time_delta = avio_r8(pb);
1085 } else if (asf->packet_replic_size != 0) {
1087 asf->packet_replic_size);
1090 if (asf->packet_flags & 0x01) {
1091 DO_2BITS(asf->packet_segsizetype >> 6, asf->packet_frag_size, 0); // 0 is illegal
1092 if (rsize > asf->packet_size_left) {
1095 } else if (asf->packet_frag_size > asf->packet_size_left - rsize) {
1096 if (asf->packet_frag_size > asf->packet_size_left - rsize + asf->packet_padsize) {
1098 asf->packet_frag_size, asf->packet_size_left, rsize, asf->packet_padsize);
1101 int diff = asf->packet_frag_size - (asf->packet_size_left - rsize);
1102 asf->packet_size_left += diff;
1103 asf->packet_padsize -= diff;
1107 asf->packet_frag_size = asf->packet_size_left - rsize;
1109 if (asf->packet_replic_size == 1) {
1110 asf->packet_multi_size = asf->packet_frag_size;
1111 if (asf->packet_multi_size > asf->packet_size_left)
1114 asf->packet_size_left -= rsize;
1130 ASFContext *asf = s->priv_data;
1136 if (asf->packet_size_left < FRAME_HEADER_SIZE ||
1137 asf->packet_segments < 1 && asf->packet_time_start == 0) {
1138 int ret = asf->packet_size_left + asf->packet_padsize;
1140 if (asf->packet_size_left && asf->packet_size_left < FRAME_HEADER_SIZE)
1147 asf->packet_pos = avio_tell(pb);
1148 if (asf->data_object_size != (uint64_t)-1 &&
1149 (asf->packet_pos - asf->data_object_offset >= asf->data_object_size))
1153 if (asf->packet_time_start == 0) {
1155 asf->packet_time_start = asf->packet_segments = 0;
1158 if (asf->stream_index < 0 ||
1159 s->streams[asf->stream_index]->discard >= AVDISCARD_ALL ||
1160 (!asf->packet_key_frame &&
1161 (s->streams[asf->stream_index]->discard >= AVDISCARD_NONKEY || asf->streams[s->streams[asf->stream_index]->id].skip_to_key))) {
1162 asf->packet_time_start = 0;
1164 avio_skip(pb, asf->packet_frag_size);
1165 asf->packet_size_left -= asf->packet_frag_size;
1166 if (asf->stream_index < 0)
1167 av_log(s, AV_LOG_ERROR, "ff asf skip %d (unknown stream)\n",
1168 asf->packet_frag_size);
1171 asf->asf_st = &asf->streams[s->streams[asf->stream_index]->id];
1172 if (!asf->packet_frag_offset)
1173 asf->asf_st->skip_to_key = 0;
1175 asf_st = asf->asf_st;
1178 if (!asf_st->frag_offset && asf->packet_frag_offset) {
1179 av_log(s, AV_LOG_TRACE, "skipping asf data pkt with fragment offset for "
1181 asf->stream_index, asf_st->frag_offset,
1182 asf->packet_frag_offset);
1183 avio_skip(pb, asf->packet_frag_size);
1184 asf->packet_size_left -= asf->packet_frag_size;
1188 if (asf->packet_replic_size == 1) {
1190 asf->packet_frag_timestamp = asf->packet_time_start;
1191 asf->packet_time_start += asf->packet_time_delta;
1192 asf_st->packet_obj_size = asf->packet_frag_size = avio_r8(pb);
1193 asf->packet_size_left--;
1194 asf->packet_multi_size--;
1195 if (asf->packet_multi_size < asf_st->packet_obj_size) {
1196 asf->packet_time_start = 0;
1197 avio_skip(pb, asf->packet_multi_size);
1198 asf->packet_size_left -= asf->packet_multi_size;
1201 asf->packet_multi_size -= asf_st->packet_obj_size;
1206 asf_st->frag_offset + asf->packet_frag_size > asf_st->pkt.size) {
1219 asf_st->seq = asf->packet_seq;
1220 if (asf->packet_frag_timestamp != AV_NOPTS_VALUE) {
1221 if (asf->ts_is_pts) {
1222 asf_st->pkt.pts = asf->packet_frag_timestamp - asf->hdr.preroll;
1224 asf_st->pkt.dts = asf->packet_frag_timestamp - asf->hdr.preroll;
1226 asf_st->pkt.stream_index = asf->stream_index;
1227 asf_st->pkt.pos = asf_st->packet_pos = asf->packet_pos;
1241 av_log(asf, AV_LOG_TRACE, "new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n",
1242 asf->stream_index, asf->packet_key_frame,
1244 s->streams[asf->stream_index]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO,
1246 if (s->streams[asf->stream_index]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)
1247 asf->packet_key_frame = 1;
1248 if (asf->packet_key_frame)
1253 av_log(asf, AV_LOG_TRACE, "READ PACKET s:%d os:%d o:%d,%d l:%d DATA:%p\n",
1254 s->packet_size, asf_st->pkt.size, asf->packet_frag_offset,
1255 asf_st->frag_offset, asf->packet_frag_size, asf_st->pkt.data);
1256 asf->packet_size_left -= asf->packet_frag_size;
1257 if (asf->packet_size_left < 0)
1260 if (asf->packet_frag_offset >= asf_st->pkt.size ||
1261 asf->packet_frag_size > asf_st->pkt.size - asf->packet_frag_offset) {
1264 asf->packet_frag_offset, asf->packet_frag_size,
1269 if (asf->packet_frag_offset != asf_st->frag_offset && !asf_st->pkt_clean) {
1274 ret = avio_read(pb, asf_st->pkt.data + asf->packet_frag_offset,
1275 asf->packet_frag_size);
1276 if (ret != asf->packet_frag_size) {
1277 if (ret < 0 || asf->packet_frag_offset + ret == 0)
1284 memset(asf_st->pkt.data + asf->packet_frag_offset + ret, 0,
1285 asf->packet_frag_size - ret);
1286 ret = asf->packet_frag_size;
1289 av_shrink_packet(&asf_st->pkt, asf->packet_frag_offset + ret);
1293 ff_asfcrypt_dec(s->key, asf_st->pkt.data + asf->packet_frag_offset,
1299 if (s->streams[asf->stream_index]->codecpar->codec_id == AV_CODEC_ID_MPEG2VIDEO &&
1361 ASFContext *asf = s->priv_data;
1370 assert(asf->packet_size_left < FRAME_HEADER_SIZE ||
1371 asf->packet_segments < 1);
1372 asf->packet_time_start = 0;
1381 ASFContext *asf = s->priv_data;
1385 asf->packet_size_left = 0;
1386 asf->packet_flags = 0;
1387 asf->packet_property = 0;
1388 asf->packet_timestamp = 0;
1389 asf->packet_segsizetype = 0;
1390 asf->packet_segments = 0;
1391 asf->packet_seq = 0;
1392 asf->packet_replic_size = 0;
1393 asf->packet_key_frame = 0;
1394 asf->packet_padsize = 0;
1395 asf->packet_frag_offset = 0;
1396 asf->packet_frag_size = 0;
1397 asf->packet_frag_timestamp = 0;
1398 asf->packet_multi_size = 0;
1399 asf->packet_time_delta = 0;
1400 asf->packet_time_start = 0;
1403 asf_st = &asf->streams[i];
1409 asf->asf_st = NULL;
1414 ASFContext *asf = s->priv_data;
1418 int j = asf->asfid2avid[i];
1419 ASFStream *asf_st = &asf->streams[i];
1438 ASFContext *asf = s->priv_data;
1470 asf_st = &asf->streams[s->streams[i]->id];
1495 ASFContext *asf = s->priv_data;
1499 if((ret = avio_seek(s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET)) < 0) {
1535 int64_t index_pts = FFMAX(av_rescale(itime, i, 10000) - asf->hdr.preroll, 0);
1550 asf->index_read = ict > 1;
1563 ASFContext *asf = s->priv_data;
1587 if (!asf->index_read) {
1590 asf->index_read = -1;
1593 if (asf->index_read > 0 && sti->index_entries) {
1617 .name = "asf",