[SoftAE] pass audio/silence down to the sink so it can decide if it wants to output
authorCory Fields <theuni-nospam-@xbmc.org>
Mon, 9 Jul 2012 07:36:50 +0000 (03:36 -0400)
committerCory Fields <theuni-nospam-@xbmc.org>
Wed, 11 Jul 2012 03:37:52 +0000 (23:37 -0400)
13 files changed:
xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp
xbmc/cores/AudioEngine/Interfaces/AESink.h
xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
xbmc/cores/AudioEngine/Sinks/AESinkALSA.h
xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.h
xbmc/cores/AudioEngine/Sinks/AESinkNULL.cpp
xbmc/cores/AudioEngine/Sinks/AESinkNULL.h
xbmc/cores/AudioEngine/Sinks/AESinkOSS.cpp
xbmc/cores/AudioEngine/Sinks/AESinkOSS.h
xbmc/cores/AudioEngine/Sinks/AESinkProfiler.cpp
xbmc/cores/AudioEngine/Sinks/AESinkProfiler.h
xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp
xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.h

index 0e8bf57..65cb37b 100644 (file)
@@ -1009,7 +1009,7 @@ int CSoftAE::RunOutputStage(bool hasAudio)
     data = m_converted;
   }
 
-  wroteFrames = m_sink->AddPackets((uint8_t*)data, m_sinkFormat.m_frames);
+  wroteFrames = m_sink->AddPackets((uint8_t*)data, m_sinkFormat.m_frames, hasAudio);
 
   /* Return value of INT_MAX signals error in sink - restart */
   if (wroteFrames == INT_MAX)
@@ -1047,7 +1047,7 @@ int CSoftAE::RunRawOutputStage(bool hasAudio)
     data = m_converted;
   }
 
-  int wroteFrames = m_sink->AddPackets((uint8_t *)data, m_sinkFormat.m_frames);
+  int wroteFrames = m_sink->AddPackets((uint8_t *)data, m_sinkFormat.m_frames, hasAudio);
 
   /* Return value of INT_MAX signals error in sink - restart */
   if (wroteFrames == INT_MAX)
