* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avformat.h"
-#include "avi.h"
+#include "riff.h"
#include "mpegaudio.h"
#include "asf.h"
printf(" 0x%02x,", g->v4[i]);
printf("}\n");
}
-#undef PRINT_IF_GUID(g,cmp)
+#undef PRINT_IF_GUID
#endif
static void get_guid(ByteIOContext *s, GUID *g)
pos2 = url_ftell(pb);
url_fskip(pb, gsize - (pos2 - pos1 + 24));
} else if (!memcmp(&g, &data_header, sizeof(GUID))) {
+ asf->data_object_offset = url_ftell(pb);
+ if (gsize != (uint64_t)-1 && gsize >= 24) {
+ asf->data_object_size = gsize - 24;
+ } else {
+ asf->data_object_size = (uint64_t)-1;
+ }
break;
} else if (!memcmp(&g, &comment_header, sizeof(GUID))) {
int len1, len2, len3, len4, len5;
} else if (!memcmp(&g, &ext_stream_header, sizeof(GUID))) {
int ext_len, payload_ext_ct, stream_ct;
uint32_t ext_d;
- int64_t pos_ex_st, pos_curr;
+ int64_t pos_ex_st;
pos_ex_st = url_ftell(pb);
get_le64(pb);
/* fail safe */
url_fskip(pb, ret);
asf->packet_pos= url_ftell(&s->pb);
+ if (asf->data_object_size != (uint64_t)-1 &&
+ (asf->packet_pos - asf->data_object_offset >= asf->data_object_size))
+ return AVERROR_IO; /* Do not exceed the size of the data object */
ret = asf_get_packet(s);
//printf("READ ASF PACKET %d r:%d c:%d\n", ret, asf->packet_size_left, pc++);
if (ret < 0 || url_feof(pb))
for(i=0;i<s->nb_streams;i++) {
AVStream *st = s->streams[i];
av_free(st->priv_data);
- av_free(st->codec->extradata);
av_free(st->codec->palctrl);
}
return 0;
return AV_NOPTS_VALUE;
}
- pts= pkt->pts * 1000 / AV_TIME_BASE;
+ pts= pkt->pts;
av_free_packet(pkt);
if(pkt->flags&PKT_FLAG_KEY){
assert((asf_st->packet_pos - s->data_offset) % asf->packet_size == 0);
pos= asf_st->packet_pos;
- av_add_index_entry(s->streams[i], pos, pts, pos - start_pos[i] + 1, AVINDEX_KEYFRAME);
+ av_add_index_entry(s->streams[i], pos, pkt->size, pts, pos - start_pos[i] + 1, AVINDEX_KEYFRAME);
start_pos[i]= asf_st->packet_pos + 1;
if(pkt->stream_index == stream_index)
return 0;
}
-static AVInputFormat asf_iformat = {
+AVInputFormat asf_demuxer = {
"asf",
"asf format",
sizeof(ASFContext),
asf_read_seek,
asf_read_pts,
};
-
-#ifdef CONFIG_MUXERS
- extern AVOutputFormat asf_oformat;
- extern AVOutputFormat asf_stream_oformat;
-#endif //CONFIG_MUXERS
-
-int asf_init(void)
-{
- av_register_input_format(&asf_iformat);
-#ifdef CONFIG_MUXERS
- av_register_output_format(&asf_oformat);
- av_register_output_format(&asf_stream_oformat);
-#endif //CONFIG_MUXERS
- return 0;
-}