You've already forked FFmpeg
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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user