diff options
author | James Almer <jamrial@gmail.com> | 2021-01-29 11:30:44 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2021-03-17 15:06:49 -0300 |
commit | e7f1540507a5e82fcc1d1a78fc04519e9c9aea7e (patch) | |
tree | fcd4c6c8d3c329982476e1fc4e418dc5ac0d67a1 /libavformat | |
parent | 42422b6dcaec0fde0d2b19cc934cb59621c5c46e (diff) | |
download | ffmpeg-e7f1540507a5e82fcc1d1a78fc04519e9c9aea7e.tar.gz |
avformat/mpegtsenc: use av_packet_alloc() to allocate packets
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/mpegtsenc.c | 19 |
1 files 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; |