On Tuesday 07 July 2015 06:45:04 pm Michael Niedermayer wrote:
> On Tue, Jul 07, 2015 at 03:13:06PM +0200, Carl Eugen Hoyos wrote:
> > Hi!
> >
> > Matroska streaming currently consumes memory for
> > cuepoints that are never used if the output stream
> > is no seekable. This can lead to oom.
> > Attached patch fixes ticket #4690.
> >
> > Please comment, Carl Eugen
> >
> >  matroskaenc.c |   10 +++++++++-
> >  1 file changed, 9 insertions(+), 1 deletion(-)
> > 3bf45b1a064962b7e988c3ee5739cc8f2faf023d  patchmkvseekable.diff
>
> breaks fate

New patch attached.

Thank you, Carl Eugen
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 3b525ad..713cb33 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1772,7 +1772,7 @@ static int mkv_write_packet_internal(AVFormatContext *s, 
AVPacket *pkt, int add_
 
     if (codec->codec_type != AVMEDIA_TYPE_SUBTITLE) {
         mkv_write_block(s, pb, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe);
-        if (codec->codec_type == AVMEDIA_TYPE_VIDEO && keyframe || add_cue) {
+        if (s->pb->seekable && (codec->codec_type == AVMEDIA_TYPE_VIDEO && 
keyframe || add_cue)) {
             ret = mkv_add_cuepoint(mkv->cues, pkt->stream_index, 
dash_tracknum, ts, mkv->cluster_pos, relative_packet_pos, -1);
             if (ret < 0) return ret;
         }
@@ -1792,11 +1792,13 @@ static int mkv_write_packet_internal(AVFormatContext 
*s, AVPacket *pkt, int add_
         end_ebml_master(pb, blockgroup);
     }
 
+    if (s->pb->seekable) {
     ret = mkv_add_cuepoint(mkv->cues, pkt->stream_index, dash_tracknum, ts,
                            mkv->cluster_pos, relative_packet_pos, duration);
     if (ret < 0)
         return ret;
     }
+    }
 
     mkv->duration = FFMAX(mkv->duration, ts + duration);
     return 0;
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to