[FFmpeg-cvslog] mpegts: properly output large audio packets

Jindřich Makovička git at videolan.org
Thu Dec 29 02:01:05 CET 2011


ffmpeg | branch: master | Jindřich Makovička <makovick at gmail.com> | Mon Dec 19 20:03:24 2011 +0100| [6fa9843b4baf93a95be5ce7c6ad5c041992504bf] | committer: Anton Khirnov

mpegts: properly output large audio packets

Do not assume the audio packets being always smaller than
DEFAULT_PES_PAYLOAD_SIZE.

Signed-off-by: Jindřich Makovička <makovick at gmail.com>
Signed-off-by: Anton Khirnov <anton at khirnov.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6fa9843b4baf93a95be5ce7c6ad5c041992504bf
---

 libavformat/mpegtsenc.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index 57cfe45..48b1617 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -1007,10 +1007,18 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
     }
 
     if (ts_st->payload_size + size > DEFAULT_PES_PAYLOAD_SIZE) {
-        mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_size,
-                         ts_st->payload_pts, ts_st->payload_dts,
-                         ts_st->payload_flags & AV_PKT_FLAG_KEY);
-        ts_st->payload_size = 0;
+        if (ts_st->payload_size) {
+            mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_size,
+                             ts_st->payload_pts, ts_st->payload_dts,
+                             ts_st->payload_flags & AV_PKT_FLAG_KEY);
+            ts_st->payload_size = 0;
+        }
+        if (size > DEFAULT_PES_PAYLOAD_SIZE) {
+            mpegts_write_pes(s, st, buf, size, pts, dts,
+                             pkt->flags & AV_PKT_FLAG_KEY);
+            av_free(data);
+            return 0;
+        }
     }
 
     if (!ts_st->payload_size) {



More information about the ffmpeg-cvslog mailing list