Lines Matching defs:asf

34 #include "asf.h"
172 ASFContext *asf = s->priv_data;
177 if (size > INT64_MAX || asf->in_asf_read_unknown > 5)
180 if (asf->is_header)
181 asf->unknown_size = size;
182 asf->is_header = 0;
186 asf->in_asf_read_unknown ++;
187 ret = detect_unknown_subobject(s, asf->unknown_offset,
188 asf->unknown_size);
189 asf->in_asf_read_unknown --;
222 ASFContext *asf = s->priv_data;
242 pts -= asf->preroll * 10000;
257 align_position(pb, asf->offset, size);
389 ASFContext *asf = s->priv_data;
420 align_position(pb, asf->offset, size);
427 ASFContext *asf = s->priv_data;
430 for (i = 0; i < asf->nb_streams; i++) {
431 if (asf->asf_st[i]->stream_index == st_num) {
432 st = s->streams[asf->asf_st[i]->index];
442 ASFContext *asf = s->priv_data;
453 asf->asf_sd[st_num].aspect_ratio.num = value;
455 asf->asf_sd[st_num].aspect_ratio.den = value;
462 ASFContext *asf = s->priv_data;
494 st_num ? &asf->asf_sd[st_num].asf_met
504 align_position(pb, asf->offset, size);
510 ASFContext *asf = s->priv_data;
532 align_position(pb, asf->offset, size);
539 ASFContext *asf = s->priv_data;
547 if (!(asf->b_flags & ASF_FLAG_BROADCAST)) {
567 asf->nb_packets = avio_rl64(pb);
568 asf->duration = avio_rl64(pb) / 10000; // stream duration
570 asf->preroll = avio_rl64(pb);
571 asf->duration -= asf->preroll;
572 asf->b_flags = avio_rl32(pb);
574 asf->packet_size = avio_rl32(pb);
606 ASFContext *asf = s->priv_data;
619 if (asf->nb_streams >= ASF_MAX_STREAMS)
645 for (i = 0; i < asf->nb_streams; i++)
646 if (stream_index == asf->asf_st[i]->stream_index) {
649 align_position(pb, asf->offset, size);
658 asf->asf_st[asf->nb_streams] = av_mallocz(sizeof(*asf_st));
659 if (!asf->asf_st[asf->nb_streams])
661 asf_st = asf->asf_st[asf->nb_streams];
662 asf->nb_streams++;
705 align_position(pb, asf->offset, size);
725 ASFContext *asf = s->priv_data;
744 for (i = 0; i < asf->nb_streams; i++) {
745 if (st_num == asf->asf_st[i]->stream_index) {
746 st = s->streams[asf->asf_st[i]->index];
747 asf->asf_st[i]->lang_idx = lang_idx;
778 align_position(pb, asf->offset, size);
789 align_position(pb, asf->offset, size);
795 ASFContext *asf = s->priv_data;
807 if ((ret = get_asf_string(pb, len, asf->asf_sd[i].langs,
808 sizeof(asf->asf_sd[i].langs))) < 0) {
814 align_position(pb, asf->offset, size);
821 ASFContext *asf = s->priv_data;
823 uint64_t size = asf->data_size = avio_rl64(pb);
826 if (!asf->data_reached) {
827 asf->data_reached = 1;
828 asf->data_offset = asf->offset;
831 for (i = 0; i < asf->nb_streams; i++) {
832 if (!(asf->b_flags & ASF_FLAG_BROADCAST))
833 s->streams[i]->duration = asf->duration;
835 asf->nb_mult_left = 0;
836 asf->sub_left = 0;
837 asf->state = PARSE_PACKET_HEADER;
838 asf->return_subpayload = 0;
839 asf->packet_size_internal = 0;
842 if (size != asf->nb_packets)
846 size, asf->nb_packets);
848 asf->first_packet_offset = avio_tell(pb);
849 if ((pb->seekable & AVIO_SEEKABLE_NORMAL) && !(asf->b_flags & ASF_FLAG_BROADCAST))
850 align_position(pb, asf->offset, asf->data_size);
857 ASFContext *asf = s->priv_data;
869 for (i = 0; i < asf->nb_streams; i++) {
870 if ((asf->asf_st[i]->type == AVMEDIA_TYPE_VIDEO) && !asf->asf_st[i]->indexed) {
871 asf->asf_st[i]->indexed = 1;
872 st = s->streams[asf->asf_st[i]->index];
892 av_add_index_entry(st, asf->first_packet_offset + asf->packet_size *
894 asf->packet_size, 0, AVINDEX_KEYFRAME);
898 asf->is_simple_index = 1;
899 align_position(pb, asf->offset, size);
968 ASFContext *asf = s->priv_data;
974 asf->dts_delta = avio_r8(pb);
975 if (asf->nb_mult_left) {
976 asf->mult_sub_len = avio_rl16(pb); // total
978 asf->sub_header_offset = avio_tell(pb);
979 asf->nb_sub = 0;
980 asf->sub_left = 1;
985 for (i = 0; i < asf->nb_streams; i++) {
986 if (asf->stream_index == asf->asf_st[i]->stream_index) {
987 pkt->stream_index = asf->asf_st[i]->index;
991 asf->return_subpayload = 1;
993 asf->return_subpayload = 0;
996 asf->nb_sub++;
997 pkt->dts = asf->sub_dts + (asf->nb_sub - 1) * asf->dts_delta - asf->preroll;
998 if (asf->nb_mult_left && (avio_tell(pb) >=
999 (asf->sub_header_offset + asf->mult_sub_len))) {
1000 asf->sub_left = 0;
1001 asf->nb_mult_left--;
1003 if (avio_tell(pb) >= asf->packet_offset + asf->packet_size - asf->pad_len) {
1004 asf->sub_left = 0;
1005 if (!asf->nb_mult_left) {
1006 avio_skip(pb, asf->pad_len);
1007 if (avio_tell(pb) != asf->packet_offset + asf->packet_size) {
1008 if (!asf->packet_size)
1012 avio_tell(pb), asf->packet_offset + asf->packet_size);
1013 avio_seek(pb, asf->packet_offset + asf->packet_size, SEEK_SET);
1033 ASFContext *asf = s->priv_data;
1047 if (asf->rep_data_len >= 8)
1048 avio_skip(pb, asf->rep_data_len - 8); // skip replicated data
1056 ASFContext *asf = s->priv_data;
1064 if (asf->rep_data_len == 1) {
1065 asf->sub_left = 1;
1066 asf->state = READ_MULTI_SUB;
1071 if (asf->rep_data_len)
1075 if (pay_len > asf->packet_size) {
1078 "asf->packet_size %"PRIu32", offset %"PRId64".\n",
1079 pay_len, asf->packet_size, avio_tell(pb));
1098 asf->nb_mult_left--;
1106 ASFContext *asf = s->priv_data;
1123 if (asf->rep_data_len >= 8)
1124 avio_skip(pb, asf->rep_data_len - 8); // skip replicated data
1128 if (asf->packet_size_internal)
1129 size = asf->packet_size_internal - offset + asf->packet_offset - asf->pad_len;
1131 size = asf->packet_size - offset + asf->packet_offset - asf->pad_len;
1132 if (size > asf->packet_size) {
1149 if (asf->packet_size_internal)
1150 avio_skip(pb, asf->packet_size - asf->packet_size_internal);
1151 avio_skip(pb, asf->pad_len); // skip padding
1158 ASFContext *asf = s->priv_data;
1163 if (!asf->sub_left) {
1168 asf->stream_index = stream_num & ASF_STREAM_NUM;
1169 for (i = 0; i < asf->nb_streams; i++) {
1170 if (asf->stream_index == asf->asf_st[i]->stream_index) {
1171 asf_pkt = &asf->asf_st[i]->pkt;
1172 asf_pkt->stream_index = asf->asf_st[i]->index;
1177 if (asf->packet_offset + asf->packet_size <= asf->data_offset + asf->data_size) {
1178 if (!asf->packet_size) {
1182 avio_seek(pb, asf->packet_offset + asf->packet_size, SEEK_SET);
1184 asf->stream_index);
1192 READ_LEN(asf->prop_flags & ASF_PL_MASK_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_SIZE,
1194 READ_LEN(asf->prop_flags & ASF_PL_MASK_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_SIZE,
1196 READ_LEN(asf->prop_flags & ASF_PL_MASK_REPLICATED_DATA_LENGTH_FIELD_SIZE,
1197 ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_, asf->rep_data_len);
1203 asf->sub_dts = off_len;
1204 if (asf->nb_mult_left) {
1207 } else if (asf->rep_data_len == 1) {
1208 asf->sub_left = 1;
1209 asf->state = READ_SINGLE;
1218 for (i = 0; i <= asf->nb_streams; i++) {
1219 if (asf->stream_index == asf->asf_st[i]->stream_index) {
1220 asf_pkt = &asf->asf_st[i]->pkt;
1228 pkt->stream_index = asf->asf_st[i]->index;
1238 ASFContext *asf = s->priv_data;
1244 asf->packet_offset = avio_tell(pb);
1245 if (asf->packet_offset > INT64_MAX/2)
1246 asf->packet_offset = 0;
1256 asf->prop_flags = avio_r8(pb);
1258 ASF_PPI_FLAG_PACKET_LENGTH_FIELD_, asf->packet_size_internal);
1262 ASF_PPI_FLAG_PADDING_LENGTH_FIELD_, asf->pad_len );
1263 asf->send_time = avio_rl32(pb); // send time
1267 asf->nb_mult_left = (pay_flags & ASF_NUM_OF_PAYLOADS);
1275 ASFContext *asf = s->priv_data;
1276 ASFStream *asf_st = asf->asf_st[st_num];
1278 uint16_t pkt_len = asf->asf_st[st_num]->virtual_pkt_len;
1279 uint16_t chunk_len = asf->asf_st[st_num]->virtual_chunk_len;
1321 ASFContext *asf = s->priv_data;
1325 if ((avio_tell(pb) >= asf->data_offset + asf->data_size) &&
1326 !(asf->b_flags & ASF_FLAG_BROADCAST))
1329 if (asf->state == PARSE_PACKET_HEADER) {
1333 if (!asf->nb_mult_left)
1334 asf->state = READ_SINGLE;
1336 asf->state = READ_MULTI;
1340 asf->state = PARSE_PACKET_HEADER;
1346 switch (asf->state) {
1348 if (!asf->sub_left)
1349 asf->state = PARSE_PACKET_HEADER;
1352 if (!asf->sub_left && !asf->nb_mult_left) {
1353 asf->state = PARSE_PACKET_HEADER;
1354 if (!asf->return_subpayload &&
1355 (avio_tell(pb) <= asf->packet_offset +
1356 asf->packet_size - asf->pad_len))
1357 avio_skip(pb, asf->pad_len); // skip padding
1358 if (asf->packet_offset + asf->packet_size > avio_tell(pb))
1359 avio_seek(pb, asf->packet_offset + asf->packet_size, SEEK_SET);
1360 } else if (!asf->sub_left)
1361 asf->state = READ_MULTI;
1364 if (!asf->nb_mult_left) {
1365 asf->state = PARSE_PACKET_HEADER;
1366 if (!asf->return_subpayload &&
1367 (avio_tell(pb) <= asf->packet_offset +
1368 asf->packet_size - asf->pad_len))
1369 avio_skip(pb, asf->pad_len); // skip padding
1370 if (asf->packet_offset + asf->packet_size > avio_tell(pb))
1371 avio_seek(pb, asf->packet_offset + asf->packet_size, SEEK_SET);
1375 if (asf->return_subpayload) {
1376 asf->return_subpayload = 0;
1379 for (i = 0; i < asf->nb_streams; i++) {
1380 ASFPacket *asf_pkt = &asf->asf_st[i]->pkt;
1382 if (asf->asf_st[i]->span > 1 &&
1383 asf->asf_st[i]->type == AVMEDIA_TYPE_AUDIO)
1387 pkt->stream_index = asf->asf_st[i]->index;
1389 pkt->dts = asf_pkt->dts - asf->preroll;
1405 ASFContext *asf = s->priv_data;
1409 av_dict_free(&asf->asf_sd[i].asf_met);
1410 if (i < asf->nb_streams) {
1411 av_packet_free(&asf->asf_st[i]->pkt.avpkt);
1412 av_freep(&asf->asf_st[i]);
1416 asf->nb_streams = 0;
1422 ASFContext *asf = s->priv_data;
1425 asf->state = PARSE_PACKET_HEADER;
1426 asf->offset = 0;
1427 asf->return_subpayload = 0;
1428 asf->sub_left = 0;
1429 asf->sub_header_offset = 0;
1430 asf->packet_offset = asf->first_packet_offset;
1431 asf->pad_len = 0;
1432 asf->rep_data_len = 0;
1433 asf->dts_delta = 0;
1434 asf->mult_sub_len = 0;
1435 asf->nb_mult_left = 0;
1436 asf->nb_sub = 0;
1437 asf->prop_flags = 0;
1438 asf->sub_dts = 0;
1439 for (i = 0; i < asf->nb_streams; i++) {
1440 ASFPacket *pkt = &asf->asf_st[i]->pkt;
1459 ASFContext *asf = s->priv_data;
1467 data_end = asf->data_offset + asf->data_size;
1469 n = (pkt_pos - asf->first_packet_offset + asf->packet_size - 1) /
1470 asf->packet_size;
1471 n = av_clip(n, 0, ((data_end - asf->first_packet_offset) / asf->packet_size - 1));
1472 pkt_pos = asf->first_packet_offset + n * asf->packet_size;
1490 if ((pkt_offset >= (pkt_pos + asf->packet_size)))
1491 pkt_pos += asf->packet_size;
1492 for (i = 0; i < asf->nb_streams; i++) {
1493 ASFStream *st = asf->asf_st[i];
1521 ASFContext *asf = s->priv_data;
1526 if (sti->nb_index_entries && asf->is_simple_index) {
1559 ASFContext *asf = s->priv_data;
1569 if (avio_tell(pb) == asf->offset)
1571 asf->offset = avio_tell(pb);
1592 ASFContext *asf = s->priv_data;
1599 asf->preroll = 0;
1600 asf->is_simple_index = 0;
1606 asf->data_reached = 0;
1614 if (avio_tell(pb) == asf->offset)
1616 asf->offset = avio_tell(pb);
1618 if (ret == AVERROR_EOF && asf->data_reached)
1625 asf->unknown_offset = asf->offset;
1626 asf->is_header = 1;
1631 align_position(pb, asf->offset, size);
1633 if (asf->data_reached &&
1635 (asf->b_flags & ASF_FLAG_BROADCAST)))
1639 if (!asf->data_reached) {
1645 avio_seek(pb, asf->first_packet_offset, SEEK_SET);
1647 for (i = 0; i < asf->nb_streams; i++) {
1648 const char *rfc1766 = asf->asf_sd[asf->asf_st[i]->lang_idx].langs;
1649 AVStream *st = s->streams[asf->asf_st[i]->index];
1658 av_dict_copy(&st->metadata, asf->asf_sd[i].asf_met, AV_DICT_IGNORE_SUFFIX);
1659 if (asf->asf_sd[i].aspect_ratio.num > 0 && asf->asf_sd[i].aspect_ratio.den > 0) {
1660 st->sample_aspect_ratio.num = asf->asf_sd[i].aspect_ratio.num;
1661 st->sample_aspect_ratio.den = asf->asf_sd[i].aspect_ratio.den;