summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorvan <[email protected]>2008-08-18 06:07:19 +0000
committervan <[email protected]>2008-08-18 06:07:19 +0000
commitfb73802e00132d407e9f00dd1a3a9535e651cdc6 (patch)
treed67038f44099b11c36c98e0906963e6c03fed875 /contrib
parent7628e62c73fc0010c29647bb8fcb7471e368aa5e (diff)
If we try to release old frames in the loop that searches for a free one we may free one that's in use & crash in avcodec_default_release_buffer. (Bug tracked down by eddyg).
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1641 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'contrib')
-rw-r--r--contrib/patch-ffmpeg-mpegleak.patch25
1 files changed, 6 insertions, 19 deletions
diff --git a/contrib/patch-ffmpeg-mpegleak.patch b/contrib/patch-ffmpeg-mpegleak.patch
index 88538922f..74907258b 100644
--- a/contrib/patch-ffmpeg-mpegleak.patch
+++ b/contrib/patch-ffmpeg-mpegleak.patch
@@ -24,23 +24,7 @@ Index: libavcodec/mpegvideo.c
===================================================================
--- libavcodec/mpegvideo.c (revision 14820)
+++ libavcodec/mpegvideo.c (working copy)
-@@ -772,6 +772,15 @@
- }else{
- for(i=0; i<MAX_PICTURE_COUNT; i++){
- if(s->picture[i].data[0]==NULL && s->picture[i].type!=0) return i; //FIXME
-+ /* XXX there seems to be a leak caused by h264 in mpeg transport
-+ * streams: Over-the-air streams have a lot of errors. A picture
-+ * may be marked as referenced but the actual references get lost
-+ * so it never gets released. We take care of that here by purging
-+ * pictures that are impossibly old.
-+ */
-+ if (s->coded_picture_number - s->picture[i].coded_picture_number >
-+ 32*MAX_PICTURE_COUNT)
-+ s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]);
- }
- for(i=0; i<MAX_PICTURE_COUNT; i++){
- if(s->picture[i].data[0]==NULL) return i;
-@@ -779,19 +788,15 @@
+@@ -779,19 +779,18 @@
}
av_log(s->avctx, AV_LOG_FATAL, "Internal error, picture buffer overflow\n");
@@ -57,8 +41,11 @@ Index: libavcodec/mpegvideo.c
- */
- abort();
- return -1;
-+ /* assume that we don't have a picture because of the leak described above.
-+ * just release the oldest we have & reuse its slot. */
++ /* XXX there seems to be a leak caused by h264 in mpeg transport
++ * streams: Over-the-air streams have a lot of errors. A picture
++ * may be marked as referenced but the actual references get lost
++ * so it never gets released. We take care of that here by releasing
++ * the oldest we have & reusing its slot. */
+ int oldest=0;
+ for(i=0; i<MAX_PICTURE_COUNT; i++){
+ if (s->picture[i].coded_picture_number < s->picture[oldest].coded_picture_number)