mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
kodi: update dcadec patch
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
475b778d77
commit
d45d29b559
@ -1,132 +0,0 @@
|
||||
From 448c71da440d4504432ac513e8493e27b1f06915 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Mon, 23 Mar 2015 22:33:04 +0000
|
||||
Subject: [PATCH] [dcadec] Add settings option to enable libdcadec
|
||||
|
||||
---
|
||||
addons/resource.language.en_gb/resources/strings.po | 10 ++++++++++
|
||||
system/settings/rbp.xml | 5 +++++
|
||||
system/settings/rbp2.xml | 3 +++
|
||||
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp | 6 +++++-
|
||||
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 10 ++++++++++
|
||||
xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp | 6 +++++-
|
||||
7 files changed, 39 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po
|
||||
index 1dde154..f641439 100644
|
||||
--- a/addons/resource.language.en_gb/resources/strings.po
|
||||
+++ b/addons/resource.language.en_gb/resources/strings.po
|
||||
@@ -16689,3 +16689,13 @@ msgstr ""
|
||||
msgctxt "#38103"
|
||||
msgid "Extract thumbnails from video files"
|
||||
msgstr ""
|
||||
+
|
||||
+#: system/settings/rbp.xml
|
||||
+msgctxt "#38120"
|
||||
+msgid "Support 8 channel DTS HD audio"
|
||||
+msgstr ""
|
||||
+
|
||||
+#: system/settings/rbp.xml
|
||||
+msgctxt "#38121"
|
||||
+msgid "This option supports 8 channel DTS HD but may use more CPU "
|
||||
+msgstr ""
|
||||
diff --git a/system/settings/rbp.xml b/system/settings/rbp.xml
|
||||
--- a/system/settings/rbp.xml
|
||||
+++ b/system/settings/rbp.xml
|
||||
@@ -27,6 +27,13 @@
|
||||
<control type="edit" format="integer" />
|
||||
</setting>
|
||||
</group>
|
||||
+ <group id="3">
|
||||
+ <setting id="videoplayer.supportdtshd" type="boolean" label="38120" help="38121">
|
||||
+ <level>2</level>
|
||||
+ <default>false</default>
|
||||
+ <control type="toggle" />
|
||||
+ </setting>
|
||||
+ </group>
|
||||
</category>
|
||||
<category id="myvideos">
|
||||
<group id="1">
|
||||
diff --git a/system/settings/rbp2.xml b/system/settings/rbp2.xml
|
||||
index 8cc8f19..197e255 100644
|
||||
--- a/system/settings/rbp2.xml
|
||||
+++ b/system/settings/rbp2.xml
|
||||
@@ -6,6 +6,9 @@
|
||||
<setting id="videoplayer.useomxplayer">
|
||||
<default>false</default>
|
||||
</setting>
|
||||
+ <setting id="videoplayer.supportdtshd">
|
||||
+ <default>true</default>
|
||||
+ </setting>
|
||||
</group>
|
||||
</category>
|
||||
</section>
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
|
||||
index 991449b..135bb43 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
|
||||
@@ -33,6 +33,7 @@ extern "C" {
|
||||
#include "settings/Settings.h"
|
||||
#include "cores/AudioEngine/Utils/AEUtil.h"
|
||||
#endif
|
||||
+#include "settings/Settings.h"
|
||||
|
||||
CDVDAudioCodecFFmpeg::CDVDAudioCodecFFmpeg() : CDVDAudioCodec()
|
||||
{
|
||||
@@ -57,7 +58,10 @@ bool CDVDAudioCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
|
||||
AVCodec* pCodec;
|
||||
m_bOpenedCodec = false;
|
||||
|
||||
- pCodec = avcodec_find_decoder(hints.codec);
|
||||
+ if (hints.codec == AV_CODEC_ID_DTS && CSettings::Get().GetBool("videoplayer.supportdtshd"))
|
||||
+ pCodec = avcodec_find_decoder_by_name("libdcadec");
|
||||
+ else
|
||||
+ pCodec = avcodec_find_decoder(hints.codec);
|
||||
if (!pCodec)
|
||||
{
|
||||
CLog::Log(LOGDEBUG,"CDVDAudioCodecFFmpeg::Open() Unable to find codec %d", hints.codec);
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
index f9b3232..1f8e15e 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
@@ -439,6 +439,16 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo, bool filein
|
||||
|
||||
if (m_streaminfo)
|
||||
{
|
||||
+ if (CSettings::Get().GetBool("videoplayer.supportdtshd"))
|
||||
+ {
|
||||
+ for (unsigned int i = 0; i < m_pFormatContext->nb_streams; i++)
|
||||
+ {
|
||||
+ AVStream *st = m_pFormatContext->streams[i];
|
||||
+ if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && st->codec->codec_id == AV_CODEC_ID_DTS)
|
||||
+ st->codec->codec = avcodec_find_decoder_by_name("libdcadec");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* to speed up dvd switches, only analyse very short */
|
||||
if(m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD))
|
||||
av_opt_set_int(m_pFormatContext, "analyzeduration", 500000, 0);
|
||||
diff --git a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp
|
||||
index 1a920f7..093864d 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#include "cores/AudioEngine/Utils/AEUtil.h"
|
||||
#include "cores/AudioEngine/AEFactory.h"
|
||||
+#include "settings/Settings.h"
|
||||
|
||||
// the size of the audio_render output port buffers
|
||||
#define AUDIO_DECODE_OUTPUT_BUFFER (32*1024)
|
||||
@@ -65,7 +66,10 @@ bool COMXAudioCodecOMX::Open(CDVDStreamInfo &hints)
|
||||
AVCodec* pCodec;
|
||||
m_bOpenedCodec = false;
|
||||
|
||||
- pCodec = avcodec_find_decoder(hints.codec);
|
||||
+ if (hints.codec == AV_CODEC_ID_DTS && CSettings::Get().GetBool("videoplayer.supportdtshd"))
|
||||
+ pCodec = avcodec_find_decoder_by_name("libdcadec");
|
||||
+ else
|
||||
+ pCodec = avcodec_find_decoder(hints.codec);
|
||||
if (!pCodec)
|
||||
{
|
||||
CLog::Log(LOGDEBUG,"COMXAudioCodecOMX::Open() Unable to find codec %d", hints.codec);
|
840
packages/mediacenter/kodi/patches/kodi-999.20-PR7102.patch
Normal file
840
packages/mediacenter/kodi/patches/kodi-999.20-PR7102.patch
Normal file
@ -0,0 +1,840 @@
|
||||
From 17db313334d564b34e00154e6d3d5cf6163c13fb Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Mon, 23 Mar 2015 17:12:31 +0000
|
||||
Subject: [PATCH 1/6] [ffmpeg] Add support for libdcadec
|
||||
|
||||
---
|
||||
Makefile.in | 2 +-
|
||||
configure.ac | 4 +
|
||||
tools/depends/target/Makefile | 4 +-
|
||||
.../0001-avcodec-add-libdcadec-decoder.patch | 280 +++++++++++++++++++++
|
||||
.../0002-avcodec-Fix-libdcadec-include-dir.patch | 40 +++
|
||||
...vcodec-add-profile-define-for-DTS-Express.patch | 25 ++
|
||||
tools/depends/target/ffmpeg/Makefile | 7 +-
|
||||
tools/depends/target/libdcadec/Makefile | 38 +++
|
||||
8 files changed, 396 insertions(+), 4 deletions(-)
|
||||
create mode 100644 tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch
|
||||
create mode 100644 tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch
|
||||
create mode 100644 tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch
|
||||
create mode 100644 tools/depends/target/libdcadec/Makefile
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 7ed7c37..4a8aeef 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -445,7 +445,7 @@ FFMPEGOBJS = @FFMPEG_LIBDIR@/libavcodec.a \
|
||||
@FFMPEG_LIBDIR@/libpostproc.a \
|
||||
@FFMPEG_LIBDIR@/libswscale.a
|
||||
DYNOBJSXBMC+= $(FFMPEGOBJS)
|
||||
-LIBS+= @GNUTLS_ALL_LIBS@ @VORBISENC_ALL_LIBS@
|
||||
+LIBS+= @GNUTLS_ALL_LIBS@ @VORBISENC_ALL_LIBS@ @DCADEC_ALL_LIBS@
|
||||
|
||||
$(FFMPEGOBJS): dvdpcodecs
|
||||
endif
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index cf18212..ad9ae6d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1088,6 +1088,7 @@ AC_CHECK_HEADER([mpeg2dec/mpeg2convert.h],, AC_MSG_ERROR($missing_library),
|
||||
AC_CHECK_HEADER([jpeglib.h],, AC_MSG_ERROR($missing_library))
|
||||
AC_CHECK_HEADER([ogg/ogg.h],, AC_MSG_ERROR($missing_library))
|
||||
AC_CHECK_HEADER([vorbis/vorbisfile.h],, AC_MSG_ERROR($missing_library))
|
||||
+AC_CHECK_HEADER([libdcadec/dca_context.h],, AC_MSG_ERROR($missing_library))
|
||||
|
||||
PKG_CHECK_MODULES([LIBCURL], [libcurl],, AC_MSG_ERROR([libcurl not found]))
|
||||
XB_FIND_SONAME([CURL], [curl])
|
||||
@@ -1119,6 +1120,7 @@ PKG_CHECK_MODULES([GNUTLS], [gnutls], [have_gnutls=yes];AC_DEFINE([HAVE_GNUTLS],
|
||||
AC_CHECK_LIB([bz2], [main],, AC_MSG_ERROR($missing_library))
|
||||
AC_CHECK_LIB([jpeg], [main],, AC_MSG_ERROR($missing_library)) # check for cximage
|
||||
AC_CHECK_LIB([tiff], [main],, AC_MSG_ERROR($missing_library))
|
||||
+AC_CHECK_LIB([dcadec], [main],, AC_MSG_ERROR($missing_library))
|
||||
if echo "$ARCH" | grep -q freebsd; then
|
||||
AC_CHECK_LIB([pthread], [main],LIBS="-pthread $LIBS", AC_MSG_ERROR($missing_library))
|
||||
AC_CHECK_LIB([pthread], [pthread_set_name_np],
|
||||
@@ -1806,6 +1808,7 @@ if test "${USE_STATIC_FFMPEG}" = "1"; then
|
||||
FFMPEG_LIBDIR=${pkg_cfg_prefix}$(PKG_CONFIG_SYSROOT_DIR="" ${PKG_CONFIG} --static --variable=libdir libavcodec)
|
||||
GNUTLS_ALL_LIBS=$(${PKG_CONFIG} --static --libs-only-l --silence-errors gnutls)
|
||||
VORBISENC_ALL_LIBS=$(${PKG_CONFIG} --static --libs-only-l --silence-errors vorbisenc)
|
||||
+ DCADEC_ALL_LIBS=$(${PKG_CONFIG} --static --libs-only-l --silence-errors dcadec)
|
||||
|
||||
# check if static libs are available
|
||||
for ff_lib in ${ff_libs}; do
|
||||
@@ -2630,6 +2633,7 @@ AC_SUBST(FFMPEG_LIBDIR)
|
||||
AC_SUBST(USE_STATIC_FFMPEG)
|
||||
AC_SUBST(GNUTLS_ALL_LIBS)
|
||||
AC_SUBST(VORBISENC_ALL_LIBS)
|
||||
+AC_SUBST(DCADEC_ALL_LIBS)
|
||||
AC_SUBST(USE_TOUCH_SKIN)
|
||||
AC_SUBST(USE_LIBAV_HACKS)
|
||||
AC_SUBST(PYTHON_VERSION)
|
||||
diff --git a/tools/depends/target/Makefile b/tools/depends/target/Makefile
|
||||
index 915de85..5d85ca8 100644
|
||||
--- a/tools/depends/target/Makefile
|
||||
+++ b/tools/depends/target/Makefile
|
||||
@@ -15,7 +15,7 @@ DEPENDS = \
|
||||
python26 libshairplay \
|
||||
libplist libcec libbluray boost tinyxml dummy-libxbmc \
|
||||
libamplayer libssh taglib libusb libnfs libmp3lame \
|
||||
- pythonmodule-pil libxslt ffmpeg platform
|
||||
+ pythonmodule-pil libxslt ffmpeg platform libdcadec
|
||||
|
||||
FFMPEG_DEPENDS = gnutls
|
||||
|
||||
@@ -96,7 +96,7 @@ nettle: gmp
|
||||
pythonmodule-pil: $(ZLIB) libjpeg-turbo libpng freetype2 python26
|
||||
libsdl2: $(LINUX_SYSTEM_LIBS)
|
||||
libxslt: libgcrypt
|
||||
-ffmpeg: $(ICONV) $(ZLIB) bzip2 libvorbis $(FFMPEG_DEPENDS)
|
||||
+ffmpeg: $(ICONV) $(ZLIB) bzip2 libvorbis libdcadec $(FFMPEG_DEPENDS)
|
||||
libcec: platform
|
||||
|
||||
.installed-$(PLATFORM): $(DEPENDS)
|
||||
diff --git a/tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch b/tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch
|
||||
new file mode 100644
|
||||
index 0000000..c0c2ac1
|
||||
--- /dev/null
|
||||
+++ b/tools/depends/target/ffmpeg/0001-avcodec-add-libdcadec-decoder.patch
|
||||
@@ -0,0 +1,280 @@
|
||||
+From 519868de7d9c99876efcaf57d6a9683c22732cde Mon Sep 17 00:00:00 2001
|
||||
+From: Hendrik Leppkes <h.leppkes@gmail.com>
|
||||
+Date: Thu, 19 Mar 2015 23:56:22 +0100
|
||||
+Subject: [PATCH] avcodec: add libdcadec decoder
|
||||
+
|
||||
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
|
||||
+---
|
||||
+ configure | 4 +
|
||||
+ libavcodec/Makefile | 1 +
|
||||
+ libavcodec/allcodecs.c | 1 +
|
||||
+ libavcodec/libdcadec.c | 197 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
+ 4 files changed, 203 insertions(+)
|
||||
+ create mode 100644 libavcodec/libdcadec.c
|
||||
+
|
||||
+diff --git a/configure b/configure
|
||||
+index 1bf8f80..a449bc7 100755
|
||||
+--- a/configure
|
||||
++++ b/configure
|
||||
+@@ -210,6 +210,7 @@ External library support:
|
||||
+ --enable-libcdio enable audio CD grabbing with libcdio [no]
|
||||
+ --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
|
||||
+ and libraw1394 [no]
|
||||
++ --enable-libdcadec enable DCA decoding via libdcadec [no]
|
||||
+ --enable-libfaac enable AAC encoding via libfaac [no]
|
||||
+ --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
|
||||
+ --enable-libflite enable flite (voice synthesis) support via libflite [no]
|
||||
+@@ -1353,6 +1354,7 @@ EXTERNAL_LIBRARY_LIST="
|
||||
+ libcdio
|
||||
+ libcelt
|
||||
+ libdc1394
|
||||
++ libdcadec
|
||||
+ libfaac
|
||||
+ libfdk_aac
|
||||
+ libflite
|
||||
+@@ -2359,6 +2361,7 @@ vc1_parser_select="mpegvideo startcode vc1_decoder"
|
||||
+ # external libraries
|
||||
+ libaacplus_encoder_deps="libaacplus"
|
||||
+ libcelt_decoder_deps="libcelt"
|
||||
++libdcadec_decoder_deps="libdcadec"
|
||||
+ libfaac_encoder_deps="libfaac"
|
||||
+ libfaac_encoder_select="audio_frame_queue"
|
||||
+ libfdk_aac_decoder_deps="libfdk_aac"
|
||||
+@@ -4922,6 +4925,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
|
||||
+ { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
|
||||
+ die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
|
||||
+ enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
|
||||
++enabled libdcadec && require libdcadec dca_context.h dcadec_context_create -ldcadec
|
||||
+ enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
|
||||
+ enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
|
||||
+ flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
|
||||
+diff --git a/libavcodec/Makefile b/libavcodec/Makefile
|
||||
+index 4173f88..1a0c734 100644
|
||||
+--- a/libavcodec/Makefile
|
||||
++++ b/libavcodec/Makefile
|
||||
+@@ -732,6 +732,7 @@ OBJS-$(CONFIG_ELBG_FILTER) += elbg.o
|
||||
+ # external codec libraries
|
||||
+ OBJS-$(CONFIG_LIBAACPLUS_ENCODER) += libaacplus.o
|
||||
+ OBJS-$(CONFIG_LIBCELT_DECODER) += libcelt_dec.o
|
||||
++OBJS-$(CONFIG_LIBDCADEC_DECODER) += libdcadec.o
|
||||
+ OBJS-$(CONFIG_LIBFAAC_ENCODER) += libfaac.o
|
||||
+ OBJS-$(CONFIG_LIBFDK_AAC_DECODER) += libfdk-aacdec.o
|
||||
+ OBJS-$(CONFIG_LIBFDK_AAC_ENCODER) += libfdk-aacenc.o
|
||||
+diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
|
||||
+index 5194e74..bbf70a6 100644
|
||||
+--- a/libavcodec/allcodecs.c
|
||||
++++ b/libavcodec/allcodecs.c
|
||||
+@@ -512,6 +512,7 @@ void avcodec_register_all(void)
|
||||
+
|
||||
+ /* external libraries */
|
||||
+ REGISTER_DECODER(LIBCELT, libcelt);
|
||||
++ REGISTER_DECODER(LIBDCADEC, libdcadec)
|
||||
+ REGISTER_ENCODER(LIBFAAC, libfaac);
|
||||
+ REGISTER_ENCDEC (LIBFDK_AAC, libfdk_aac);
|
||||
+ REGISTER_ENCDEC (LIBGSM, libgsm);
|
||||
+diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c
|
||||
+new file mode 100644
|
||||
+index 0000000..d060db5
|
||||
+--- /dev/null
|
||||
++++ b/libavcodec/libdcadec.c
|
||||
+@@ -0,0 +1,197 @@
|
||||
++/*
|
||||
++ * libdcadec decoder wrapper
|
||||
++ * Copyright (C) 2015 Hendrik Leppkes
|
||||
++ *
|
||||
++ * This file is part of FFmpeg.
|
||||
++ *
|
||||
++ * FFmpeg is free software; you can redistribute it and/or
|
||||
++ * modify it under the terms of the GNU Lesser General Public
|
||||
++ * License as published by the Free Software Foundation; either
|
||||
++ * version 2.1 of the License, or (at your option) any later version.
|
||||
++ *
|
||||
++ * FFmpeg is distributed in the hope that it will be useful,
|
||||
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
++ * Lesser General Public License for more details.
|
||||
++ *
|
||||
++ * You should have received a copy of the GNU Lesser General Public
|
||||
++ * License along with FFmpeg; if not, write to the Free Software
|
||||
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
++ */
|
||||
++
|
||||
++#include <dca_context.h>
|
||||
++
|
||||
++#include "libavutil/avassert.h"
|
||||
++#include "libavutil/channel_layout.h"
|
||||
++#include "libavutil/common.h"
|
||||
++#include "libavutil/opt.h"
|
||||
++#include "avcodec.h"
|
||||
++#include "dca.h"
|
||||
++#include "dca_syncwords.h"
|
||||
++#include "internal.h"
|
||||
++
|
||||
++typedef struct DCADecContext {
|
||||
++ struct dcadec_context *ctx;
|
||||
++ uint8_t *buffer;
|
||||
++ int buffer_size;
|
||||
++} DCADecContext;
|
||||
++
|
||||
++static int dcadec_decode_frame(AVCodecContext *avctx, void *data,
|
||||
++ int *got_frame_ptr, AVPacket *avpkt)
|
||||
++{
|
||||
++ DCADecContext *s = avctx->priv_data;
|
||||
++ AVFrame *frame = data;
|
||||
++ int ret, i, k;
|
||||
++ int **samples, nsamples, channel_mask, sample_rate, bits_per_sample, profile;
|
||||
++ uint32_t mrk;
|
||||
++ uint8_t *input = avpkt->data;
|
||||
++ int input_size = avpkt->size;
|
||||
++
|
||||
++ /* convert bytestream syntax to RAW BE format if required */
|
||||
++ mrk = AV_RB32(input);
|
||||
++ if (mrk != DCA_SYNCWORD_CORE_BE && mrk != DCA_SYNCWORD_SUBSTREAM) {
|
||||
++ s->buffer = av_fast_realloc(s->buffer, &s->buffer_size, avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
++ if (!s->buffer)
|
||||
++ return AVERROR(ENOMEM);
|
||||
++
|
||||
++ if ((ret = avpriv_dca_convert_bitstream(avpkt->data, avpkt->size, s->buffer, s->buffer_size)) < 0)
|
||||
++ return ret;
|
||||
++
|
||||
++ input = s->buffer;
|
||||
++ input_size = ret;
|
||||
++ }
|
||||
++
|
||||
++ if ((ret = dcadec_context_parse(s->ctx, input, input_size)) < 0) {
|
||||
++ av_log(avctx, AV_LOG_ERROR, "dcadec_context_parse() failed: %d (%s)\n", -ret, dcadec_strerror(ret));
|
||||
++ return AVERROR_EXTERNAL;
|
||||
++ }
|
||||
++ if ((ret = dcadec_context_filter(s->ctx, &samples, &nsamples, &channel_mask,
|
||||
++ &sample_rate, &bits_per_sample, &profile)) < 0) {
|
||||
++ av_log(avctx, AV_LOG_ERROR, "dcadec_context_filter() failed: %d (%s)\n", -ret, dcadec_strerror(ret));
|
||||
++ return AVERROR_EXTERNAL;
|
||||
++ }
|
||||
++
|
||||
++ avctx->channels = av_get_channel_layout_nb_channels(channel_mask);
|
||||
++ avctx->channel_layout = channel_mask;
|
||||
++ avctx->sample_rate = sample_rate;
|
||||
++
|
||||
++ av_assert0(bits_per_sample >= 16 && bits_per_sample <= 24);
|
||||
++ if (bits_per_sample == 16)
|
||||
++ avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
|
||||
++ else
|
||||
++ avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
|
||||
++
|
||||
++ avctx->bits_per_raw_sample = bits_per_sample;
|
||||
++
|
||||
++ switch (profile) {
|
||||
++ case DCADEC_PROFILE_DS:
|
||||
++ avctx->profile = FF_PROFILE_DTS;
|
||||
++ break;
|
||||
++ case DCADEC_PROFILE_DS_96_24:
|
||||
++ avctx->profile = FF_PROFILE_DTS_96_24;
|
||||
++ break;
|
||||
++ case DCADEC_PROFILE_DS_ES:
|
||||
++ avctx->profile = FF_PROFILE_DTS_ES;
|
||||
++ break;
|
||||
++ case DCADEC_PROFILE_HD_HRA:
|
||||
++ avctx->profile = FF_PROFILE_DTS_HD_HRA;
|
||||
++ break;
|
||||
++ case DCADEC_PROFILE_HD_MA:
|
||||
++ avctx->profile = FF_PROFILE_DTS_HD_MA;
|
||||
++ break;
|
||||
++ case DCADEC_PROFILE_EXPRESS:
|
||||
++ avctx->profile = FF_PROFILE_DTS_EXPRESS;
|
||||
++ break;
|
||||
++ case DCADEC_PROFILE_UNKNOWN:
|
||||
++ default:
|
||||
++ avctx->profile = FF_PROFILE_UNKNOWN;
|
||||
++ break;
|
||||
++ }
|
||||
++
|
||||
++ /* bitrate is only meaningful if there are no HD extensions, as they distort the bitrate */
|
||||
++ if (profile == DCADEC_PROFILE_DS || profile == DCADEC_PROFILE_DS_96_24 || profile == DCADEC_PROFILE_DS_ES) {
|
||||
++ struct dcadec_core_info *info = dcadec_context_get_core_info(s->ctx);
|
||||
++ avctx->bit_rate = info->bit_rate;
|
||||
++ dcadec_context_free_core_info(info);
|
||||
++ } else
|
||||
++ avctx->bit_rate = 0;
|
||||
++
|
||||
++ frame->nb_samples = nsamples;
|
||||
++ if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
|
||||
++ return ret;
|
||||
++
|
||||
++ for (i = 0; i < avctx->channels; i++) {
|
||||
++ if (frame->format == AV_SAMPLE_FMT_S16P) {
|
||||
++ int16_t *plane = (int16_t *)frame->extended_data[i];
|
||||
++ for (k = 0; k < nsamples; k++)
|
||||
++ plane[k] = samples[i][k];
|
||||
++ } else {
|
||||
++ int32_t *plane = (int32_t *)frame->extended_data[i];
|
||||
++ int shift = 32 - bits_per_sample;
|
||||
++ for (k = 0; k < nsamples; k++)
|
||||
++ plane[k] = samples[i][k] << shift;
|
||||
++ }
|
||||
++ }
|
||||
++
|
||||
++ *got_frame_ptr = 1;
|
||||
++
|
||||
++ return avpkt->size;
|
||||
++}
|
||||
++
|
||||
++static av_cold void dcadec_flush(AVCodecContext *avctx)
|
||||
++{
|
||||
++ DCADecContext *s = avctx->priv_data;
|
||||
++ dcadec_context_clear(s->ctx);
|
||||
++}
|
||||
++
|
||||
++static av_cold int dcadec_close(AVCodecContext *avctx)
|
||||
++{
|
||||
++ DCADecContext *s = avctx->priv_data;
|
||||
++
|
||||
++ dcadec_context_destroy(s->ctx);
|
||||
++ s->ctx = NULL;
|
||||
++
|
||||
++ av_freep(&s->buffer);
|
||||
++
|
||||
++ return 0;
|
||||
++}
|
||||
++
|
||||
++static av_cold int dcadec_init(AVCodecContext *avctx)
|
||||
++{
|
||||
++ DCADecContext *s = avctx->priv_data;
|
||||
++
|
||||
++ s->ctx = dcadec_context_create(0);
|
||||
++ if (!s->ctx)
|
||||
++ return AVERROR(ENOMEM);
|
||||
++
|
||||
++ avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
|
||||
++ avctx->bits_per_raw_sample = 24;
|
||||
++
|
||||
++ return 0;
|
||||
++}
|
||||
++
|
||||
++static const AVProfile profiles[] = {
|
||||
++ { FF_PROFILE_DTS, "DTS" },
|
||||
++ { FF_PROFILE_DTS_ES, "DTS-ES" },
|
||||
++ { FF_PROFILE_DTS_96_24, "DTS 96/24" },
|
||||
++ { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
|
||||
++ { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
|
||||
++ { FF_PROFILE_DTS_EXPRESS, "DTS Express" },
|
||||
++ { FF_PROFILE_UNKNOWN },
|
||||
++};
|
||||
++
|
||||
++AVCodec ff_libdcadec_decoder = {
|
||||
++ .name = "libdcadec",
|
||||
++ .long_name = NULL_IF_CONFIG_SMALL("dcadec DCA decoder"),
|
||||
++ .type = AVMEDIA_TYPE_AUDIO,
|
||||
++ .id = AV_CODEC_ID_DTS,
|
||||
++ .priv_data_size = sizeof(DCADecContext),
|
||||
++ .init = dcadec_init,
|
||||
++ .decode = dcadec_decode_frame,
|
||||
++ .close = dcadec_close,
|
||||
++ .flush = dcadec_flush,
|
||||
++ .capabilities = CODEC_CAP_DR1 | CODEC_CAP_CHANNEL_CONF,
|
||||
++ .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_S16P,
|
||||
++ AV_SAMPLE_FMT_NONE },
|
||||
++ .profiles = NULL_IF_CONFIG_SMALL(profiles),
|
||||
++};
|
||||
+--
|
||||
+1.9.1
|
||||
+
|
||||
diff --git a/tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch b/tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch
|
||||
new file mode 100644
|
||||
index 0000000..b4db15d
|
||||
--- /dev/null
|
||||
+++ b/tools/depends/target/ffmpeg/0002-avcodec-Fix-libdcadec-include-dir.patch
|
||||
@@ -0,0 +1,40 @@
|
||||
+From 4f3c31df3f569c7171ee9e651ddf479690367b9b Mon Sep 17 00:00:00 2001
|
||||
+From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <kasper93@gmail.com>
|
||||
+Date: Fri, 20 Mar 2015 01:58:25 +0100
|
||||
+Subject: [PATCH] avcodec: Fix libdcadec include dir
|
||||
+
|
||||
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
|
||||
+---
|
||||
+ configure | 2 +-
|
||||
+ libavcodec/libdcadec.c | 2 +-
|
||||
+ 2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
+
|
||||
+diff --git a/configure b/configure
|
||||
+index a449bc7..1ef83e3 100755
|
||||
+--- a/configure
|
||||
++++ b/configure
|
||||
+@@ -4925,7 +4925,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
|
||||
+ { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
|
||||
+ die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
|
||||
+ enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
|
||||
+-enabled libdcadec && require libdcadec dca_context.h dcadec_context_create -ldcadec
|
||||
++enabled libdcadec && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
|
||||
+ enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
|
||||
+ enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
|
||||
+ flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
|
||||
+diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c
|
||||
+index d060db5..a28b983 100644
|
||||
+--- a/libavcodec/libdcadec.c
|
||||
++++ b/libavcodec/libdcadec.c
|
||||
+@@ -19,7 +19,7 @@
|
||||
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
+ */
|
||||
+
|
||||
+-#include <dca_context.h>
|
||||
++#include <libdcadec/dca_context.h>
|
||||
+
|
||||
+ #include "libavutil/avassert.h"
|
||||
+ #include "libavutil/channel_layout.h"
|
||||
+--
|
||||
+1.9.1
|
||||
+
|
||||
diff --git a/tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch b/tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch
|
||||
new file mode 100644
|
||||
index 0000000..1550538
|
||||
--- /dev/null
|
||||
+++ b/tools/depends/target/ffmpeg/0003-avcodec-add-profile-define-for-DTS-Express.patch
|
||||
@@ -0,0 +1,25 @@
|
||||
+From 11fe56c8bbf39cd0c3edbf0cd404dea400ff7e0c Mon Sep 17 00:00:00 2001
|
||||
+From: Hendrik Leppkes <h.leppkes@gmail.com>
|
||||
+Date: Thu, 19 Mar 2015 23:45:39 +0100
|
||||
+Subject: [PATCH] avcodec: add profile define for DTS Express
|
||||
+
|
||||
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
|
||||
+---
|
||||
+ libavcodec/avcodec.h | 1 +
|
||||
+ 1 file changed, 1 insertion(+)
|
||||
+
|
||||
+diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
|
||||
+index cdc8aa1..48e212f 100644
|
||||
+--- a/libavcodec/avcodec.h
|
||||
++++ b/libavcodec/avcodec.h
|
||||
+@@ -2851,6 +2851,7 @@ typedef struct AVCodecContext {
|
||||
+ #define FF_PROFILE_DTS_96_24 40
|
||||
+ #define FF_PROFILE_DTS_HD_HRA 50
|
||||
+ #define FF_PROFILE_DTS_HD_MA 60
|
||||
++#define FF_PROFILE_DTS_EXPRESS 70
|
||||
+
|
||||
+ #define FF_PROFILE_MPEG2_422 0
|
||||
+ #define FF_PROFILE_MPEG2_HIGH 1
|
||||
+--
|
||||
+1.9.1
|
||||
+
|
||||
diff --git a/tools/depends/target/ffmpeg/Makefile b/tools/depends/target/ffmpeg/Makefile
|
||||
index 711182f..24480b2 100644
|
||||
--- a/tools/depends/target/ffmpeg/Makefile
|
||||
+++ b/tools/depends/target/ffmpeg/Makefile
|
||||
@@ -1,6 +1,7 @@
|
||||
include ../../Makefile.include
|
||||
include FFMPEG-VERSION
|
||||
-DEPS= ../../Makefile.include FFMPEG-VERSION Makefile
|
||||
+DEPS= ../../Makefile.include FFMPEG-VERSION Makefile \
|
||||
+ 0001-avcodec-add-libdcadec-decoder.patch 0002-avcodec-Fix-libdcadec-include-dir.patch 0003-avcodec-add-profile-define-for-DTS-Express.patch
|
||||
|
||||
# set to "yes" to enable patching
|
||||
# we don't apply patches until we move to a vanilla ffmpeg tarball
|
||||
@@ -55,6 +56,7 @@ endif
|
||||
ifeq ($(Configuration), Release)
|
||||
ffmpg_config += --disable-debug
|
||||
endif
|
||||
+ffmpg_config += --enable-libdcadec --disable-decoder=dca
|
||||
|
||||
|
||||
CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
|
||||
@@ -68,6 +70,9 @@ $(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
|
||||
rm -rf $(PLATFORM); mkdir -p $(PLATFORM)
|
||||
cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
|
||||
cd $(PLATFORM); sed -i".bak" -e "s%pkg_config_default=pkg-config%export PKG_CONFIG_LIBDIR=$(PREFIX)/lib/pkgconfig \&\& pkg_config_default=$(NATIVEPREFIX)/bin/pkg-config%" configure
|
||||
+ cd $(PLATFORM); patch -p1 < ../0001-avcodec-add-libdcadec-decoder.patch
|
||||
+ cd $(PLATFORM); patch -p1 < ../0002-avcodec-Fix-libdcadec-include-dir.patch
|
||||
+ cd $(PLATFORM); patch -p1 < ../0003-avcodec-add-profile-define-for-DTS-Express.patch
|
||||
cd $(PLATFORM);\
|
||||
CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \
|
||||
./configure $(ffmpg_config)
|
||||
diff --git a/tools/depends/target/libdcadec/Makefile b/tools/depends/target/libdcadec/Makefile
|
||||
new file mode 100644
|
||||
index 0000000..e68ec46
|
||||
--- /dev/null
|
||||
+++ b/tools/depends/target/libdcadec/Makefile
|
||||
@@ -0,0 +1,38 @@
|
||||
+include ../../Makefile.include
|
||||
+DEPS= ../../Makefile.include Makefile
|
||||
+
|
||||
+# lib name, version
|
||||
+LIBNAME=dcadec
|
||||
+ARCHIVE=master.tar.gz
|
||||
+BASE_URL=https://github.com/foo86/dcadec/archive
|
||||
+
|
||||
+# configuration settings
|
||||
+
|
||||
+LIBDYLIB=$(PLATFORM)/.libs/lib$(LIBNAME).a
|
||||
+
|
||||
+CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
|
||||
+
|
||||
+CFLAGS += -std=gnu99
|
||||
+
|
||||
+all: $(LIBDYLIB) .installed-$(PLATFORM)
|
||||
+
|
||||
+$(TARBALLS_LOCATION)/$(ARCHIVE):
|
||||
+ cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
|
||||
+
|
||||
+$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
|
||||
+ rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
|
||||
+ cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
|
||||
+
|
||||
+$(LIBDYLIB): $(PLATFORM)
|
||||
+ $(MAKE) -C $(PLATFORM) PREFIX=$(PREFIX) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" AR="$(AR)"
|
||||
+
|
||||
+.installed-$(PLATFORM): $(LIBDYLIB)
|
||||
+ $(MAKE) -C $(PLATFORM) PREFIX=$(PREFIX) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" AR="$(AR)" install
|
||||
+ touch $@
|
||||
+
|
||||
+clean:
|
||||
+ $(MAKE) -C $(PLATFORM) clean
|
||||
+ rm -f .installed-$(PLATFORM)
|
||||
+
|
||||
+distclean::
|
||||
+ rm -rf $(PLATFORM) .installed-$(PLATFORM)
|
||||
|
||||
From bdf128de10eb980a68d8382df8f8621a61e020d1 Mon Sep 17 00:00:00 2001
|
||||
From: fritsch <peter.fruehberger@gmail.com>
|
||||
Date: Mon, 23 Mar 2015 22:33:04 +0000
|
||||
Subject: [PATCH 2/6] [dcadec] Add settings option to enable libdcadec
|
||||
|
||||
---
|
||||
addons/resource.language.en_gb/resources/strings.po | 10 ++++++++++
|
||||
system/settings/imx6.xml | 20 ++++++++++++++++++++
|
||||
system/settings/rbp.xml | 5 +++++
|
||||
system/settings/rbp2.xml | 5 +++++
|
||||
tools/depends/target/ffmpeg/Makefile | 2 +-
|
||||
.../DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp | 14 ++++++++++++--
|
||||
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 15 +++++++++++++++
|
||||
xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp | 10 ++++++++--
|
||||
8 files changed, 76 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po
|
||||
index 6a6f0a3..3ab966d 100644
|
||||
--- a/addons/resource.language.en_gb/resources/strings.po
|
||||
+++ b/addons/resource.language.en_gb/resources/strings.po
|
||||
@@ -16541,3 +16541,13 @@ msgstr ""
|
||||
msgctxt "#38016"
|
||||
msgid "%d fps"
|
||||
msgstr ""
|
||||
+
|
||||
+#: system/settings/rbp.xml system/settings/imx6.xml
|
||||
+msgctxt "#38120"
|
||||
+msgid "Support 8 channel DTS-HD audio decoding"
|
||||
+msgstr ""
|
||||
+
|
||||
+#: system/settings/rbp.xml system/settings/imx6.xml
|
||||
+msgctxt "#38121"
|
||||
+msgid "Enables decoding of high quality DTS-HD audio streams. Note: This increases CPU load and is only available when DTS and DTS-HD audio passthrough are disabled."
|
||||
+msgstr ""
|
||||
diff --git a/system/settings/imx6.xml b/system/settings/imx6.xml
|
||||
index d8b17c3..bdb5eb8 100644
|
||||
--- a/system/settings/imx6.xml
|
||||
+++ b/system/settings/imx6.xml
|
||||
@@ -13,6 +13,26 @@
|
||||
</setting>
|
||||
</group>
|
||||
</category>
|
||||
+ <category id="audiooutput">
|
||||
+ <group id="1">
|
||||
+ <setting id="audiooutput.supportdtshdcpudecoding" type="boolean" label="38120" help="38121">
|
||||
+ <level>2</level>
|
||||
+ <default>false</default>
|
||||
+ <control type="toggle" />
|
||||
+ <dependencies>
|
||||
+ <dependency type="enable">
|
||||
+ <or>
|
||||
+ <condition setting="audiooutput.passthrough" operator="is">false</condition>
|
||||
+ <and>
|
||||
+ <condition setting="audiooutput.dtshdpassthrough" operator="is">false</condition>
|
||||
+ <condition setting="audiooutput.dtspassthrough" operator="is">false</condition>
|
||||
+ </and>
|
||||
+ </or>
|
||||
+ </dependency>
|
||||
+ </dependencies>
|
||||
+ </setting>
|
||||
+ </group>
|
||||
+ </category>
|
||||
</section>
|
||||
<section id="videos">
|
||||
<category id="videoacceleration">
|
||||
diff --git a/system/settings/rbp.xml b/system/settings/rbp.xml
|
||||
index 50fe36a..52703e9 100644
|
||||
--- a/system/settings/rbp.xml
|
||||
+++ b/system/settings/rbp.xml
|
||||
@@ -76,6 +76,11 @@
|
||||
<setting id="audiooutput.processquality">
|
||||
<default>101</default> <!-- AE_QUALITY_GPU -->
|
||||
</setting>
|
||||
+ <setting id="audiooutput.supportdtshdcpudecoding" type="boolean" label="38120" help="38121">
|
||||
+ <level>2</level>
|
||||
+ <default>false</default>
|
||||
+ <control type="toggle" />
|
||||
+ </setting>
|
||||
</group>
|
||||
<group id="3">
|
||||
<setting id="audiooutput.ac3transcode" help="37024">
|
||||
diff --git a/system/settings/rbp2.xml b/system/settings/rbp2.xml
|
||||
index 8cc8f19..b29a428 100644
|
||||
--- a/system/settings/rbp2.xml
|
||||
+++ b/system/settings/rbp2.xml
|
||||
@@ -19,6 +19,11 @@
|
||||
</group>
|
||||
</category>
|
||||
<category id="audiooutput">
|
||||
+ <group id="1">
|
||||
+ <setting id="audiooutput.supportdtshdcpudecoding">
|
||||
+ <default>true</default>
|
||||
+ </setting>
|
||||
+ </group>
|
||||
<group id="3">
|
||||
<setting id="audiooutput.ac3transcode" help="36429">
|
||||
</setting>
|
||||
diff --git a/tools/depends/target/ffmpeg/Makefile b/tools/depends/target/ffmpeg/Makefile
|
||||
index 24480b2..1e20602 100644
|
||||
--- a/tools/depends/target/ffmpeg/Makefile
|
||||
+++ b/tools/depends/target/ffmpeg/Makefile
|
||||
@@ -56,7 +56,7 @@ endif
|
||||
ifeq ($(Configuration), Release)
|
||||
ffmpg_config += --disable-debug
|
||||
endif
|
||||
-ffmpg_config += --enable-libdcadec --disable-decoder=dca
|
||||
+ffmpg_config += --enable-libdcadec
|
||||
|
||||
|
||||
CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
|
||||
index 991449b..e6553dd 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
|
||||
@@ -33,6 +33,7 @@ extern "C" {
|
||||
#include "settings/Settings.h"
|
||||
#include "cores/AudioEngine/Utils/AEUtil.h"
|
||||
#endif
|
||||
+#include "settings/Settings.h"
|
||||
|
||||
CDVDAudioCodecFFmpeg::CDVDAudioCodecFFmpeg() : CDVDAudioCodec()
|
||||
{
|
||||
@@ -54,10 +55,19 @@ CDVDAudioCodecFFmpeg::~CDVDAudioCodecFFmpeg()
|
||||
|
||||
bool CDVDAudioCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
|
||||
{
|
||||
- AVCodec* pCodec;
|
||||
+ AVCodec* pCodec = NULL;
|
||||
m_bOpenedCodec = false;
|
||||
|
||||
- pCodec = avcodec_find_decoder(hints.codec);
|
||||
+ bool allow_dtshd_decoding = true;
|
||||
+#if defined(TARGET_RASPBERRY_PI) || defined(HAS_IMXVPU) || defined(HAS_LIBAMCODEC)
|
||||
+ allow_dtshd_decoding = CSettings::Get().GetBool("audiooutput.supportdtshdcpudecoding");
|
||||
+#endif
|
||||
+ if (hints.codec == AV_CODEC_ID_DTS && allow_dtshd_decoding)
|
||||
+ pCodec = avcodec_find_decoder_by_name("libdcadec");
|
||||
+
|
||||
+ if (!pCodec)
|
||||
+ pCodec = avcodec_find_decoder(hints.codec);
|
||||
+
|
||||
if (!pCodec)
|
||||
{
|
||||
CLog::Log(LOGDEBUG,"CDVDAudioCodecFFmpeg::Open() Unable to find codec %d", hints.codec);
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
index 74ff31f..6a97135 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
@@ -439,6 +439,21 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo, bool filein
|
||||
|
||||
if (m_streaminfo)
|
||||
{
|
||||
+#if defined(TARGET_RASPBERRY_PI) || defined(HAS_IMXVPU) || defined(HAS_LIBAMCODEC)
|
||||
+ if (CSettings::Get().GetBool("audiooutput.supportdtshdcpudecoding"))
|
||||
+#endif
|
||||
+ {
|
||||
+ for (unsigned int i = 0; i < m_pFormatContext->nb_streams; i++)
|
||||
+ {
|
||||
+ AVStream *st = m_pFormatContext->streams[i];
|
||||
+ if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && st->codec->codec_id == AV_CODEC_ID_DTS)
|
||||
+ {
|
||||
+ AVCodec* pCodec = avcodec_find_decoder_by_name("libdcadec");
|
||||
+ if (pCodec)
|
||||
+ st->codec->codec = pCodec;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
/* to speed up dvd switches, only analyse very short */
|
||||
if(m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD))
|
||||
av_opt_set_int(m_pFormatContext, "analyzeduration", 500000, 0);
|
||||
diff --git a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp
|
||||
index 1a920f7..075f728 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#include "cores/AudioEngine/Utils/AEUtil.h"
|
||||
#include "cores/AudioEngine/AEFactory.h"
|
||||
+#include "settings/Settings.h"
|
||||
|
||||
// the size of the audio_render output port buffers
|
||||
#define AUDIO_DECODE_OUTPUT_BUFFER (32*1024)
|
||||
@@ -62,10 +63,15 @@ COMXAudioCodecOMX::~COMXAudioCodecOMX()
|
||||
|
||||
bool COMXAudioCodecOMX::Open(CDVDStreamInfo &hints)
|
||||
{
|
||||
- AVCodec* pCodec;
|
||||
+ AVCodec* pCodec = NULL;
|
||||
m_bOpenedCodec = false;
|
||||
|
||||
- pCodec = avcodec_find_decoder(hints.codec);
|
||||
+ if (hints.codec == AV_CODEC_ID_DTS && CSettings::Get().GetBool("audiooutput.supportdtshdcpudecoding"))
|
||||
+ pCodec = avcodec_find_decoder_by_name("libdcadec");
|
||||
+
|
||||
+ if (!pCodec)
|
||||
+ pCodec = avcodec_find_decoder(hints.codec);
|
||||
+
|
||||
if (!pCodec)
|
||||
{
|
||||
CLog::Log(LOGDEBUG,"COMXAudioCodecOMX::Open() Unable to find codec %d", hints.codec);
|
||||
|
||||
From 61fac1c7999532e4595ef9101c83074937dddabb Mon Sep 17 00:00:00 2001
|
||||
From: wsnipex <wsnipex@a1.net>
|
||||
Date: Wed, 13 May 2015 20:00:31 +0200
|
||||
Subject: [PATCH 3/6] [configure] use pkg-config to detect dcadec
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ad9ae6d..600325a 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1088,7 +1088,7 @@ AC_CHECK_HEADER([mpeg2dec/mpeg2convert.h],, AC_MSG_ERROR($missing_library),
|
||||
AC_CHECK_HEADER([jpeglib.h],, AC_MSG_ERROR($missing_library))
|
||||
AC_CHECK_HEADER([ogg/ogg.h],, AC_MSG_ERROR($missing_library))
|
||||
AC_CHECK_HEADER([vorbis/vorbisfile.h],, AC_MSG_ERROR($missing_library))
|
||||
-AC_CHECK_HEADER([libdcadec/dca_context.h],, AC_MSG_ERROR($missing_library))
|
||||
+PKG_CHECK_MODULES([LIBDCADEC], [dcadec],, AC_MSG_ERROR([libdcadec not found]))
|
||||
|
||||
PKG_CHECK_MODULES([LIBCURL], [libcurl],, AC_MSG_ERROR([libcurl not found]))
|
||||
XB_FIND_SONAME([CURL], [curl])
|
||||
|
||||
From 035084e5c09555005aa045f67a282cecceb98900 Mon Sep 17 00:00:00 2001
|
||||
From: wsnipex <wsnipex@a1.net>
|
||||
Date: Wed, 13 May 2015 20:02:38 +0200
|
||||
Subject: [PATCH 4/6] [ffmpeg] enabled dcadec for linux standalone builds
|
||||
|
||||
---
|
||||
tools/depends/target/ffmpeg/autobuild.sh | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/tools/depends/target/ffmpeg/autobuild.sh b/tools/depends/target/ffmpeg/autobuild.sh
|
||||
index 196c347..b9bfd57 100755
|
||||
--- a/tools/depends/target/ffmpeg/autobuild.sh
|
||||
+++ b/tools/depends/target/ffmpeg/autobuild.sh
|
||||
@@ -159,6 +159,7 @@ CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" \
|
||||
--disable-mips32r2 \
|
||||
--disable-mipsdspr1 \
|
||||
--disable-mipsdspr2 \
|
||||
+ --enable-libdcadec \
|
||||
${FLAGS}
|
||||
|
||||
make -j ${BUILDTHREADS}
|
||||
|
||||
From d89c29002ab09708540055f214823836e2c74c00 Mon Sep 17 00:00:00 2001
|
||||
From: wsnipex <wsnipex@a1.net>
|
||||
Date: Wed, 13 May 2015 20:12:31 +0200
|
||||
Subject: [PATCH 5/6] [depends] use a tarball from mirrors for dcadec
|
||||
|
||||
---
|
||||
tools/depends/target/libdcadec/Makefile | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tools/depends/target/libdcadec/Makefile b/tools/depends/target/libdcadec/Makefile
|
||||
index e68ec46..4c98063 100644
|
||||
--- a/tools/depends/target/libdcadec/Makefile
|
||||
+++ b/tools/depends/target/libdcadec/Makefile
|
||||
@@ -2,9 +2,10 @@ include ../../Makefile.include
|
||||
DEPS= ../../Makefile.include Makefile
|
||||
|
||||
# lib name, version
|
||||
-LIBNAME=dcadec
|
||||
-ARCHIVE=master.tar.gz
|
||||
-BASE_URL=https://github.com/foo86/dcadec/archive
|
||||
+LIBNAME=libdcadec
|
||||
+VERSION=git-396e75652
|
||||
+SOURCE=$(LIBNAME)-$(VERSION)
|
||||
+ARCHIVE=$(SOURCE).tar.gz
|
||||
|
||||
# configuration settings
|
||||
|
||||
|
||||
From faceb91945a9064e26c55c83d9944d20f538da0d Mon Sep 17 00:00:00 2001
|
||||
From: wsnipex <wsnipex@a1.net>
|
||||
Date: Wed, 13 May 2015 20:18:09 +0200
|
||||
Subject: [PATCH 6/6] [docs] add dcadec to linux README
|
||||
|
||||
---
|
||||
docs/README.linux | 2 +-
|
||||
docs/README.ubuntu | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/docs/README.linux b/docs/README.linux
|
||||
index ee64baf..732d606 100644
|
||||
--- a/docs/README.linux
|
||||
+++ b/docs/README.linux
|
||||
@@ -44,7 +44,7 @@ that are used to build Kodi packages on Debian/Ubuntu (with all supported
|
||||
external libraries enabled).
|
||||
|
||||
Build-Depends: autoconf, automake, autopoint, autotools-dev, cmake, curl,
|
||||
- debhelper (>= 7.0.50~), default-jre, gawk, gperf, libao-dev, libasound2-dev,
|
||||
+ dcadec-dev, default-jre, gawk, gperf, libao-dev, libasound2-dev,
|
||||
libass-dev (>= 0.9.8), libavahi-client-dev, libavahi-common-dev, libbluetooth-dev,
|
||||
libbluray-dev, libboost-dev, libboost-thread-dev, libbz2-dev, libcap-dev, libcdio-dev,
|
||||
libcec-dev, libcurl4-gnutls-dev | libcurl4-openssl-dev | libcurl-dev, libcwiid-dev,
|
||||
diff --git a/docs/README.ubuntu b/docs/README.ubuntu
|
||||
index 10f1611..0369f83 100644
|
||||
--- a/docs/README.ubuntu
|
||||
+++ b/docs/README.ubuntu
|
||||
@@ -82,7 +82,7 @@ Tip: For those with multiple computers at home is to try out distcc
|
||||
|
||||
For Ubuntu (all versions >= 7.04):
|
||||
|
||||
- $ sudo apt-get install automake bison build-essential cmake curl cvs default-jre fp-compiler gawk gdc gettext git-core gperf libasound2-dev libass-dev libboost-dev libboost-thread-dev libbz2-dev libcap-dev libcdio-dev libcurl3 libcurl4-gnutls-dev libdbus-1-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libgif-dev libglew-dev libiso9660-dev libjasper-dev libjpeg-dev liblzo2-dev libmicrohttpd-dev libmodplug-dev libmpeg2-4-dev libmpeg3-dev libmysqlclient-dev libnfs-dev libogg-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsdl2-dev libsmbclient-dev libsqlite3-dev libssh-dev libssl-dev libtiff-dev libtinyxml-dev libtool libudev-dev libusb-dev libva-dev libvdpau-dev libvorbis-dev libvorbisenc2 libxml2-dev libxmu-dev libxrandr-dev libxrender-dev libxslt1-dev libxt-dev libyajl-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite swig unzip yasm zip zlib1g-dev
|
||||
+ $ sudo apt-get install automake bison build-essential cmake curl cvs dcadec-dev default-jre fp-compiler gawk gdc gettext git-core gperf libasound2-dev libass-dev libboost-dev libboost-thread-dev libbz2-dev libcap-dev libcdio-dev libcurl3 libcurl4-gnutls-dev libdbus-1-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libgif-dev libglew-dev libiso9660-dev libjasper-dev libjpeg-dev liblzo2-dev libmicrohttpd-dev libmodplug-dev libmpeg2-4-dev libmpeg3-dev libmysqlclient-dev libnfs-dev libogg-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsdl2-dev libsmbclient-dev libsqlite3-dev libssh-dev libssl-dev libtiff-dev libtinyxml-dev libtool libudev-dev libusb-dev libva-dev libvdpau-dev libvorbis-dev libvorbisenc2 libxml2-dev libxmu-dev libxrandr-dev libxrender-dev libxslt1-dev libxt-dev libyajl-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite swig unzip yasm zip zlib1g-dev
|
||||
|
||||
For >= 10.10:
|
||||
$ sudo apt-get install autopoint libltdl-dev
|
Loading…
x
Reference in New Issue
Block a user