[FFmpeg-cvslog] r9871 - trunk/libavformat/utils.c
michael
subversion
Fri Aug 3 10:56:00 CEST 2007
Author: michael
Date: Fri Aug 3 10:56:00 2007
New Revision: 9871
Log:
move code which adds a AVPacket into the packet buffer into its own function
Modified:
trunk/libavformat/utils.c
Modified: trunk/libavformat/utils.c
==============================================================================
--- trunk/libavformat/utils.c (original)
+++ trunk/libavformat/utils.c Fri Aug 3 10:56:00 2007
@@ -813,6 +813,22 @@ static int av_read_frame_internal(AVForm
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)
{
AVPacketList *pktl;
@@ -848,7 +864,6 @@ int av_read_frame(AVFormatContext *s, AV
}
}
if(genpts){
- AVPacketList **plast_pktl= &s->packet_buffer;
int ret= av_read_frame_internal(s, pkt);
if(ret<0){
if(pktl && ret != AVERROR(EAGAIN)){
@@ -858,19 +873,8 @@ int av_read_frame(AVFormatContext *s, AV
return ret;
}
- /* duplicate the packet */
- if (av_dup_packet(pkt) < 0)
- 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)
+ if(av_dup_packet(add_to_pktbuf(s, pkt)) < 0)
return AVERROR(ENOMEM);
-
- /* add the packet in the buffered packet list */
- *plast_pktl = pktl;
- pktl->pkt= *pkt;
}else{
assert(!s->packet_buffer);
return av_read_frame_internal(s, pkt);
@@ -1712,7 +1716,6 @@ int av_find_stream_info(AVFormatContext
int i, count, ret, read_size, j;
AVStream *st;
AVPacket pkt1, *pkt;
- AVPacketList *pktl=NULL, **ppktl;
int64_t last_dts[MAX_STREAMS];
int duration_count[MAX_STREAMS]={0};
double (*duration_error)[MAX_STD_TIMEBASES];
@@ -1749,7 +1752,6 @@ int av_find_stream_info(AVFormatContext
memset(probe_data, 0, sizeof(probe_data));
count = 0;
read_size = 0;
- ppktl = &ic->packet_buffer;
for(;;) {
/* check if one codec still needs to be handled */
for(i=0;i<ic->nb_streams;i++) {
@@ -1801,24 +1803,9 @@ int av_find_stream_info(AVFormatContext
break;
}
- pktl = av_mallocz(sizeof(AVPacketList));
- if (!pktl) {
- ret = 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;
- }
+ pkt= add_to_pktbuf(ic, &pkt1);
+ if(av_dup_packet(pkt) < 0)
+ return AVERROR(ENOMEM);
read_size += pkt->size;
More information about the ffmpeg-cvslog
mailing list