[FFmpeg-cvslog] avformat/mpegtsenc: use av_packet_alloc() to allocate packets

James Almer git at videolan.org
Wed Mar 17 21:16:59 EET 2021


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Fri Jan 29 11:30:44 2021 -0300| [e7f1540507a5e82fcc1d1a78fc04519e9c9aea7e] | committer: James Almer

avformat/mpegtsenc: use av_packet_alloc() to allocate packets

Signed-off-by: James Almer <jamrial at gmail.com>

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

 libavformat/mpegtsenc.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index 8158a20497..35c835c484 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -77,6 +77,7 @@ typedef struct MpegTSWrite {
     MpegTSSection pat; /* MPEG-2 PAT table */
     MpegTSSection sdt; /* MPEG-2 SDT table context */
     MpegTSService **services;
+    AVPacket *pkt;
     int64_t sdt_period; /* SDT period in PCR time base */
     int64_t pat_period; /* PAT/PMT period in PCR time base */
     int nb_services;
@@ -1022,6 +1023,10 @@ static int mpegts_init(AVFormatContext *s)
     ts->sdt.write_packet = section_write_packet;
     ts->sdt.opaque       = s;
 
+    ts->pkt = av_packet_alloc();
+    if (!ts->pkt)
+        return AVERROR(ENOMEM);
+
     /* assign pids to each stream */
     for (i = 0; i < s->nb_streams; i++) {
         AVStream *st = s->streams[i];
@@ -1745,23 +1750,23 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
         }
         if ((AV_RB16(pkt->data) & 0xfff0) != 0xfff0) {
             int ret;
-            AVPacket pkt2;
+            AVPacket *pkt2 = ts->pkt;
 
             if (!ts_st->amux) {
                 av_log(s, AV_LOG_ERROR, "AAC bitstream not in ADTS format "
                                         "and extradata missing\n");
             } else {
-                av_init_packet(&pkt2);
-                pkt2.data = pkt->data;
-                pkt2.size = pkt->size;
+                av_packet_unref(pkt2);
+                pkt2->data = pkt->data;
+                pkt2->size = pkt->size;
                 av_assert0(pkt->dts != AV_NOPTS_VALUE);
-                pkt2.dts = av_rescale_q(pkt->dts, st->time_base, ts_st->amux->streams[0]->time_base);
+                pkt2->dts = av_rescale_q(pkt->dts, st->time_base, ts_st->amux->streams[0]->time_base);
 
                 ret = avio_open_dyn_buf(&ts_st->amux->pb);
                 if (ret < 0)
                     return ret;
 
-                ret = av_write_frame(ts_st->amux, &pkt2);
+                ret = av_write_frame(ts_st->amux, pkt2);
                 if (ret < 0) {
                     ffio_free_dyn_buf(&ts_st->amux->pb);
                     return ret;
@@ -2020,6 +2025,8 @@ static void mpegts_deinit(AVFormatContext *s)
     MpegTSService *service;
     int i;
 
+    av_packet_free(&ts->pkt);
+
     for (i = 0; i < s->nb_streams; i++) {
         AVStream *st = s->streams[i];
         MpegTSWriteStream *ts_st = st->priv_data;



More information about the ffmpeg-cvslog mailing list