-
Notifications
You must be signed in to change notification settings - Fork 888
/
kodi-995.01-add-dcadec-support.patch
132 lines (124 loc) · 5.14 KB
/
kodi-995.01-add-dcadec-support.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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);