aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-02-15 03:44:52 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-02-27 07:20:59 +0100
commit99812e2355deac2a84025503a6429da449b7b204 (patch)
tree4e1099b8190345ac31a63eed48a6fdb215bcf989
parentd711b5698544a6a23f185c085621b8f7fe99800a (diff)
downloadffmpeg-99812e2355deac2a84025503a6429da449b7b204.tar.gz
avformat/mpegenc: Avoid adding invalid packet to queue
Do this by moving the check before the allocation. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> (cherry picked from commit 4294f64d578e14b3f65a6a2cd064461cb74bb122)
-rw-r--r--libavformat/mpegenc.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
index 1204e57f04..14b904b152 100644
--- a/libavformat/mpegenc.c
+++ b/libavformat/mpegenc.c
@@ -1179,18 +1179,6 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt)
av_log(ctx, AV_LOG_TRACE, "dts:%f pts:%f flags:%d stream:%d nopts:%d\n",
dts / 90000.0, pts / 90000.0, pkt->flags,
pkt->stream_index, pts != AV_NOPTS_VALUE);
- pkt_desc = av_mallocz(sizeof(PacketDesc));
- if (!pkt_desc)
- return AVERROR(ENOMEM);
- if (!stream->predecode_packet) {
- stream->predecode_packet = pkt_desc;
- } else
- stream->last_packet->next = pkt_desc;
- stream->last_packet = pkt_desc;
- if (!stream->premux_packet)
- stream->premux_packet = pkt_desc;
- pkt_desc->pts = pts;
- pkt_desc->dts = dts;
if (st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD) {
if (size < 3) {
@@ -1204,6 +1192,18 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt)
size -= 3;
}
+ pkt_desc = av_mallocz(sizeof(PacketDesc));
+ if (!pkt_desc)
+ return AVERROR(ENOMEM);
+ if (!stream->predecode_packet) {
+ stream->predecode_packet = pkt_desc;
+ } else
+ stream->last_packet->next = pkt_desc;
+ stream->last_packet = pkt_desc;
+ if (!stream->premux_packet)
+ stream->premux_packet = pkt_desc;
+ pkt_desc->pts = pts;
+ pkt_desc->dts = dts;
pkt_desc->unwritten_size =
pkt_desc->size = size;