ffmpeg: Update to 2.6.9, Add patch to fix AAC decoder performance and memory usage (2.7 backport)
Signed-off-by: Ted Hess <thess@kitschensync.net>
This commit is contained in:
parent
adfaa8e0af
commit
9de3069a94
2 changed files with 71 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (C) 2006-2015 OpenWrt.org
|
||||
# Copyright (C) 2006-2016 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
|
@ -8,12 +8,12 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ffmpeg
|
||||
PKG_VERSION:=2.6.2
|
||||
PKG_VERSION:=2.6.9
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_URL:=http://ffmpeg.org/releases/
|
||||
PKG_MD5SUM:=e75d598921285d6775f20164a91936ac
|
||||
PKG_MD5SUM:=c3bdcce6f5ea0d138cae57ee38affa39
|
||||
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
|
||||
|
||||
PKG_LICENSE:=LGPL-2.1+ GPL-2+ LGPL-3
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
From 0289f81241e720452b5a77713488d54d3ec252d7 Mon Sep 17 00:00:00 2001
|
||||
From: nu774 <honeycomb77@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_zero@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;
|
Loading…
Reference in a new issue