kodi: add patch to support dcadec

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2015-04-27 15:59:32 +02:00
parent 02ffc575de
commit 75dd5a44fd

View File

@ -0,0 +1,131 @@
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
index 42d4da7..5a9bb6b 100644
--- a/system/settings/rbp.xml
+++ b/system/settings/rbp.xml
@@ -47,6 +47,11 @@
<default>true</default>
<control type="toggle" />
</setting>
+ <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">
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);