On Fri, Jan 29, 2016 at 09:36:30PM +0000, popcorn mix wrote: > The index creation is O(N^2) with number of entries (typically thousands). > On a Raspberry Pi this can take more than 60 seconds to execute for a > recording of a few hours. > > By replacing with an O(N) loop, this takes virtually zero time > > This patch has been in all Pi builds of Kodi for the last couple of years, > so it is quite widely tested. No change in FATE output. > > From 4bad5dbd752e96a6dfcb7e46aff1d64996d08ed1 Mon Sep 17 00:00:00 2001 > From: popcornmix <popcorn...@gmail.com> > Date: Fri, 29 Jan 2016 20:27:00 +0000 > Subject: [PATCH] wtv: Speed up wtv index creation > > The index creation is O(N^2) with number of entries (typically thousands). > On a Pi this can take more than 60 seconds to execute for a recording of a > few hours. > > By replacing with an O(N) loop, this takes virtually zero time > --- > libavformat/wtvdec.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/libavformat/wtvdec.c b/libavformat/wtvdec.c > index e8f6196..b329b7c 100644 > --- a/libavformat/wtvdec.c > +++ b/libavformat/wtvdec.c > @@ -1028,21 +1028,23 @@ static int read_header(AVFormatContext *s) > pb = wtvfile_open(s, root, root_size, > ff_timeline_table_0_entries_Events_le16); > if (pb) { > int i; > + AVIndexEntry *e = wtv->index_entries; > + AVIndexEntry *e_end = wtv->index_entries + > wtv->nb_index_entries - 1; > + uint64_t last_position = 0; > while (1) { > uint64_t frame_nb = avio_rl64(pb); > uint64_t position = avio_rl64(pb); > + while (frame_nb > e->size && e <= e_end) { > + e->pos = last_position; > + e++;
^^^ this indent isn't aligned. otherwise, great stuff. your implementation is solid. -- Peter (A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel