[FFmpeg-cvslog] mpegts: Make discard_pid() faster for single-program streams
Ben Avison
git at videolan.org
Tue Aug 6 15:22:38 CEST 2013
ffmpeg | branch: master | Ben Avison <bavison at riscosopen.org> | Mon Aug 5 13:12:51 2013 +0100| [c84ea750cf765c9d8845fca5546eb0ae25b9c855] | committer: Martin Storsjö
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 at martin.st>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c84ea750cf765c9d8845fca5546eb0ae25b9c855
---
libavformat/mpegts.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 2def573..7a74712 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++) {
More information about the ffmpeg-cvslog
mailing list