diff options
author | Ben Avison <bavison@riscosopen.org> | 2013-08-05 13:12:51 +0100 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2013-08-05 15:18:42 +0300 |
commit | c84ea750cf765c9d8845fca5546eb0ae25b9c855 (patch) | |
tree | 93d74323463bb0c5e998dbfd2b8945d770d8845b | |
parent | cabb1681697555e2c319c37c1f30f149207e9434 (diff) | |
download | ffmpeg-c84ea750cf765c9d8845fca5546eb0ae25b9c855.tar.gz |
mpegts: Make discard_pid() faster for single-program streams
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ö <martin@martin.st>
-rw-r--r-- | libavformat/mpegts.c | 11 |
1 files changed, 11 insertions, 0 deletions
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; i<ts->nb_prg; i++) { p = &ts->prg[i]; for(j=0; j<p->nb_pids; j++) { |