summaryrefslogtreecommitdiff
path: root/libavformat/mpegts.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2021-09-21 06:02:21 +0200
committerMarton Balint <cus@passwd.hu>2021-10-10 16:54:15 +0200
commit65cd43cff32a711a8380c059f153b5d64deec85e (patch)
treea6930e3847508e3e00a80cdfb07f3d698b0888a5 /libavformat/mpegts.c
parentce8db0c253110d6915dffe4840f5802f84e5a202 (diff)
avformat/mpegts: delay allocation of PES buffer
This allows us to allocate the buffer in a single code path. Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/mpegts.c')
-rw-r--r--libavformat/mpegts.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 9aad720edd..6120f273d2 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1189,11 +1189,6 @@ static int mpegts_push_data(MpegTSFilter *filter,
if (!pes->total_size)
pes->total_size = MAX_PES_PAYLOAD;
- /* allocate pes buffer */
- pes->buffer = buffer_pool_get(ts, pes->total_size);
- if (!pes->buffer)
- return AVERROR(ENOMEM);
-
if (pes->stream_id != STREAM_ID_PROGRAM_STREAM_MAP &&
pes->stream_id != STREAM_ID_PRIVATE_STREAM_2 &&
pes->stream_id != STREAM_ID_ECM_STREAM &&
@@ -1364,16 +1359,13 @@ skip:
}
break;
case MPEGTS_PAYLOAD:
- if (pes->buffer) {
+ do {
if (pes->data_index > 0 &&
pes->data_index + buf_size > pes->total_size) {
ret = new_pes_packet(pes, ts->pkt);
if (ret < 0)
return ret;
pes->total_size = MAX_PES_PAYLOAD;
- pes->buffer = buffer_pool_get(ts, pes->total_size);
- if (!pes->buffer)
- return AVERROR(ENOMEM);
ts->stop_parse = 1;
} else if (pes->data_index == 0 &&
buf_size > pes->total_size) {
@@ -1381,6 +1373,13 @@ skip:
// not sure if this is legal in ts but see issue #2392
buf_size = pes->total_size;
}
+
+ if (!pes->buffer) {
+ pes->buffer = buffer_pool_get(ts, pes->total_size);
+ if (!pes->buffer)
+ return AVERROR(ENOMEM);
+ }
+
memcpy(pes->buffer->data + pes->data_index, p, buf_size);
pes->data_index += buf_size;
/* emit complete packets with known packet size
@@ -1392,10 +1391,11 @@ skip:
pes->pes_header_size + pes->data_index == pes->total_size + PES_START_SIZE) {
ts->stop_parse = 1;
ret = new_pes_packet(pes, ts->pkt);
+ pes->state = MPEGTS_SKIP;
if (ret < 0)
return ret;
}
- }
+ } while (0);
buf_size = 0;
break;
case MPEGTS_SKIP: