Merge pull request #3556 from Montellese/jsonrpc_setmoviesetdetails
authorSascha Montellese <sascha.montellese@gmail.com>
Mon, 4 Nov 2013 21:37:10 +0000 (13:37 -0800)
committerSascha Montellese <sascha.montellese@gmail.com>
Mon, 4 Nov 2013 21:37:10 +0000 (13:37 -0800)
jsonrpc: add VideoLibrary.SetMovieSetDetails

19 files changed:
language/English/strings.po
system/settings/settings.xml
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h
xbmc/cores/AudioEngine/Utils/AERemap.cpp
xbmc/cores/omxplayer/OMXAudio.cpp
xbmc/cores/omxplayer/PCMRemap.cpp
xbmc/filesystem/File.cpp
xbmc/filesystem/LibraryDirectory.cpp
xbmc/guilib/GUIIncludes.cpp
xbmc/guilib/GUIWindow.cpp
xbmc/profiles/ProfilesManager.cpp
xbmc/profiles/ProfilesManager.h
xbmc/settings/Settings.cpp
xbmc/video/VideoDatabase.cpp

index bd391fc..5096061 100755 (executable)
@@ -1434,7 +1434,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#346"
-msgid "Boost volume level on downmix"
+msgid "Normalize levels on downmix"
 msgstr ""
 
 #: system/settings/settings.xml
@@ -14660,7 +14660,12 @@ msgctxt "#36532"
 msgid "Same as movie"
 msgstr ""
 
-#empty strings from id 36533 to 36534
+#: settings/DisplaySettings.cpp
+msgctxt "#36533"
+msgid "Select how audio is downmixed, for example from 5.1 to 2.0: [Enabled] maintains the dynamic range of the original audio source when downmixed however volume will be lower [Disabled] maintains volume level of the original audio source however the dynamic range is compressed. Note - Dynamic range is the difference between the quietest and loudest sounds in a audio source."
+msgstr ""
+
+#empty strings from id 36534 to 36534
 
 #: guilib/StereoscopicsManager.cpp
 #: xbmc/video/dialogs/GUIDialogVideoSettings.cpp
index f998480..00dce05 100644 (file)
           </dependencies>
           <control type="toggle" />
         </setting>
+        <setting id="audiooutput.normalizelevels" type="boolean" label="346" help="36533">
+          <level>2</level>
+          <default>true</default>
+        </setting>
         <setting id="audiooutput.processquality" type="integer" label="13505" help="36169">
           <requirement>HAS_AE_QUALITY_LEVELS</requirement>
           <level>2</level>
index 6494fab..7194945 100644 (file)
@@ -1004,7 +1004,7 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
       {
         (*it)->m_resampleBuffers = new CActiveAEBufferPoolResample((*it)->m_inputBuffers->m_format, outputFormat, m_settings.resampleQuality);
         (*it)->m_resampleBuffers->m_changeResampler = (*it)->m_forceResampler;
-        (*it)->m_resampleBuffers->Create(MAX_CACHE_LEVEL*1000, false, m_settings.stereoupmix);
+        (*it)->m_resampleBuffers->Create(MAX_CACHE_LEVEL*1000, false, m_settings.stereoupmix, m_settings.normalizelevels);
       }
       if (m_mode == MODE_TRANSCODE || m_streams.size() > 1)
         (*it)->m_resampleBuffers->m_fillPackets = true;
@@ -1240,14 +1240,22 @@ void CActiveAE::ChangeResamplers()
   std::list<CActiveAEStream*>::iterator it;
   for(it=m_streams.begin(); it!=m_streams.end(); ++it)
   {
+    bool normalize = true;
+    if (((*it)->m_resampleBuffers->m_format.m_channelLayout.Count() <
+         (*it)->m_resampleBuffers->m_inputFormat.m_channelLayout.Count()) &&
+         !m_settings.normalizelevels)
+      normalize = false;
+
     if ((*it)->m_resampleBuffers && (*it)->m_resampleBuffers->m_resampler &&
         (((*it)->m_resampleBuffers->m_resampleQuality != m_settings.resampleQuality) ||
-        ((*it)->m_resampleBuffers->m_stereoUpmix != m_settings.stereoupmix)))
+        (((*it)->m_resampleBuffers->m_stereoUpmix != m_settings.stereoupmix)) ||
+        ((*it)->m_resampleBuffers->m_normalize != normalize)))
     {
       (*it)->m_resampleBuffers->m_changeResampler = true;
     }
     (*it)->m_resampleBuffers->m_resampleQuality = m_settings.resampleQuality;
     (*it)->m_resampleBuffers->m_stereoUpmix = m_settings.stereoupmix;
