[FFmpeg-devel] [RFC] missing av_free_packet on error?

Reimar Döffinger Reimar.Doeffinger
Thu Jul 10 21:53:15 CEST 2008


Hello,
I have been trying to fix
http://bugzilla.mplayerhq.hu/show_bug.cgi?id=1136
and thus noticed the following code in libavformat/eacdata.c:
================================
if (av_get_packet(s->pb, pkt, packet_size) != packet_size)
   return AVERROR(EIO);
================================

Whereas av_find_stream_info() assumes that if there is an error, there
is no packet to free.
My question is: where is the error, where should it be fixed?
In the demuxer, in av_find_stream_info, av_read_... or maybe this check
should be moved to av_get_packet, to make it always fail when not all
requested data could be read?
IMO in the demuxer, in which case I suggest this change:

===================================================================
--- libavformat/eacdata.c       (revision 14158)
+++ libavformat/eacdata.c       (working copy)
@@ -83,8 +83,10 @@
     CdataDemuxContext *cdata = s->priv_data;
     int packet_size = 76*cdata->channels;
 
-    if (av_get_packet(s->pb, pkt, packet_size) != packet_size)
+    if (av_get_packet(s->pb, pkt, packet_size) != packet_size) {
+        av_free_packet(pkt);
         return AVERROR(EIO);
+    }
     pkt->pts = cdata->audio_pts++;
     return 1;
 }


Greetings,
Reimar D?ffinger




More information about the ffmpeg-devel mailing list