Browse Source

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>
tags/n2.1
Ben Avison Martin Storsjö 12 years ago
parent
commit
c84ea750cf
1 changed files with 11 additions and 0 deletions
  1. +11
    -0
      libavformat/mpegts.c

+ 11
- 0
libavformat/mpegts.c View File

@@ -239,6 +239,17 @@ static int discard_pid(MpegTSContext *ts, unsigned int pid)
int i, j, k; int i, j, k;
int used = 0, discarded = 0; int used = 0, discarded = 0;
struct Program *p; 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++) { for(i=0; i<ts->nb_prg; i++) {
p = &ts->prg[i]; p = &ts->prg[i];
for(j=0; j<p->nb_pids; j++) { for(j=0; j<p->nb_pids; j++) {


Loading…
Cancel
Save