+    (*it)->m_resampleBuffers->m_normalize = normalize;
   }
 }
 
@@ -1634,8 +1642,9 @@ bool CActiveAE::RunStages()
               fadingStep = delta / samples;
             }
 
-            // for stream amplification we need to run on a per sample basis
-            if ((*it)->m_amplify != 1.0)
+            // for streams amplification of turned off downmix normalization
+            // we need to run on a per sample basis
+            if ((*it)->m_amplify != 1.0 || !(*it)->m_resampleBuffers->m_normalize)
             {
               nb_floats = out->pkt->config.channels / out->pkt->planes;
               nb_loops = out->pkt->nb_samples;
@@ -1700,8 +1709,9 @@ bool CActiveAE::RunStages()
               fadingStep = delta / samples;
             }
 
-            // for stream amplification we need to run on a per sample basis
-            if ((*it)->m_amplify != 1.0)
+            // for streams amplification of turned off downmix normalization
+            // we need to run on a per sample basis
+            if ((*it)->m_amplify != 1.0 || !(*it)->m_resampleBuffers->m_normalize)
             {
               nb_floats = out->pkt->config.channels / out->pkt->planes;
               nb_loops = out->pkt->nb_samples;
@@ -1981,6 +1991,7 @@ void CActiveAE::LoadSettings()
   m_settings.samplerate = CSettings::Get().GetInt("audiooutput.samplerate");
 
   m_settings.stereoupmix = CSettings::Get().GetBool("audiooutput.stereoupmix");
+  m_settings.normalizelevels = CSettings::Get().GetBool("audiooutput.normalizelevels");
 
   m_settings.passthrough = m_settings.config == AE_CONFIG_FIXED ? false : CSettings::Get().GetBool("audiooutput.passthrough");
   m_settings.ac3passthrough = CSettings::Get().GetBool("audiooutput.ac3passthrough");
@@ -2057,7 +2068,8 @@ void CActiveAE::OnSettingsChange(const std::string& setting)
       setting == "audiooutput.streamsilence"     ||
       setting == "audiooutput.processquality"    ||
       setting == "audiooutput.passthrough"       ||
-      setting == "audiooutput.samplerate")
+      setting == "audiooutput.samplerate"        ||
+      setting == "audiooutput.normalizelevels")
   {
     m_controlPort.SendOutMessage(CActiveAEControlProtocol::RECONFIGURE);
   }
@@ -2438,6 +2450,7 @@ bool CActiveAE::ResampleSound(CActiveAESound *sound)
                   orig_config.fmt,
                   orig_config.bits_per_sample,
                   false,
+                  true,
                   NULL,
                   AE_QUALITY_MID);
 
index 0156593..2955bb8 100644 (file)
@@ -55,6 +55,7 @@ struct AudioSettings
   bool truehdpassthrough;
   bool dtshdpassthrough;
   bool stereoupmix;
+  bool normalizelevels;
   bool passthrough;
   int config;
   unsigned int samplerate;
index e64b248..b5daee6 100644 (file)
@@ -146,6 +146,7 @@ CActiveAEBufferPoolResample::CActiveAEBufferPoolResample(AEAudioFormat inputForm
   m_resampleQuality = quality;
   m_changeResampler = false;
   m_stereoUpmix = false;
+  m_normalize = true;
 }
 
 CActiveAEBufferPoolResample::~CActiveAEBufferPoolResample()
@@ -153,10 +154,15 @@ CActiveAEBufferPoolResample::~CActiveAEBufferPoolResample()
   delete m_resampler;
 }
 