@@ -1108,7 +1108,7 @@ int CSoftAE::RunTranscodeStage(bool hasAudio)
   /* if we have enough data to write */
   if (m_encodedBuffer.Used() >= sinkBlock)
   {
-    int wroteFrames = m_sink->AddPackets((uint8_t*)m_encodedBuffer.Raw(sinkBlock), m_sinkFormat.m_frames);
+    int wroteFrames = m_sink->AddPackets((uint8_t*)m_encodedBuffer.Raw(sinkBlock), m_sinkFormat.m_frames, hasAudio);
     
     /* Return value of INT_MAX signals error in sink - restart */
     if (wroteFrames == INT_MAX)
index b06bc87..7083d08 100644 (file)
@@ -72,7 +72,7 @@ public:
   /*
     Adds packets to be sent out, this routine MUST block or sleep.
   */
-  virtual unsigned int AddPackets(uint8_t *data, unsigned int frames) = 0;
+  virtual unsigned int AddPackets(uint8_t *data, unsigned int frames, bool hasAudio) = 0;
 
   /*
     Drain the sink
index e019f2f..8a1eba4 100644 (file)
@@ -474,7 +474,7 @@ double CAESinkALSA::GetCacheTotal()
   return (double)m_bufferSize * m_formatSampleRateMul;
 }
 
-unsigned int CAESinkALSA::AddPackets(uint8_t *data, unsigned int frames)
+unsigned int CAESinkALSA::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio)
 {
   if (!m_pcm)
     return 0;
index 1f70acc..53cb479 100644 (file)
@@ -48,7 +48,7 @@ public:
   virtual double       GetDelay        ();
   virtual double       GetCacheTime    ();
   virtual double       GetCacheTotal   ();
-  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames);
+  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio);
   virtual void         Drain           ();
 
   static void EnumerateDevicesEx(AEDeviceInfoList &list);
index 0509193..4672a0f 100644 (file)
@@ -43,7 +43,7 @@ public:
   virtual double       GetDelay           ();
   virtual double       GetCacheTime       ();
   virtual double       GetCacheTotal      ();
-  virtual unsigned int AddPackets         (uint8_t *data, unsigned int frames);
+  virtual unsigned int AddPackets         (uint8_t *data, unsigned int frames, bool hasAudio);
   static  void         EnumerateDevicesEx (AEDeviceInfoList &deviceInfoList);
 private:
   void          AEChannelsFromSpeakerMask(DWORD speakers);
index d42d239..b6a0a8f 100644 (file)
@@ -81,7 +81,7 @@ double CAESinkNULL::GetDelay()
   return std::max(0.0, (double)(m_ts - CurrentHostCounter()) / 1000000.0f);
 }
 
-unsigned int CAESinkNULL::AddPackets(uint8_t *data, unsigned int frames)
+unsigned int CAESinkNULL::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio)
 {
   float timeout = m_msPerFrame * frames;
   m_ts = CurrentHostCounter() + MathUtils::round_int(timeout * 1000000.0f);
index 461b1b0..20b7cc5 100644 (file)
@@ -40,7 +40,7 @@ public:
   virtual double       GetDelay        ();
   virtual double       GetCacheTime    () { return 0.0; }
   virtual double       GetCacheTotal   () { return 0.0; }
-  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames);
+  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio);
   virtual void         Drain           ();
   static void          EnumerateDevices(AEDeviceList &devices, bool passthrough);
 private:
index 188caf3..f7010c8 100644 (file)
@@ -427,7 +427,7 @@ double CAESinkOSS::GetDelay()
   return (double)delay / (m_format.m_frameSize * m_format.m_sampleRate);
 }
 
-unsigned int CAESinkOSS::AddPackets(uint8_t *data, unsigned int frames)
+unsigned int CAESinkOSS::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio)
 {
   int size = frames * m_format.m_frameSize;
   int wrote = write(m_fd, data, size);
index 4010d77..d845525 100644 (file)
@@ -42,7 +42,7 @@ public:
   virtual double       GetDelay        ();
   virtual double       GetCacheTime    () { return 0.0; } /* FIXME */
   virtual double       GetCacheTotal   () { return 0.0; } /* FIXME */
-  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames);
+  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio);
   virtual void         Drain           ();
   static  void         EnumerateDevicesEx(AEDeviceInfoList &list);
 private:
index 0962aca..29bd07a 100644 (file)
@@ -73,7 +73,7 @@ double CAESinkProfiler::GetDelay()
   return 0.0f;
 }
 
-unsigned int CAESinkProfiler::AddPackets(uint8_t *data, unsigned int frames)
+unsigned int CAESinkProfiler::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio)
 {
   int64_t ts = CurrentHostCounter();
   CLog::Log(LOGDEBUG, "CAESinkProfiler::AddPackets - latency %f ms", (float)(ts - m_ts) / 1000000.0f);
index 9edb6c2..6048091 100644 (file)
@@ -40,7 +40,7 @@ public:
   virtual double       GetDelay        ();
   virtual double       GetCacheTime    () { return 0.0; }
   virtual double       GetCacheTotal   () { return 0.0; }
-  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames);
+  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio);
   virtual void         Drain           ();
   static void          EnumerateDevices(AEDeviceList &devices, bool passthrough);
 private:
index af5248d..b94e6e8 100644 (file)
@@ -362,7 +362,7 @@ double CAESinkWASAPI::GetCacheTotal()
   return hnsLatency / 10.0;
 }
 
-unsigned int CAESinkWASAPI::AddPackets(uint8_t *data, unsigned int frames)
+unsigned int CAESinkWASAPI::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio)
 {
   if (!m_initialized)
     return 0;
index 498184b..3f04602 100644 (file)
@@ -43,7 +43,7 @@ public:
     virtual double       GetDelay                    ();
     virtual double       GetCacheTime                ();
     virtual double       GetCacheTotal               ();
-    virtual unsigned int AddPackets                  (uint8_t *data, unsigned int frames);
+    virtual unsigned int AddPackets                  (uint8_t *data, unsigned int frames, bool hasAudio);
     static  void         EnumerateDevicesEx          (AEDeviceInfoList &deviceInfoList);
 private:
     bool         InitializeExclusive(AEAudioFormat &format);