|
|
|
@ -498,10 +498,27 @@ static int init_input(AVFormatContext *s, const char *filename, AVDictionary **o |
|
|
|
|
return av_probe_input_buffer(s->pb, &s->iformat, filename, s, 0, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static AVPacket *add_to_pktbuf(AVPacketList **packet_buffer, AVPacket *pkt, |
|
|
|
|
AVPacketList **plast_pktl){ |
|
|
|
|
AVPacketList *pktl = av_mallocz(sizeof(AVPacketList)); |
|
|
|
|
if (!pktl) |
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
|
if (*packet_buffer) |
|
|
|
|
(*plast_pktl)->next = pktl; |
|
|
|
|
else |
|
|
|
|
*packet_buffer = pktl; |
|
|
|
|
|
|
|
|
|
/* add the packet in the buffered packet list */ |
|
|
|
|
*plast_pktl = pktl; |
|
|
|
|
pktl->pkt= *pkt; |
|
|
|
|
return &pktl->pkt; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options) |
|
|
|
|
{ |
|
|
|
|
AVFormatContext *s = *ps; |
|
|
|
|
int ret = 0; |
|
|
|
|
int i, ret = 0; |
|
|
|
|
AVDictionary *tmp = NULL; |
|
|
|
|
|
|
|
|
|
if (!s && !(s = avformat_alloc_context())) |
|
|
|
@ -551,6 +568,14 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputForma |
|
|
|
|
if ((ret = s->iformat->read_header(s)) < 0) |
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
|
|
/* queue attached pictures */ |
|
|
|
|
for (i = 0; i < s->nb_streams; i++) |
|
|
|
|
if (s->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) { |
|
|
|
|
AVPacket copy = s->streams[i]->attached_pic; |
|
|
|
|
copy.destruct = NULL; |
|
|
|
|
add_to_pktbuf(&s->raw_packet_buffer, ©, &s->raw_packet_buffer_end); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (s->pb && !s->data_offset) |
|
|
|
|
s->data_offset = avio_tell(s->pb); |
|
|
|
|
|
|
|
|
@ -574,23 +599,6 @@ fail: |
|
|
|
|
|
|
|
|
|
/*******************************************************/ |
|
|
|
|
|
|
|
|
|
static AVPacket *add_to_pktbuf(AVPacketList **packet_buffer, AVPacket *pkt, |
|
|
|
|
AVPacketList **plast_pktl){ |
|
|
|
|
AVPacketList *pktl = av_mallocz(sizeof(AVPacketList)); |
|
|
|
|
if (!pktl) |
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
|
if (*packet_buffer) |
|
|
|
|
(*plast_pktl)->next = pktl; |
|
|
|
|
else |
|
|
|
|
*packet_buffer = pktl; |
|
|
|
|
|
|
|
|
|
/* add the packet in the buffered packet list */ |
|
|
|
|
*plast_pktl = pktl; |
|
|
|
|
pktl->pkt= *pkt; |
|
|
|
|
return &pktl->pkt; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int av_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
{ |
|
|
|
|
int ret, i; |
|
|
|
@ -2547,6 +2555,8 @@ void avformat_free_context(AVFormatContext *s) |
|
|
|
|
av_parser_close(st->parser); |
|
|
|
|
av_free_packet(&st->cur_pkt); |
|
|
|
|
} |
|
|
|
|
if (st->attached_pic.data) |
|
|
|
|
av_free_packet(&st->attached_pic); |
|
|
|
|
av_dict_free(&st->metadata); |
|
|
|
|
av_free(st->index_entries); |
|
|
|
|
av_free(st->codec->extradata); |
|
|
|
|