mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-19 09:02:26 +02:00
move code which adds a AVPacket into the packet buffer into its own function
Originally committed as revision 9871 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
392b748293
commit
02b15cc811
@ -813,6 +813,22 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static AVPacket *add_to_pktbuf(AVFormatContext *s, AVPacket *pkt){
|
||||||
|
AVPacketList *pktl= s->packet_buffer;
|
||||||
|
AVPacketList **plast_pktl= &s->packet_buffer;
|
||||||
|
|
||||||
|
while(*plast_pktl) plast_pktl= &(*plast_pktl)->next; //FIXME maybe maintain pointer to the last?
|
||||||
|
|
||||||
|
pktl = av_mallocz(sizeof(AVPacketList));
|
||||||
|
if (!pktl)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* add the packet in the buffered packet list */
|
||||||
|
*plast_pktl = pktl;
|
||||||
|
pktl->pkt= *pkt;
|
||||||
|
return &pktl->pkt;
|
||||||
|
}
|
||||||
|
|
||||||
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
|
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
|
||||||
{
|
{
|
||||||
AVPacketList *pktl;
|
AVPacketList *pktl;
|
||||||
@ -848,7 +864,6 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(genpts){
|
if(genpts){
|
||||||
AVPacketList **plast_pktl= &s->packet_buffer;
|
|
||||||
int ret= av_read_frame_internal(s, pkt);
|
int ret= av_read_frame_internal(s, pkt);
|
||||||
if(ret<0){
|
if(ret<0){
|
||||||
if(pktl && ret != AVERROR(EAGAIN)){
|
if(pktl && ret != AVERROR(EAGAIN)){
|
||||||
@ -858,19 +873,8 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* duplicate the packet */
|
if(av_dup_packet(add_to_pktbuf(s, pkt)) < 0)
|
||||||
if (av_dup_packet(pkt) < 0)
|
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
while(*plast_pktl) plast_pktl= &(*plast_pktl)->next; //FIXME maybe maintain pointer to the last?
|
|
||||||
|
|
||||||
pktl = av_mallocz(sizeof(AVPacketList));
|
|
||||||
if (!pktl)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
|
|
||||||
/* add the packet in the buffered packet list */
|
|
||||||
*plast_pktl = pktl;
|
|
||||||
pktl->pkt= *pkt;
|
|
||||||
}else{
|
}else{
|
||||||
assert(!s->packet_buffer);
|
assert(!s->packet_buffer);
|
||||||
return av_read_frame_internal(s, pkt);
|
return av_read_frame_internal(s, pkt);
|
||||||
@ -1712,7 +1716,6 @@ int av_find_stream_info(AVFormatContext *ic)
|
|||||||
int i, count, ret, read_size, j;
|
int i, count, ret, read_size, j;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
AVPacket pkt1, *pkt;
|
AVPacket pkt1, *pkt;
|
||||||
AVPacketList *pktl=NULL, **ppktl;
|
|
||||||
int64_t last_dts[MAX_STREAMS];
|
int64_t last_dts[MAX_STREAMS];
|
||||||
int duration_count[MAX_STREAMS]={0};
|
int duration_count[MAX_STREAMS]={0};
|
||||||
double (*duration_error)[MAX_STD_TIMEBASES];
|
double (*duration_error)[MAX_STD_TIMEBASES];
|
||||||
@ -1749,7 +1752,6 @@ int av_find_stream_info(AVFormatContext *ic)
|
|||||||
memset(probe_data, 0, sizeof(probe_data));
|
memset(probe_data, 0, sizeof(probe_data));
|
||||||
count = 0;
|
count = 0;
|
||||||
read_size = 0;
|
read_size = 0;
|
||||||
ppktl = &ic->packet_buffer;
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
/* check if one codec still needs to be handled */
|
/* check if one codec still needs to be handled */
|
||||||
for(i=0;i<ic->nb_streams;i++) {
|
for(i=0;i<ic->nb_streams;i++) {
|
||||||
@ -1801,24 +1803,9 @@ int av_find_stream_info(AVFormatContext *ic)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pktl = av_mallocz(sizeof(AVPacketList));
|
pkt= add_to_pktbuf(ic, &pkt1);
|
||||||
if (!pktl) {
|
if(av_dup_packet(pkt) < 0)
|
||||||
ret = AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add the packet in the buffered packet list */
|
|
||||||
*ppktl = pktl;
|
|
||||||
ppktl = &pktl->next;
|
|
||||||
|
|
||||||
pkt = &pktl->pkt;
|
|
||||||
*pkt = pkt1;
|
|
||||||
|
|
||||||
/* duplicate the packet */
|
|
||||||
if (av_dup_packet(pkt) < 0) {
|
|
||||||
ret = AVERROR(ENOMEM);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
read_size += pkt->size;
|
read_size += pkt->size;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user