-bool CActiveAEBufferPoolResample::Create(unsigned int totaltime, bool remap, bool upmix)
+bool CActiveAEBufferPoolResample::Create(unsigned int totaltime, bool remap, bool upmix, bool normalize)
 {
   CActiveAEBufferPool::Create(totaltime);
 
+  m_stereoUpmix = upmix;
+  m_normalize = true;
+  if ((m_format.m_channelLayout.Count() < m_inputFormat.m_channelLayout.Count() && !normalize))
+    m_normalize = false;
+
   if (m_inputFormat.m_channelLayout != m_format.m_channelLayout ||
       m_inputFormat.m_sampleRate != m_format.m_sampleRate ||
       m_inputFormat.m_dataFormat != m_format.m_dataFormat ||
@@ -174,11 +180,11 @@ bool CActiveAEBufferPoolResample::Create(unsigned int totaltime, bool remap, boo
                                 CActiveAEResample::GetAVSampleFormat(m_inputFormat.m_dataFormat),
                                 CAEUtil::DataFormatToUsedBits(m_inputFormat.m_dataFormat),
                                 upmix,
+                                m_normalize,
                                 remap ? &m_format.m_channelLayout : NULL,
                                 m_resampleQuality);
   }
 
-  m_stereoUpmix = upmix;
   m_changeResampler = false;
 
   return true;
@@ -200,6 +206,7 @@ void CActiveAEBufferPoolResample::ChangeResampler()
                                 CActiveAEResample::GetAVSampleFormat(m_inputFormat.m_dataFormat),
                                 CAEUtil::DataFormatToUsedBits(m_inputFormat.m_dataFormat),
                                 m_stereoUpmix,
+                                m_normalize,
                                 NULL,
                                 m_resampleQuality);
 
index fb1b197..8475918 100644 (file)
@@ -90,7 +90,7 @@ class CActiveAEBufferPoolResample : public CActiveAEBufferPool
 public:
   CActiveAEBufferPoolResample(AEAudioFormat inputFormat, AEAudioFormat outputFormat, AEQuality quality);
   virtual ~CActiveAEBufferPoolResample();
-  virtual bool Create(unsigned int totaltime, bool remap, bool upmix);
+  virtual bool Create(unsigned int totaltime, bool remap, bool upmix, bool normalize = true);
   void ChangeResampler();
   bool ResampleBuffers(unsigned int timestamp = 0);
   float GetDelay();
@@ -108,6 +108,7 @@ public:
   double m_resampleRatio;
   AEQuality m_resampleQuality;
   bool m_stereoUpmix;
+  bool m_normalize;
 };
 
 }
index 2c5f41b..e2e4aa5 100644 (file)
@@ -36,7 +36,7 @@ CActiveAEResample::~CActiveAEResample()
   m_dllSwResample.Unload();
 }
 
-bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst_rate, AVSampleFormat dst_fmt, int dst_bits, uint64_t src_chan_layout, int src_channels, int src_rate, AVSampleFormat src_fmt, int src_bits, bool upmix, CAEChannelInfo *remapLayout, AEQuality quality)
+bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst_rate, AVSampleFormat dst_fmt, int dst_bits, uint64_t src_chan_layout, int src_channels, int src_rate, AVSampleFormat src_fmt, int src_bits, bool upmix, bool normalize, CAEChannelInfo *remapLayout, AEQuality quality)
 {
   if (!m_dllAvUtil.Load() || !m_dllSwResample.Load())
     return false;
@@ -86,7 +86,7 @@ bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst
   // not required for sink stage (remapLayout == true)
   if ((m_dst_fmt == AV_SAMPLE_FMT_FLT || m_dst_fmt == AV_SAMPLE_FMT_FLTP) &&
       (m_src_fmt == AV_SAMPLE_FMT_FLT || m_src_fmt == AV_SAMPLE_FMT_FLTP) &&
-      !remapLayout)
+      !remapLayout && normalize)
   {
      m_dllAvUtil.av_opt_set_double(m_pContext, "rematrix_maxval", 1.0, 0);
   }
