From c84ea750cf765c9d8845fca5546eb0ae25b9c855 Mon Sep 17 00:00:00 2001 From: Ben Avison Date: Mon, 5 Aug 2013 13:12:51 +0100 Subject: mpegts: Make discard_pid() faster for single-program streams MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a stream contains a single program, there's no point in doing a PID -> program lookup. Normally the one and only program isn't disabled, so no packets should be discarded. Before After Mean StdDev Mean StdDev Change discard_pid() 73.8 9.4 20.2 1.5 +264.8% Overall 2300.8 28.0 2253.1 20.6 +2.1% Signed-off-by: Martin Storsjö --- libavformat/mpegts.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'libavformat') diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 2def57371b..7a74712e04 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -239,6 +239,17 @@ static int discard_pid(MpegTSContext *ts, unsigned int pid) int i, j, k; int used = 0, discarded = 0; struct Program *p; + + /* If none of the programs have .discard=AVDISCARD_ALL then there's + * no way we have to discard this packet + */ + for (k = 0; k < ts->stream->nb_programs; k++) { + if (ts->stream->programs[k]->discard == AVDISCARD_ALL) + break; + } + if (k == ts->stream->nb_programs) + return 0; + for(i=0; inb_prg; i++) { p = &ts->prg[i]; for(j=0; jnb_pids; j++) { -- cgit v1.2.3