[FFmpeg-cvslog] r25004 - trunk/libavformat/a64.c

bindhammer subversion
Tue Aug 31 09:15:11 CEST 2010


Author: bindhammer
Date: Tue Aug 31 09:15:11 2010
New Revision: 25004

Log:
Solving memory leak and initialization problem with prev_pkt / pkt.

Modified:
   trunk/libavformat/a64.c

Modified: trunk/libavformat/a64.c
==============================================================================
--- trunk/libavformat/a64.c	Tue Aug 31 09:14:47 2010	(r25003)
+++ trunk/libavformat/a64.c	Tue Aug 31 09:15:11 2010	(r25004)
@@ -125,8 +125,16 @@ static int a64_write_packet(struct AVFor
             }
             /* backup current packet for next turn */
             if(pkt->data) {
-                av_new_packet(&c->prev_pkt, pkt->size);
-                memcpy(c->prev_pkt.data, pkt->data, pkt->size);
+                /* no backup packet yet? create one! */
+                if(!c->prev_pkt.data) av_new_packet(&c->prev_pkt, pkt->size);
+                /* we have a packet and data is big enough, reuse it */
+                if(c->prev_pkt.data && c->prev_pkt.size >= pkt->size) {
+                    memcpy(c->prev_pkt.data, pkt->data, pkt->size);
+                    c->prev_pkt.size = pkt->size;
+                } else {
+                    av_log(avctx, AV_LOG_ERROR, "Too less memory for prev_pkt.\n");
+                    return AVERROR(ENOMEM);
+                }
             }
             c->prev_frame_count = frame_count;
             break;
@@ -145,9 +153,11 @@ static int a64_write_packet(struct AVFor
 static int a64_write_trailer(struct AVFormatContext *s)
 {
     A64MuxerContext *c = s->priv_data;
-    AVPacket pkt;
+    AVPacket pkt = {0};
     /* need to flush last packet? */
     if(c->interleaved) a64_write_packet(s, &pkt);
+    /* discard backed up packet */
+    if(c->prev_pkt.data) av_destruct_packet(&c->prev_pkt);
     return 0;
 }
 



More information about the ffmpeg-cvslog mailing list