index 6fb39eb..792ff12 100644 (file)
@@ -34,7 +34,7 @@ class CActiveAEResample
 public:
   CActiveAEResample();
   virtual ~CActiveAEResample();
-  bool Init(uint64_t dst_chan_layout, int dst_channels, int dst_rate, AVSampleFormat dst_fmt, int dst_bits, uint64_t src_chan_layout, int src_channels, int src_rate, AVSampleFormat src_fmt, int src_bits, bool upmix, CAEChannelInfo *remapLayout, AEQuality quality);
+  bool Init(uint64_t dst_chan_layout, int dst_channels, int dst_rate, AVSampleFormat dst_fmt, int dst_bits, uint64_t src_chan_layout, int src_channels, int src_rate, AVSampleFormat src_fmt, int src_bits, bool upmix, bool normalize, CAEChannelInfo *remapLayout, AEQuality quality);
   int Resample(uint8_t **dst_buffer, int dst_samples, uint8_t **src_buffer, int src_samples, double ratio);
   int64_t GetDelay(int64_t base);
   int GetBufferedSamples();
index f99d52e..0f68c8d 100644 (file)
@@ -206,8 +206,7 @@ bool CAERemap::Initialize(CAEChannelInfo input, CAEChannelInfo output, bool fina
     normalize = true;
   else
   {
-    //FIXME: guisetting is reversed, change the setting name after frodo
-    normalize = !CSettings::Get().GetBool("audiooutput.normalizelevels");
+    normalize = CSettings::Get().GetBool("audiooutput.normalizelevels");
     CLog::Log(LOGDEBUG, "AERemap: Downmix normalization is %s", (normalize ? "enabled" : "disabled"));
   }
 
index a03d53b..e4d725d 100644 (file)
@@ -1087,6 +1087,10 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
 
 void COMXAudio::UpdateAttenuation()
 {
+  // always called with m_critSection lock held
+  if (!m_Initialized || m_Passthrough)
+    return;
+
   if (m_amplification == 1.0)
   {
     ApplyVolume();
index c0733c6..c643175 100644 (file)
@@ -364,7 +364,7 @@ void CPCMRemap::BuildMap()
   m_outStride = m_inSampleSize * m_outChannels;
 
   /* see if we need to normalize the levels */
-  bool dontnormalize = CSettings::Get().GetBool("audiooutput.normalizelevels");
+  bool dontnormalize = !CSettings::Get().GetBool("audiooutput.normalizelevels");
   CLog::Log(LOGDEBUG, "CPCMRemap: Downmix normalization is %s", (dontnormalize ? "disabled" : "enabled"));
 
   ResolveChannels();
index 357b8db..0973657 100644 (file)
@@ -402,6 +402,16 @@ bool CFile::Exists(const CStdString& strFileName, bool bUseCache /* = true */)
 
 int CFile::Stat(struct __stat64 *buffer)
 {
+  if (!buffer)
+    return -1;
+
+  if (!m_pFile)
+  {
+    memset(buffer, 0, sizeof(struct __stat64));
+    errno = ENOENT;
+    return -1;
+  }
+
   return m_pFile->Stat(buffer);
 }
 
@@ -414,6 +424,9 @@ bool CFile::SkipNext()
 
 int CFile::Stat(const CStdString& strFileName, struct __stat64* buffer)
 {
+  if (!buffer)
+    return -1;
+
   CURL url;
   
   try
@@ -463,7 +476,7 @@ int CFile::Stat(const CStdString& strFileName, struct __stat64* buffer)
 
 unsigned int CFile::Read(void *lpBuf, int64_t uiBufSize)
 {
-  if (!m_pFile)
+  if (!m_pFile || !lpBuf)
     return 0;
 
   if(m_pBuffer)
@@ -641,7 +654,7 @@ int64_t CFile::GetPosition() const
 //*********************************************************************************************
 bool CFile::ReadString(char *szLine, int iLineLength)
 {
-  if (!m_pFile)
+  if (!m_pFile || !szLine)
     return false;
 
   if (m_pBuffer)
@@ -701,6 +714,9 @@ bool CFile::ReadString(char *szLine, int iLineLength)
 
 int CFile::Write(const void* lpBuf, int64_t uiBufSize)
 {
+  if (!m_pFile || !lpBuf)
+    return -1;
+
   try
   {
     return m_pFile->Write(lpBuf, uiBufSize);
index 79ee3a4..d3adb35 100644 (file)
@@ -84,7 +84,10 @@ bool CLibraryDirectory::GetDirectory(const CStdString& strPath, CFileItemList &i
         CStdString path;
         XMLUtils::GetPath(node, "path", path);
         if (!path.IsEmpty())
+        {
+          URIUtils::AddSlashAtEnd(path);
           return CDirectory::GetDirectory(path, items, m_strFileMask, m_flags);
+        }
       }
     }
     return false;
index 9240f50..0bab179 100644 (file)
@@ -49,6 +49,12 @@ CGUIIncludes::CGUIIncludes()
   
   m_constantNodes.insert("posx");
   m_constantNodes.insert("posy");
+  m_constantNodes.insert("left");
+  m_constantNodes.insert("right");
+  m_constantNodes.insert("centerx");
+  m_constantNodes.insert("top");
+  m_constantNodes.insert("bottom");
+  m_constantNodes.insert("centery");
   m_constantNodes.insert("width");
   m_constantNodes.insert("height");
   m_constantNodes.insert("offsetx");
index a1f894b..8306c79 100644 (file)
@@ -219,6 +219,8 @@ bool CGUIWindow::Load(TiXmlElement* pRootElement)
     {
       XMLUtils::GetFloat(pChild, "posx", m_posX);
       XMLUtils::GetFloat(pChild, "posy", m_posY);
+      XMLUtils::GetFloat(pChild, "left", m_posX);
+      XMLUtils::GetFloat(pChild, "top", m_posY);
 
       TiXmlElement *originElement = pChild->FirstChildElement("origin");
       while (originElement)
index 0e55d3b..ce3e6dc 100644 (file)
@@ -80,11 +80,6 @@ CProfilesManager& CProfilesManager::Get()
   return sProfilesManager;
 }
 
-bool CProfilesManager::OnSettingsLoading()
-{
-  return true;
-}
-
 void CProfilesManager::OnSettingsLoaded()
 {
   // check them all
index e974913..8d7b4fa 100644 (file)
@@ -32,7 +32,6 @@ class CProfilesManager : public ISettingsHandler
 public:
   static CProfilesManager& Get();
 
-  virtual bool OnSettingsLoading();
   virtual void OnSettingsLoaded();
   virtual bool OnSettingsSaved();
   virtual void OnSettingsCleared();
index a90164d..226669a 100644 (file)
@@ -930,6 +930,7 @@ void CSettings::InitializeISettingCallbacks()
   settingSet.insert("audiooutput.audiodevice");
   settingSet.insert("audiooutput.passthroughdevice");
   settingSet.insert("audiooutput.streamsilence");
+  settingSet.insert("audiooutput.normalizelevels");
   settingSet.insert("lookandfeel.skin");
   settingSet.insert("lookandfeel.skinsettings");
   settingSet.insert("lookandfeel.font");
index c0c083c..b78b9da 100644 (file)
@@ -1146,7 +1146,6 @@ int CVideoDatabase::AddMovie(const CStdString& strFilenameAndPath)
       CStdString strSQL=PrepareSQL("insert into movie (idMovie, idFile) values (NULL, %i)", idFile);
       m_pDS->exec(strSQL.c_str());
       idMovie = (int)m_pDS->lastinsertid();
-//      CommitTransaction();
     }
 
     return idMovie;
@@ -1200,8 +1199,6 @@ int CVideoDatabase::AddTvShow(const CStdString& strPath)
     strSQL=PrepareSQL("insert into tvshowlinkpath values (%i,%i)",idTvShow,idPath);
     m_pDS->exec(strSQL.c_str());
 
-//    CommitTransaction();
-
     return idTvShow;
   }
   catch (...)