Thanks for these updates - I manually merged them to for-15.05. https://github.com/openwrt/packages/commit/9de3069a949d303dcafd52c6df11baa7c673b 57f
(Tried to include your SoB, but branch wouldn't allow force-push after amend -- sorry) /ted On Fri, 2016-09-30 at 14:17 +0200, Rafał Miłecki wrote: > From: Rafał Miłecki <ra...@milecki.pl> > > It's a backport from 2.7 branch that fixes parsing some AAC formats. > > What makes this quite important is that broken parsing was leading to > many loop iterations, scanning taking a lot of time and allocating a lot > of memory. Parsing 1.3 GB MPEG TS file could result in allocating > 55+ MiB of memory causing OOM on some embedded platforms. > > This is important change e.g. for minidlna users who were complaining > about slowness and memory consumption of scanning process. This problem > was forcing some users to building minidlna database on PCs and moving > ready one to the target device. > > Signed-off-by: Rafał Miłecki <ra...@milecki.pl> > --- > multimedia/ffmpeg/Makefile | 2 +- > ...ly-map-multichannel-ADTS-AAC-with-non-zer.patch | 68 > ++++++++++++++++++++++ > 2 files changed, 69 insertions(+), 1 deletion(-) > create mode 100644 multimedia/ffmpeg/patches/050-aac-Correctly-map- > multichannel-ADTS-AAC-with-non-zer.patch > > diff --git a/multimedia/ffmpeg/Makefile b/multimedia/ffmpeg/Makefile > index 493f47a..4d9cf01 100644 > --- a/multimedia/ffmpeg/Makefile > +++ b/multimedia/ffmpeg/Makefile > @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk > > PKG_NAME:=ffmpeg > PKG_VERSION:=2.6.9 > -PKG_RELEASE:=1 > +PKG_RELEASE:=2 > > PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 > PKG_SOURCE_URL:=http://ffmpeg.org/releases/ > diff --git a/multimedia/ffmpeg/patches/050-aac-Correctly-map-multichannel- > ADTS-AAC-with-non-zer.patch b/multimedia/ffmpeg/patches/050-aac-Correctly-map- > multichannel-ADTS-AAC-with-non-zer.patch > new file mode 100644 > index 0000000..4ef1914 > --- /dev/null > +++ b/multimedia/ffmpeg/patches/050-aac-Correctly-map-multichannel-ADTS-AAC- > with-non-zer.patch > @@ -0,0 +1,68 @@ > +From 0289f81241e720452b5a77713488d54d3ec252d7 Mon Sep 17 00:00:00 2001 > +From: nu774 <honeycom...@gmail.com> > +Date: Wed, 3 Jun 2015 14:01:32 +0900 > +Subject: [PATCH] aac: Correctly map multichannel ADTS AAC with non-zero > + channel_config + PCE > + > +The decoder assigns channels using default channel configuration > +for 5.1ch when it parses an ADTS frame header using consecutive > +channel ids. > + > +When a PCE comes, it reassigns channels using PCE configuration > +using directly the ids provided. They can be arbitrary. > + > +Always use consecutive channel ids to avoid decoding glitches due > +spurious reconfigurations due the channel ids mismatch between the > +two otherwise-identical channel maps. > + > +Signed-off-by: Luca Barbato <lu_z...@gentoo.org> > +--- > + libavcodec/aacdec.c | 13 ++++++++++--- > + 1 file changed, 10 insertions(+), 3 deletions(-) > + > +--- a/libavcodec/aacdec.c > ++++ b/libavcodec/aacdec.c > +@@ -457,12 +457,18 @@ static int output_configure(AACContext * > + AVCodecContext *avctx = ac->avctx; > + int i, channels = 0, ret; > + uint64_t layout = 0; > ++ uint8_t id_map[TYPE_END][MAX_ELEM_ID] = {{ 0 }}; > ++ uint8_t type_counts[TYPE_END] = { 0 }; > + > + if (ac->oc[1].layout_map != layout_map) { > + memcpy(ac->oc[1].layout_map, layout_map, tags * > sizeof(layout_map[0])); > + ac->oc[1].layout_map_tags = tags; > + } > +- > ++ for (i = 0; i < tags; i++) { > ++ int type = layout_map[i][0]; > ++ int id = layout_map[i][1]; > ++ id_map[type][id] = type_counts[type]++; > ++ } > + // Try to sniff a reasonable channel order, otherwise output the > + // channels in the order the PCE declared them. > + if (avctx->request_channel_layout != AV_CH_LAYOUT_NATIVE) > +@@ -470,12 +476,14 @@ static int output_configure(AACContext * > + for (i = 0; i < tags; i++) { > + int type = layout_map[i][0]; > + int id = layout_map[i][1]; > ++ int iid = id_map[type][id]; > + int position = layout_map[i][2]; > + // Allocate or free elements depending on if they are in the > + // current program configuration. > +- ret = che_configure(ac, position, type, id, &channels); > ++ ret = che_configure(ac, position, type, iid, &channels); > + if (ret < 0) > + return ret; > ++ ac->tag_che_map[type][id] = ac->che[type][iid]; > + } > + if (ac->oc[1].m4ac.ps == 1 && channels == 2) { > + if (layout == AV_CH_FRONT_CENTER) { > +@@ -485,7 +493,6 @@ static int output_configure(AACContext * > + } > + } > + > +- memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac- > >che[0][0])); > + if (layout) avctx->channel_layout = layout; > + ac->oc[1].channel_layout = layout; > + avctx->channels = ac->oc[1].channels = channels; _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev