[FFmpeg-devel] [PATCH] mpegencts: Fix overflow in cbr mode period calculations
Timo Teräs
timo.teras at iki.fi
Fri Nov 27 20:25:52 CET 2015
ts->mux_rate is int (signed 32-bit) type. The period calculations
will start to overflow when mux_rate > 5mbps. This fixes overflows
by using av_rescale().
Fixes #5044.
Signed-off-by: Timo Teräs <timo.teras at iki.fi>
---
libavformat/mpegtsenc.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index 468bad4..8c0987c 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -852,12 +852,9 @@ static int mpegts_write_header(AVFormatContext *s)
ts_st = pcr_st->priv_data;
if (ts->mux_rate > 1) {
- service->pcr_packet_period = (ts->mux_rate * ts->pcr_period) /
- (TS_PACKET_SIZE * 8 * 1000);
- ts->sdt_packet_period = (ts->mux_rate * SDT_RETRANS_TIME) /
- (TS_PACKET_SIZE * 8 * 1000);
- ts->pat_packet_period = (ts->mux_rate * PAT_RETRANS_TIME) /
- (TS_PACKET_SIZE * 8 * 1000);
+ service->pcr_packet_period = av_rescale(ts->pcr_period, ts->mux_rate, TS_PACKET_SIZE * 8 * 1000);
+ ts->sdt_packet_period = av_rescale(SDT_RETRANS_TIME, ts->mux_rate, TS_PACKET_SIZE * 8 * 1000);
+ ts->pat_packet_period = av_rescale(PAT_RETRANS_TIME, ts->mux_rate, TS_PACKET_SIZE * 8 * 1000);
if (ts->copyts < 1)
ts->first_pcr = av_rescale(s->max_delay, PCR_TIME_BASE, AV_TIME_BASE);
--
2.6.3
More information about the ffmpeg-devel
mailing list