1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-15 14:13:16 +02:00

avformat/rtpenc_mpegts: use av_packet_alloc() to allocate packets

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2021-01-29 12:07:57 -03:00
parent 5e518c7416
commit fd23efb20b

View File

@@ -26,6 +26,7 @@
struct MuxChain { struct MuxChain {
AVFormatContext *mpegts_ctx; AVFormatContext *mpegts_ctx;
AVFormatContext *rtp_ctx; AVFormatContext *rtp_ctx;
AVPacket *pkt;
}; };
static int rtp_mpegts_write_close(AVFormatContext *s) static int rtp_mpegts_write_close(AVFormatContext *s)
@@ -41,6 +42,9 @@ static int rtp_mpegts_write_close(AVFormatContext *s)
av_write_trailer(chain->rtp_ctx); av_write_trailer(chain->rtp_ctx);
avformat_free_context(chain->rtp_ctx); avformat_free_context(chain->rtp_ctx);
} }
av_packet_free(&chain->pkt);
return 0; return 0;
} }
@@ -58,6 +62,9 @@ static int rtp_mpegts_write_header(AVFormatContext *s)
mpegts_ctx = avformat_alloc_context(); mpegts_ctx = avformat_alloc_context();
if (!mpegts_ctx) if (!mpegts_ctx)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
chain->pkt = av_packet_alloc();
if (!chain->pkt)
goto fail;
mpegts_ctx->oformat = mpegts_format; mpegts_ctx->oformat = mpegts_format;
mpegts_ctx->max_delay = s->max_delay; mpegts_ctx->max_delay = s->max_delay;
av_dict_copy(&mpegts_ctx->metadata, s->metadata, 0); av_dict_copy(&mpegts_ctx->metadata, s->metadata, 0);
@@ -116,7 +123,7 @@ static int rtp_mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
struct MuxChain *chain = s->priv_data; struct MuxChain *chain = s->priv_data;
int ret = 0, size; int ret = 0, size;
uint8_t *buf; uint8_t *buf;
AVPacket local_pkt; AVPacket *local_pkt = chain->pkt;
if (!chain->mpegts_ctx->pb) { if (!chain->mpegts_ctx->pb) {
if ((ret = avio_open_dyn_buf(&chain->mpegts_ctx->pb)) < 0) if ((ret = avio_open_dyn_buf(&chain->mpegts_ctx->pb)) < 0)
@@ -130,19 +137,19 @@ static int rtp_mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
av_free(buf); av_free(buf);
return 0; return 0;
} }
av_init_packet(&local_pkt); av_packet_unref(local_pkt);
local_pkt.data = buf; local_pkt->data = buf;
local_pkt.size = size; local_pkt->size = size;
local_pkt.stream_index = 0; local_pkt->stream_index = 0;
if (pkt->pts != AV_NOPTS_VALUE) if (pkt->pts != AV_NOPTS_VALUE)
local_pkt.pts = av_rescale_q(pkt->pts, local_pkt->pts = av_rescale_q(pkt->pts,
s->streams[pkt->stream_index]->time_base, s->streams[pkt->stream_index]->time_base,
chain->rtp_ctx->streams[0]->time_base); chain->rtp_ctx->streams[0]->time_base);
if (pkt->dts != AV_NOPTS_VALUE) if (pkt->dts != AV_NOPTS_VALUE)
local_pkt.dts = av_rescale_q(pkt->dts, local_pkt->dts = av_rescale_q(pkt->dts,
s->streams[pkt->stream_index]->time_base, s->streams[pkt->stream_index]->time_base,
chain->rtp_ctx->streams[0]->time_base); chain->rtp_ctx->streams[0]->time_base);
ret = av_write_frame(chain->rtp_ctx, &local_pkt); ret = av_write_frame(chain->rtp_ctx, local_pkt);
av_free(buf); av_free(buf);
return ret; return ret;