rpms/mythtv/F-13 mythtv-0.23-shutup-vuvuzela.patch, NONE, 1.1 mythbackend.init, 1.2, 1.3 mythplugins-0.23-svnfixes.patch, 1.2, 1.3 mythtv-0.23-svnfixes.patch, 1.2, 1.3 mythtv.spec, 1.83, 1.84

Jarod Wilson jarod at rpmfusion.org
Thu Jun 17 06:46:03 CEST 2010


Author: jarod

Update of /cvs/free/rpms/mythtv/F-13
In directory se02.es.rpmfusion.net:/tmp/cvs-serv19157

Modified Files:
	mythbackend.init mythplugins-0.23-svnfixes.patch 
	mythtv-0.23-svnfixes.patch mythtv.spec 
Added Files:
	mythtv-0.23-shutup-vuvuzela.patch 
Log Message:
* Wed Jun 16 2010 Jarod Wilson <jarod at wilsonet.com> 0.23-4
- Update to release-0-23-fixes branch, svn revision 25124
- Add anti-vuvuzela-filter patch from mythtv ticket #8568, because
  I likes me some World Cup w/o the headache
- Fix 32-bit x86 build on F11 i586 target
- Fix a flub in the initscript from the prior build


mythtv-0.23-shutup-vuvuzela.patch:
 libs/libmyth/audiooutput.h               |    2 
 libs/libmyth/audiooutputbase.cpp         |   86 +++++++++++++++---
 libs/libmyth/audiooutputbase.h           |    7 +
 libs/libmyth/audiooutpututil.cpp         |  143 +++++++++++++++++++++++++++++++
 libs/libmyth/audiooutpututil.h           |   71 +++++++++++++++
 libs/libmyth/libmyth.pro                 |    4 
 libs/libmythtv/NuppelVideoPlayer.cpp     |   15 +++
 libs/libmythtv/NuppelVideoPlayer.h       |    2 
 libs/libmythtv/avformatdecoder.cpp       |    1 
 libs/libmythtv/tv_play.cpp               |   20 ++++
 libs/libmythtv/tv_play.h                 |    1 
 libs/libmythtv/tvosdmenuentry.cpp        |    6 +
 programs/mythfrontend/globalsettings.cpp |   12 ++
 programs/mythtranscode/transcode.cpp     |   11 ++
 14 files changed, 365 insertions(+), 16 deletions(-)

--- NEW FILE mythtv-0.23-shutup-vuvuzela.patch ---
Index: mythtv/libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- mythtv/libs/libmythtv/NuppelVideoPlayer.cpp	(revision 25121)
+++ mythtv/libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -5134,6 +5134,21 @@
     return false;
 }
 
+bool NuppelVideoPlayer::ToggleVuvuzela()
+{
+    bool ret = false;
+    if (audioOutput)
+        ret = audioOutput->ToggleVuvuzela();
+    if (decoder)
+        decoder->SetDisablePassThrough(ret);
+    return ret;
+}
+
+bool NuppelVideoPlayer::IsVuvuzela()
+{
+    return audioOutput ? audioOutput->IsVuvuzela() : false;
+}
+
 void NuppelVideoPlayer::Zoom(ZoomDirection direction)
 {
     if (videoOutput)
Index: mythtv/libs/libmythtv/avformatdecoder.cpp
===================================================================
--- mythtv/libs/libmythtv/avformatdecoder.cpp	(revision 25121)
+++ mythtv/libs/libmythtv/avformatdecoder.cpp	(working copy)
@@ -4639,6 +4639,7 @@
     else if (ctx->codec_id == CODEC_ID_DTS)
         passthru = allow_dts_passthru && !internal_vol;
 
+    passthru &= !GetNVP()->IsVuvuzela();
     passthru &= !transcoding && !disable_passthru;
     // Don't know any cards that support spdif clocked at < 44100
     // Some US cable transmissions have 2ch 32k AC-3 streams
Index: mythtv/libs/libmythtv/tv_play.h
===================================================================
--- mythtv/libs/libmythtv/tv_play.h	(revision 25121)
+++ mythtv/libs/libmythtv/tv_play.h	(working copy)
@@ -436,6 +436,7 @@
                                  const QStringList &actions);
 
     void ToggleUpmix(PlayerContext*);
+    void ToggleVuvuzela(PlayerContext*);
     void ChangeAudioSync(PlayerContext*, int dir, bool allowEdit = true);
     bool AudioSyncHandleAction(PlayerContext*, const QStringList &actions);
 
Index: mythtv/libs/libmythtv/NuppelVideoPlayer.h
===================================================================
--- mythtv/libs/libmythtv/NuppelVideoPlayer.h	(revision 25121)
+++ mythtv/libs/libmythtv/NuppelVideoPlayer.h	(working copy)
@@ -165,6 +165,8 @@
     void ToggleAspectOverride(AspectOverrideMode aspectMode = kAspect_Toggle);
     void ToggleAdjustFill(AdjustFillMode adjustfillMode = kAdjustFill_Toggle);
     bool ToggleUpmix(void);
+    bool ToggleVuvuzela(void);
+    bool IsVuvuzela(void);
 
     // Gets
     QSize   GetVideoBufferSize(void) const    { return video_dim; }
Index: mythtv/libs/libmythtv/tv_play.cpp
===================================================================
--- mythtv/libs/libmythtv/tv_play.cpp	(revision 25121)
+++ mythtv/libs/libmythtv/tv_play.cpp	(working copy)
@@ -4516,6 +4516,8 @@
         ToggleTimeStretch(ctx);
     else if (has_action("TOGGLEUPMIX", actions))
         ToggleUpmix(ctx);
+    else if (has_action("TOGGLEVUVUZELA", actions))
+        ToggleVuvuzela(ctx);
     else if (has_action("TOGGLESLEEP", actions))
         ToggleSleepTimer(ctx);
     else if (has_action("TOGGLERECORD", actions) && islivetv)
@@ -8286,6 +8288,20 @@
         ctx->nvp->GetOSD()->SetSettingsText(text, 5);
 }
 
+void TV::ToggleVuvuzela(PlayerContext *ctx)
+{
+    if (!ctx->nvp || !ctx->nvp->HasAudioOut())
+        return;
+    QString text;
+    if (ctx->nvp->ToggleVuvuzela())
+        text = tr("Vuvuzela Filter On");
+    else
+        text = tr("Vuvuzela Filter Off");
+
+    if (ctx->nvp->GetOSD() && !browsemode)
+        ctx->nvp->GetOSD()->SetSettingsText(text, 5);
+}
+
 // dir in 10ms jumps
 void TV::ChangeAudioSync(PlayerContext *ctx, int dir, bool allowEdit)
 {
@@ -9949,6 +9965,8 @@
         ToggleTimeStretch(actx);
     else if (action == "TOGGLEUPMIX")
         ToggleUpmix(actx);
+    else if (action == "TOGGLEVUVUZELA")
+        ToggleVuvuzela(actx);
     else if (action.left(13) == "ADJUSTSTRETCH")
     {
         bool floatRead;
@@ -10323,6 +10341,8 @@
         new OSDGenericTree(treeMenu, tr("Adjust Audio Sync"), "TOGGLEAUDIOSYNC");
     else if (category == "TOGGLEUPMIX")
         new OSDGenericTree(treeMenu, tr("Toggle Audio Upmixer"), "TOGGLEUPMIX");
+    else if (category == "TOGGLEVUVUZELA")
+        new OSDGenericTree(treeMenu, tr("Toggle Vuvuzela Filter"), "TOGGLEVUVUZELA");
     else if (category == "TIMESTRETCH")
         FillMenuTimeStretch(ctx, treeMenu);
     else if (category == "VIDEOSCAN")
Index: mythtv/libs/libmythtv/tvosdmenuentry.cpp
===================================================================
--- mythtv/libs/libmythtv/tvosdmenuentry.cpp	(revision 25121)
+++ mythtv/libs/libmythtv/tvosdmenuentry.cpp	(working copy)
@@ -236,6 +236,12 @@
         "AUDIOSYNC",          1,  1,  1,  1, "Audio Sync"));
     curMenuEntries.append(new TVOSDMenuEntry(
         "TOGGLEUPMIX",        1,  1,  1,  1, "Toggle Upmixer"));
+    if (gContext->GetNumSetting("AdvancedAudioSettings", false) &&
+        gContext->GetNumSetting("VuvuzelaFilter", false))
+    {
+        curMenuEntries.append(new TVOSDMenuEntry(
+            "TOGGLEVUVUZELA", 1,  1,  1,  1, "Toggle Vuvuzela Filter"));
+    }
     curMenuEntries.append(new TVOSDMenuEntry(
         "TIMESTRETCH",        1,  1,  1,  1, "Time Stretch"));
     curMenuEntries.append(new TVOSDMenuEntry(
Index: mythtv/libs/libmyth/audiooutputbase.h
===================================================================
--- mythtv/libs/libmyth/audiooutputbase.h	(revision 25121)
+++ mythtv/libs/libmyth/audiooutputbase.h	(working copy)
@@ -16,6 +16,7 @@
 
 // MythTV headers
 #include "audiooutput.h"
+#include "audiooutpututil.h"
 #include "samplerate.h"
 #include "mythverbose.h"
 
@@ -44,6 +45,8 @@
     virtual void SetStretchFactor(float factor);
     virtual float GetStretchFactor(void) const;
     virtual bool ToggleUpmix(void);
+    virtual bool ToggleVuvuzela(void);
+    virtual bool IsVuvuzela(void) { return vuvuzela; }
 
     virtual void Reset(void);
 
@@ -230,6 +233,10 @@
     /** main audio buffer */
     unsigned char audiobuffer[kAudioRingBufferSize];
     uint memory_corruption_test4;
+
+    //Vuvuzela filter
+    bool vuvuzela, last_vuvuzela;
+    AudioOutputUtil::Notch *notch_instance;
 };
 
 #endif
Index: mythtv/libs/libmyth/audiooutpututil.h
===================================================================
--- mythtv/libs/libmyth/audiooutpututil.h	(revision 0)
+++ mythtv/libs/libmyth/audiooutpututil.h	(revision 0)
@@ -0,0 +1,71 @@
+#ifndef AUDIOOUTPUTUTIL
+#define AUDIOOUTPUTUTIL
+
+using namespace std;
+
+#define IIR_NUM_COEFFICIENTS				(3)	// Assumed biquads
+
+class AudioOutputUtil
+{
+ public:
+    
+    //Notch Filter / IRR transformation
+    // Parameters
+    typedef struct
+    {
+        uint N;
+        uint num_biquads;
+        float b[IIR_NUM_COEFFICIENTS];
+        float a[IIR_NUM_COEFFICIENTS];
+    } IIR_Parameters;
+    
+    // State information
+    typedef struct
+    {
+        float a[IIR_NUM_COEFFICIENTS];
+        float b[IIR_NUM_COEFFICIENTS];
+        float x_mem[IIR_NUM_COEFFICIENTS];
+        float y_mem[IIR_NUM_COEFFICIENTS];
+    } IIR_State;
+    
+    // Instance
+    typedef struct
+    {
+        IIR_Parameters parameters;
+        IIR_State state;
+    } IIR;
+    
+    // Parameters
+    typedef struct
+    {
+        uint N;
+        float frequency;			// Notch frequency
+        float attenuation_dB;		// Notch attenuation
+    } Notch_Parameters;
+
+    // State information
+
+    typedef struct
+    {
+        float pole_position;
+        float frequency_offset;
+        float a1s;
+        float a2;
+        float depth_factor;
+        float w0;		// Input weight
+        float w1;		// Output weight
+    } Notch_State;
+
+    // Instance
+    typedef struct
+    {
+        Notch_Parameters parameters;
+        Notch_State state;
+        IIR iir;
+    } Notch;
+
+    static void notch_update(Notch &instance, float fs);
+    static void notch_execute(Notch &instance, float *in, float *out);
+};
+
+#endif
Index: mythtv/libs/libmyth/audiooutputbase.cpp
===================================================================
--- mythtv/libs/libmyth/audiooutputbase.cpp	(revision 25121)
+++ mythtv/libs/libmyth/audiooutputbase.cpp	(working copy)
@@ -13,6 +13,7 @@
 #include "compat.h"
 #include "audiooutputbase.h"
 #include "audiooutputdigitalencoder.h"
+#include "audiooutpututil.h"
 #include "SoundTouch.h"
 #include "freesurround.h"
 
@@ -73,7 +74,9 @@
     memory_corruption_test1(0xdeadbeef),
     memory_corruption_test2(0xdeadbeef),
     memory_corruption_test3(0xdeadbeef),
-    memory_corruption_test4(0xdeadbeef)
+    memory_corruption_test4(0xdeadbeef),
+    vuvuzela(false),            last_vuvuzela(false),
+    notch_instance(NULL)
 {
     // The following are not bzero() because MS Windows doesn't like it.
     memset(&src_data,          0, sizeof(SRC_DATA));
@@ -197,7 +200,17 @@
     return (configured_audio_channels == 6);
 }
 
+bool AudioOutputBase::ToggleVuvuzela(void)
+{
+    vuvuzela = !vuvuzela;
+    const AudioSettings settings(audio_bits, source_audio_channels,
+                                 audio_codec, source_audio_samplerate,
+                                 audio_passthru);
+    Reconfigure(settings);
 
+    return vuvuzela;
+}
+
 void AudioOutputBase::Reconfigure(const AudioSettings &orig_settings)
 {
     AudioSettings settings = orig_settings;
@@ -229,6 +242,7 @@
         settings.samplerate == audio_samplerate && !need_resampler &&
         settings.use_passthru == audio_passthru &&
         lneeds_upmix == needs_upmix &&
+        last_vuvuzela == vuvuzela &&
         laudio_reenc == audio_reenc);
     bool upmix_deps =
         (lsource_audio_channels == source_audio_channels);
@@ -247,6 +261,8 @@
         return;
     }
 
+    last_vuvuzela          = vuvuzela;
+
     KillAudio();
 
     QMutexLocker lock1(&audio_buflock);
@@ -264,6 +280,7 @@
     audio_codec = settings.codec;
     audio_passthru = settings.use_passthru;
     needs_upmix = lneeds_upmix;
+    vuvuzela = last_vuvuzela;
 
     if (audio_bits != 8 && audio_bits != 16)
     {
@@ -341,6 +358,13 @@
         need_resampler = true;
     }
 
+    if (vuvuzela)
+    {
+        VERBOSE(VB_AUDIO, LOC + "Vuvuzela filter enabled. Go Socceroos Go!");
+        if (!notch_instance)
+            notch_instance = new AudioOutputUtil::Notch;
+    }
+
     if (audio_enc)
     {
         VERBOSE(VB_AUDIO, LOC + "Creating AC-3 Encoder");
@@ -497,6 +521,13 @@
     needs_upmix = false;
     audio_enc = false;
 
+    if (notch_instance)
+    {
+        delete notch_instance;
+        notch_instance = NULL;
+    }
+    vuvuzela = false;
+
     CloseDevice();
 
     killAudioLock.unlock();
@@ -790,7 +821,6 @@
             VERBOSE(VB_IMPORTANT, LOC_ERR +
                     QString("Error occurred while resampling audio: %1")
                     .arg(src_strerror(error)));
-
         src_float_to_short_array(src_data.data_out, (short int*)tmp_buff,
                                  src_data.output_frames_gen*audio_channels);
 
@@ -844,7 +874,7 @@
     QMutexLocker lock1(&audio_buflock);
 
     // resample input if necessary
-    if (need_resampler && src_ctx)
+    if ((need_resampler && src_ctx) || (vuvuzela && notch_instance))
     {
         // Convert to floats
         short *buf_ptr = (short*)buffer;
@@ -853,17 +883,47 @@
             src_in[sample] = (float)buf_ptr[sample] / (1.0 * 0x8000);
         }
  
-        src_data.input_frames = samples;
-        src_data.end_of_input = 0;
-        int error = src_process(src_ctx, &src_data);
-        if (error)
-            VERBOSE(VB_IMPORTANT, LOC_ERR +
-                    QString("Error occurred while resampling audio: %1")
-                    .arg(src_strerror(error)));
-        src_float_to_short_array(src_data.data_out, (short int*)tmp_buff,
-                                 src_data.output_frames_gen*audio_channels);
+        if (vuvuzela)
+        {
+            notch_instance->parameters.N = samples * audio_channels;
+            // Notch attenuation
+            notch_instance->parameters.attenuation_dB = 35.0f;
+            
+            // Notch frequency
+            notch_instance->parameters.frequency = 233.0f;
+            AudioOutputUtil::notch_update (*notch_instance, (float)source_audio_samplerate);
+            AudioOutputUtil::notch_execute (*notch_instance, src_in, src_out);
+            notch_instance->parameters.frequency = 466.0f;  // 1st harmonic
+            AudioOutputUtil::notch_update (*notch_instance, (float)source_audio_samplerate);
+            AudioOutputUtil::notch_execute (*notch_instance, src_out, src_in);
+            notch_instance->parameters.frequency = 932.0f;  // 2nd harmonic
+            AudioOutputUtil::notch_update (*notch_instance, (float)source_audio_samplerate);
+            AudioOutputUtil::notch_execute (*notch_instance, src_in, src_out);
+            notch_instance->parameters.frequency = 1864.0f;  // 3rd harmonic
+            AudioOutputUtil::notch_update (*notch_instance, (float)source_audio_samplerate);
+            AudioOutputUtil::notch_execute (*notch_instance, src_out, src_in);
+        }
 
-        _AddSamples(tmp_buff, true, src_data.output_frames_gen, timecode);
+        if (need_resampler)
+        {
+            src_data.input_frames = samples;
+            src_data.end_of_input = 0;
+            int error = src_process(src_ctx, &src_data);
+            if (error)
+                VERBOSE(VB_IMPORTANT, LOC_ERR +
+                        QString("Error occurred while resampling audio: %1")
+                        .arg(src_strerror(error)));
+            src_float_to_short_array(src_data.data_out, (short int*)tmp_buff,
+                                     src_data.output_frames_gen*audio_channels);
+
+            _AddSamples(tmp_buff, true, src_data.output_frames_gen, timecode);
+        }
+        else
+        {
+            src_float_to_short_array(src_in, (short int*)tmp_buff,
+                                     samples * audio_channels);
+            _AddSamples(tmp_buff, true, samples, timecode);
+        }
     }
     else
     {
Index: mythtv/libs/libmyth/libmyth.pro
===================================================================
--- mythtv/libs/libmyth/libmyth.pro	(revision 25121)
+++ mythtv/libs/libmyth/libmyth.pro	(working copy)
@@ -30,7 +30,7 @@
 HEADERS += audiopulseutil.h
 HEADERS += programinfo.h programlist.h programinfoupdater.h
 HEADERS += recordingtypes.h remoteutil.h
-HEADERS += rawsettingseditor.h
+HEADERS += rawsettingseditor.h audiooutpututil.h
 
 # remove when everything is switched to mythui
 HEADERS += virtualkeyboard_qt.h
@@ -54,7 +54,7 @@
 SOURCES += audiopulseutil.cpp
 SOURCES += programinfo.cpp programlist.cpp programinfoupdater.cpp
 SOURCES += recordingtypes.cpp remoteutil.cpp
-SOURCES += rawsettingseditor.cpp
+SOURCES += rawsettingseditor.cpp audiooutpututil.cpp
 
 # remove when everything is switched to mythui
 SOURCES += virtualkeyboard_qt.cpp
Index: mythtv/libs/libmyth/audiooutput.h
===================================================================
--- mythtv/libs/libmyth/audiooutput.h	(revision 25121)
+++ mythtv/libs/libmyth/audiooutput.h	(working copy)
@@ -71,6 +71,8 @@
     virtual void bufferOutputData(bool y) = 0;
     virtual int readOutputData(unsigned char *read_buffer, int max_length) = 0;
     virtual bool ToggleUpmix(void) = 0;
+    virtual bool ToggleVuvuzela(void) = 0;
+    virtual bool IsVuvuzela(void) = 0;
 
   protected:
     void Error(const QString &msg);
Index: mythtv/libs/libmyth/audiooutpututil.cpp
===================================================================
--- mythtv/libs/libmyth/audiooutpututil.cpp	(revision 0)
+++ mythtv/libs/libmyth/audiooutpututil.cpp	(revision 0)
@@ -0,0 +1,143 @@
+#include "dsputil.h"
+#include "mythconfig.h"
+#include "audiooutpututil.h"
+
+#define IIR_NUM_COEFFICIENTS				(3)	// Assumed biquads
+
+static void iir_update (AudioOutputUtil::IIR &instance)
+{
+	// Clear the filter state
+    bzero(&instance.state.x_mem[0], IIR_NUM_COEFFICIENTS * sizeof(float));
+    bzero(&instance.state.y_mem[0], IIR_NUM_COEFFICIENTS * sizeof(float));
+    
+    memcpy(&instance.state.b[0], &instance.parameters.b[0],
+           IIR_NUM_COEFFICIENTS * sizeof(float));
+    memcpy(&instance.state.a[0], &instance.parameters.a[0],
+           IIR_NUM_COEFFICIENTS * sizeof(float));
+}
+
+/* Notch filter (c) 2010 Hydrix & Jean-Yves Avenard */
+/* www.hydrix.com */
+
+// Processes a single block of samples with a single IIR biquad stage
+//    N                   M
+//   SUM a(k+1) y(n-k) = SUM b(k+1) x(n-k)      for 1<=n<=length(x)
+//   k=0                 k=0
+// where N=length(a)-1 and M=length(b)-1.
+// Vector s is the initial state of the system. The final state is also returned
+// The state vector is a column vector whose length is equal to the
+// 	length of the longest coefficient vector minus one.
+static void iir_biquad (float* x, float* y,
+                        float* a, float* b,
+                        float* x_mem, float* y_mem,
+                        unsigned int N)
+{
+	// Direct Form I
+	//               N+1               N+1
+	//		y(n) = - SUM a(k) y(n-k) + SUM b(k) x(n-k)  for 0 <= n <length(x)
+	//               k=1               k=0
+	unsigned int n = 0;
+	unsigned int k = 0;
+	float y_n_minus_k = 0.0f;
+	float x_n_minus_k = 0.0f;
+	for (n = 0; n < N; n++)
+	{
+		y[n] = x[n] * b[0];
+        
+		for (k = 1; k < IIR_NUM_COEFFICIENTS; k++)
+		{
+			signed int n_minus_k = n - k;
+			if (n_minus_k >= 0)
+			{
+				x_n_minus_k = x[n_minus_k];
+				y_n_minus_k = y[n_minus_k];
+			}
+			else
+			{
+				x_n_minus_k = x_mem[-n_minus_k-1];
+				y_n_minus_k = y_mem[-n_minus_k-1];
+			}
+            
+			y[n] -= a[k] * y_n_minus_k;
+			y[n] += b[k] * x_n_minus_k;
+		}
+	}
+    
+	// Save input and output state, latest first
+	unsigned int state_offset = N - 1;
+	for (n=0; n < (IIR_NUM_COEFFICIENTS-1); n++)
+	{
+		x_mem[n] = x[state_offset];
+		y_mem[n] = y[state_offset];
+		state_offset--;
+	}
+}
+
+static void iir_execute(AudioOutputUtil::IIR &instance, float* x, float* y)
+{
+    iir_biquad(x, y,
+               &instance.state.a[0], &instance.state.b[0],
+               &instance.state.x_mem[0], &instance.state.y_mem[0],
+               instance.parameters.N);
+}
+
+// Notch filter
+#define PI_FLOAT                    (3.14159265358979f)
+
+void AudioOutputUtil::notch_update (Notch &instance, float fs)
+{
+	instance.state.pole_position = 0.99f;
+	instance.state.frequency_offset = 0.0f; // in normalised frequency (1.0 = fs)
+	instance.state.a1s = -instance.state.pole_position;
+	instance.state.a2 = -(instance.state.pole_position * instance.state.pole_position);
+	instance.state.depth_factor = 0.999f;
+
+	// Calculate filter coefficients
+	// Direct-form IIR
+	// Ref: http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt and others
+	float normalised_notch_frequency = (2.0f * instance.parameters.frequency / fs);
+	normalised_notch_frequency += instance.state.frequency_offset;
+	float frequency_factor = -2.0f * cosf(PI_FLOAT * normalised_notch_frequency);
+	float a1 = frequency_factor * instance.state.a1s;
+	float a2 = instance.state.a2;
+	float b1 = frequency_factor * instance.state.depth_factor;
+	float b2 = instance.state.depth_factor * instance.state.depth_factor;
+	instance.iir.parameters.N = instance.parameters.N;
+	instance.iir.parameters.a[0] = 1.0f;
+	instance.iir.parameters.a[1] = -a1;
+	instance.iir.parameters.a[2] = -a2;
+	instance.iir.parameters.b[0] = 1.0f;
+	instance.iir.parameters.b[1] = b1;
+	instance.iir.parameters.b[2] = b2;
+
+	// Initialise the IIR stage
+	iir_update(instance.iir);
+
+	// The notch filter strongly attenuates at the notch frequency.
+	// The output is the weighted sum of the input and the
+	// 	notch-filtered input.  The weights are calculated from the
+	// 	attenuation parameters
+	// instance.state.w0 = pow(10.0, (-instance.parameters.attenuation_dB / 20.0));
+	// instance.state.w1 = 1.0 - instance.state.w0;
+	float w0 = powf(10.0f, (-instance.parameters.attenuation_dB / 20.0f));
+	float w1 = 1.0f - w0;
+	instance.state.w0 = w0;
+	instance.state.w1 = w1;
+
+	return;
+}
+
+// Processes a single block of samples
+void AudioOutputUtil::notch_execute (Notch &instance, float *in, float *out)
+{
+    // Apply the rejection filter
+    iir_execute(instance.iir, in, out);
+
+    // The output is the weighted sum of the input and the
+    //	notch-filtered input
+    for (uint i=0; i < instance.parameters.N; i++)
+    {
+        out[i] *= instance.state.w1;
+        out[i] += instance.state.w0 * in[i];
+    }
+}
Index: mythtv/programs/mythfrontend/globalsettings.cpp
===================================================================
--- mythtv/programs/mythfrontend/globalsettings.cpp	(revision 25121)
+++ mythtv/programs/mythfrontend/globalsettings.cpp	(working copy)
@@ -181,6 +181,17 @@
     return gc;
 }
 
+static HostCheckBox *VuvuzelaFilter()
+{
+    HostCheckBox *gc = new HostCheckBox("VuvuzelaFilter");
+    gc->setLabel(QObject::tr("Enable vuvuzela filter"));
+    gc->setValue(false);
+    gc->setHelpText(QObject::tr("With this option enabled, a dedicated vuvuzela "
+                                "filter option will be accessible in the playback "
+                                "menu"));
+    return gc;
+}
+
 static HostCheckBox *MythControlsVolume()
 {
     HostCheckBox *gc = new HostCheckBox("MythControlsVolume");
@@ -3485,6 +3496,7 @@
     settings2->addChild(srcqualityoverride);
     settings2->addChild(sub3);
     
+    group2->addChild(VuvuzelaFilter());
     group2->addChild(settings2);
     group2->addChild(AggressiveBuffer());
 
Index: mythtv/programs/mythtranscode/transcode.cpp
===================================================================
--- mythtv/programs/mythtranscode/transcode.cpp	(revision 25121)
+++ mythtv/programs/mythtranscode/transcode.cpp	(working copy)
@@ -217,7 +217,16 @@
         // Do nothing
         return false;
     }
-
+    virtual bool ToggleVuvuzela(void)
+    {
+        // Do nothing
+        return false;
+    }
+    virtual bool IsVuvuzela(void)
+    {
+        // Do nothing
+        return false;
+    }
     virtual void SetSWVolume(int new_volume, bool save)
     {
         // Do nothing


Index: mythbackend.init
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-13/mythbackend.init,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- mythbackend.init	8 Jun 2010 14:40:56 -0000	1.2
+++ mythbackend.init	17 Jun 2010 04:46:02 -0000	1.3
@@ -22,7 +22,7 @@
 binary=/usr/bin/mythbackend
 prog=mythbackend
 RETVAL=0
-OPTIONS="$OPTIONS --daemon --logfile --user ${MYTHBACKEND_USER} /var/log/mythtv/$prog.log --pidfile /var/run/$prog.pid"
+OPTIONS="$OPTIONS --daemon --user ${MYTHBACKEND_USER} --logfile /var/log/mythtv/$prog.log --pidfile /var/run/$prog.pid"
 
 start() {
   echo -n $"Starting $prog: "

mythplugins-0.23-svnfixes.patch:
 mytharchive/mythburn/scripts/mythburn.py                       |   91 +++++-----
 mythgallery/mythgallery/galleryutil.cpp                        |    5 
 mythgallery/mythgallery/glsingleview.cpp                       |    1 
 mythmusic/mythmusic/dbcheck.cpp                                |    5 
 mythvideo/mythvideo/dbcheck.cpp                                |    5 
 mythweb/classes/Database.php                                   |    4 
 mythweb/classes/Database/Query.php                             |    4 
 mythweb/classes/Database/Query/mysql.php                       |    4 
 mythweb/classes/Database/Query/mysqlicompat.php                |    4 
 mythweb/classes/Database/mysql.php                             |    4 
 mythweb/classes/Database/mysqlicompat.php                      |    4 
 mythweb/classes/JSON.php                                       |    4 
 mythweb/classes/Modules.php                                    |    4 
 mythweb/classes/MythBackend.php                                |    4 
 mythweb/classes/MythFrontend.php                               |    4 
 mythweb/includes/class_autoload.php                            |    4 
 mythweb/includes/cleanup.php                                   |    4 
 mythweb/includes/config.php                                    |    4 
 mythweb/includes/css.php                                       |    4 
 mythweb/includes/data_dir.php                                  |    4 
 mythweb/includes/database.php                                  |    4 
 mythweb/includes/db_update.php                                 |    4 
 mythweb/includes/defines.php                                   |    4 
 mythweb/includes/errordisplay.php                              |    4 
 mythweb/includes/errors.php                                    |    4 
 mythweb/includes/init.php                                      |    4 
 mythweb/includes/jobqueue.php                                  |    4 
 mythweb/includes/lockdown.php                                  |    4 
 mythweb/includes/mobile.php                                    |    4 
 mythweb/includes/mouseovers.php                                |    4 
 mythweb/includes/php_version_check.php                         |    4 
 mythweb/includes/session.php                                   |    4 
 mythweb/includes/skin.php                                      |    4 
 mythweb/includes/sorting.php                                   |    4 
 mythweb/includes/translate.php                                 |    4 
 mythweb/includes/utils.php                                     |    4 
 mythweb/js/pngbehavior.htc                                     |    2 
 mythweb/js/table_sort.js                                       |    4 
 mythweb/js/utils.js                                            |    4 
 mythweb/modules/_shared/tmpl/_errors/db_access_denied.php      |    4 
 mythweb/modules/_shared/tmpl/_errors/db_vars_error.php         |    4 
 mythweb/modules/_shared/tmpl/_errors/error.php                 |    4 
 mythweb/modules/_shared/tmpl/_errors/fatal.php                 |    4 
 mythweb/modules/_shared/tmpl/_errors/lockdown.php              |    4 
 mythweb/modules/_shared/tmpl/_errors/no_modules.php            |    4 
 mythweb/modules/_shared/tmpl/_errors/site_down.php             |    4 
 mythweb/modules/_shared/tmpl/_errors/unknown_module.php        |    4 
 mythweb/modules/_shared/tmpl/default/footer.php                |    4 
 mythweb/modules/_shared/tmpl/default/header.php                |    4 
 mythweb/modules/_shared/tmpl/default/welcome.php               |    4 
 mythweb/modules/_shared/tmpl/iPod/footer.php                   |    4 
 mythweb/modules/_shared/tmpl/iPod/header.php                   |    4 
 mythweb/modules/_shared/tmpl/iPod/welcome.php                  |    4 
 mythweb/modules/_shared/tmpl/lite/footer.php                   |    4 
 mythweb/modules/_shared/tmpl/lite/header.php                   |    4 
 mythweb/modules/_shared/tmpl/lite/welcome.php                  |    4 
 mythweb/modules/_shared/tmpl/wap/footer.php                    |    4 
 mythweb/modules/_shared/tmpl/wap/header.php                    |    4 
 mythweb/modules/_shared/tmpl/wap/welcome.php                   |    4 
 mythweb/modules/backend_log/handler.php                        |    4 
 mythweb/modules/backend_log/init.php                           |    4 
 mythweb/modules/backend_log/tmpl/default/backend_log.php       |    4 
 mythweb/modules/backend_log/tmpl/default/welcome.php           |    4 
 mythweb/modules/backend_log/tmpl/lite/backend_log.php          |    4 
 mythweb/modules/backend_log/tmpl/lite/welcome.php              |    4 
 mythweb/modules/database/init.php                              |    4 
 mythweb/modules/database/set_settings.php                      |    4 
 mythweb/modules/database/tmpl/default/set_settings.php         |    4 
 mythweb/modules/music/handler.php                              |    4 
 mythweb/modules/music/init.php                                 |    4 
 mythweb/modules/music/mp3act_functions.php                     |    4 
 mythweb/modules/music/stream.php                               |    4 
 mythweb/modules/music/tmpl/default/welcome.php                 |    4 
 mythweb/modules/mythtv/init.php                                |    4 
 mythweb/modules/mythtv/set_keys.php                            |    4 
 mythweb/modules/mythtv/set_settings.php                        |    4 
 mythweb/modules/mythtv/tmpl/default/set_keys.php               |    4 
 mythweb/modules/mythtv/tmpl/default/set_settings.php           |    4 
 mythweb/modules/mythtv/tmpl/lite/set_keys.php                  |    4 
 mythweb/modules/mythtv/tmpl/lite/set_settings.php              |    4 
 mythweb/modules/mythweb/init.php                               |    4 
 mythweb/modules/mythweb/set_defaults.php                       |    4 
 mythweb/modules/mythweb/set_flvplayer.php                      |    4 
 mythweb/modules/mythweb/set_session.php                        |    4 
 mythweb/modules/mythweb/tmpl/default/set_defaults.php          |    4 
 mythweb/modules/mythweb/tmpl/default/set_flvplayer.php         |    4 
 mythweb/modules/mythweb/tmpl/default/set_session.php           |    4 
 mythweb/modules/mythweb/tmpl/lite/set_defaults.php             |    4 
 mythweb/modules/mythweb/tmpl/lite/set_flvplayer.php            |    4 
 mythweb/modules/mythweb/tmpl/lite/set_session.php              |    4 
 mythweb/modules/remote/do.php                                  |    4 
 mythweb/modules/remote/handler.php                             |    4 
 mythweb/modules/remote/init.php                                |    4 
 mythweb/modules/remote/keys.php                                |    4 
 mythweb/modules/remote/play_program_on_frontend.php            |    4 
 mythweb/modules/remote/tmpl/default/keys.php                   |    4 
 mythweb/modules/remote/tmpl/default/remote.php                 |    4 
 mythweb/modules/remote/tmpl/default/welcome.php                |    4 
 mythweb/modules/remote/tmpl/iPod/play_program_on_frontend.php  |    4 
 mythweb/modules/remote/tmpl/iPod/welcome.php                   |    4 
 mythweb/modules/settings/handler.php                           |    4 
 mythweb/modules/settings/init.php                              |    4 
 mythweb/modules/settings/tmpl/default/header.php               |    4 
 mythweb/modules/settings/tmpl/default/welcome.php              |    4 
 mythweb/modules/settings/tmpl/lite/header.php                  |    4 
 mythweb/modules/settings/tmpl/lite/mythweb.php                 |    4 
 mythweb/modules/settings/tmpl/lite/welcome.php                 |    4 
 mythweb/modules/stats/handler.php                              |    4 
 mythweb/modules/stats/init.php                                 |    4 
 mythweb/modules/stats/tmpl/default/stats.php                   |    4 
 mythweb/modules/stats/tmpl/default/welcome.php                 |    4 
 mythweb/modules/stats/tmpl/lite/stats.php                      |    4 
 mythweb/modules/stats/tmpl/lite/welcome.php                    |    4 
 mythweb/modules/status/handler.php                             |    4 
 mythweb/modules/status/init.php                                |    4 
 mythweb/modules/status/tmpl/default/status.php                 |    4 
 mythweb/modules/status/tmpl/default/welcome.php                |    4 
 mythweb/modules/status/tmpl/lite/status.php                    |    4 
 mythweb/modules/status/tmpl/lite/welcome.php                   |    4 
 mythweb/modules/status/tmpl/wap/status.php                     |    4 
 mythweb/modules/stream/handler.pl                              |    4 
 mythweb/modules/stream/init.php                                |    4 
 mythweb/modules/stream/set_protocol.php                        |    4 
 mythweb/modules/stream/stream_asx.pl                           |    4 
 mythweb/modules/stream/stream_flv.pl                           |    4 
 mythweb/modules/stream/stream_flvp.pl                          |    4 
 mythweb/modules/stream/stream_mp4.pl                           |    4 
 mythweb/modules/stream/stream_raw.pl                           |    4 
 mythweb/modules/stream/tmpl/default/set_protocol.php           |    4 
 mythweb/modules/stream/tmpl/lite/set_protocol.php              |    4 
 mythweb/modules/stream/tv.pl                                   |    4 
 mythweb/modules/tv/canned_searches.conf.php                    |    4 
 mythweb/modules/tv/channel.php                                 |    4 
 mythweb/modules/tv/classes/Channel.php                         |    4 
 mythweb/modules/tv/classes/Channel_List.php                    |    4 
 mythweb/modules/tv/classes/Program.php                         |    4 
 mythweb/modules/tv/classes/Recording.php                       |    4 
 mythweb/modules/tv/classes/Schedule.php                        |    4 
 mythweb/modules/tv/detail.php                                  |    4 
 mythweb/modules/tv/get_pixmap.php                              |    4 
 mythweb/modules/tv/handler.php                                 |    4 
 mythweb/modules/tv/includes/channels.php                       |    4 
 mythweb/modules/tv/includes/programs.php                       |    4 
 mythweb/modules/tv/includes/recording_schedules.php            |    4 
 mythweb/modules/tv/includes/schedule_utils.php                 |    4 
 mythweb/modules/tv/init.php                                    |    4 
 mythweb/modules/tv/list.php                                    |    4 
 mythweb/modules/tv/list_recording_groups.php                   |    4 
 mythweb/modules/tv/list_shows_in_title_and_group.php           |    4 
 mythweb/modules/tv/list_titles_in_group.php                    |    4 
 mythweb/modules/tv/opensearch.php                              |    4 
 mythweb/modules/tv/recorded.php                                |    4 
 mythweb/modules/tv/schedules.php                               |    4 
 mythweb/modules/tv/schedules_custom.php                        |    4 
 mythweb/modules/tv/schedules_manual.php                        |    4 
 mythweb/modules/tv/search.php                                  |    4 
 mythweb/modules/tv/searches.php                                |    4 
 mythweb/modules/tv/set_channels.php                            |    4 
 mythweb/modules/tv/set_playgroup.php                           |    4 
 mythweb/modules/tv/set_screens.php                             |    4 
 mythweb/modules/tv/set_session.php                             |    4 
 mythweb/modules/tv/submenu.php                                 |    4 
 mythweb/modules/tv/tmpl/default/channel.php                    |    4 
 mythweb/modules/tv/tmpl/default/detail.php                     |    4 
 mythweb/modules/tv/tmpl/default/list.php                       |    4 
 mythweb/modules/tv/tmpl/default/list_data.php                  |    4 
 mythweb/modules/tv/tmpl/default/recorded.php                   |    4 
 mythweb/modules/tv/tmpl/default/schedules.php                  |    4 
 mythweb/modules/tv/tmpl/default/schedules_custom.php           |    4 
 mythweb/modules/tv/tmpl/default/schedules_manual.php           |    4 
 mythweb/modules/tv/tmpl/default/search.php                     |    4 
 mythweb/modules/tv/tmpl/default/searches.php                   |    4 
 mythweb/modules/tv/tmpl/default/set_channels.php               |    4 
 mythweb/modules/tv/tmpl/default/set_playgroup.php              |    4 
 mythweb/modules/tv/tmpl/default/set_screens.php                |    4 
 mythweb/modules/tv/tmpl/default/set_session.php                |    4 
 mythweb/modules/tv/tmpl/default/upcoming.php                   |    4 
 mythweb/modules/tv/tmpl/default/welcome.php                    |    4 
 mythweb/modules/tv/tmpl/iPod/detail.php                        |    4 
 mythweb/modules/tv/tmpl/iPod/list_recording_groups.php         |    4 
 mythweb/modules/tv/tmpl/iPod/list_shows_in_title_and_group.php |    4 
 mythweb/modules/tv/tmpl/iPod/list_titles_in_group.php          |    4 
 mythweb/modules/tv/tmpl/iPod/search.php                        |    4 
 mythweb/modules/tv/tmpl/iPod/submenu.php                       |    4 
 mythweb/modules/tv/tmpl/iPod/upcoming.php                      |    4 
 mythweb/modules/tv/tmpl/iPod/welcome.php                       |    4 
 mythweb/modules/tv/tmpl/ical/upcoming.php                      |    4 
 mythweb/modules/tv/tmpl/lite/channel.php                       |    4 
 mythweb/modules/tv/tmpl/lite/detail.php                        |    4 
 mythweb/modules/tv/tmpl/lite/list.php                          |    4 
 mythweb/modules/tv/tmpl/lite/recorded.php                      |    4 
 mythweb/modules/tv/tmpl/lite/schedules.php                     |    4 
 mythweb/modules/tv/tmpl/lite/schedules_custom.php              |    4 
 mythweb/modules/tv/tmpl/lite/schedules_manual.php              |    4 
 mythweb/modules/tv/tmpl/lite/search.php                        |    4 
 mythweb/modules/tv/tmpl/lite/searches.php                      |    4 
 mythweb/modules/tv/tmpl/lite/set_channels.php                  |   10 -
 mythweb/modules/tv/tmpl/lite/set_session.php                   |    4 
 mythweb/modules/tv/tmpl/lite/upcoming.php                      |    4 
 mythweb/modules/tv/tmpl/lite/welcome.php                       |    4 
 mythweb/modules/tv/tmpl/rss/recorded.php                       |    4 
 mythweb/modules/tv/tmpl/wap/channel.php                        |    4 
 mythweb/modules/tv/tmpl/wap/detail.php                         |    4 
 mythweb/modules/tv/tmpl/wap/list.php                           |    4 
 mythweb/modules/tv/tmpl/wap/recorded.php                       |    4 
 mythweb/modules/tv/tmpl/wap/search.php                         |    4 
 mythweb/modules/tv/tmpl/wap/upcoming.php                       |    4 
 mythweb/modules/tv/upcoming.php                                |    4 
 mythweb/modules/video/edit.php                                 |    4 
 mythweb/modules/video/handler.php                              |    4 
 mythweb/modules/video/imdb.php                                 |    4 
 mythweb/modules/video/init.php                                 |    4 
 mythweb/modules/video/scan.php                                 |    4 
 mythweb/modules/video/set_settings.php                         |    4 
 mythweb/modules/video/tmpl/default/set_settings.php            |    4 
 mythweb/modules/video/tmpl/default/video.php                   |    4 
 mythweb/modules/video/tmpl/default/welcome.php                 |    4 
 mythweb/modules/weather/classes/WeatherScreen.php              |    4 
 mythweb/modules/weather/handler.php                            |    4 
 mythweb/modules/weather/init.php                               |    4 
 mythweb/modules/weather/set_screen.php                         |    4 
 mythweb/modules/weather/tmpl/default/set_screen.php            |    4 
 mythweb/modules/weather/tmpl/default/weather.18h.php           |    4 
 mythweb/modules/weather/tmpl/default/weather.3d.php            |    4 
 mythweb/modules/weather/tmpl/default/weather.6d.php            |    4 
 mythweb/modules/weather/tmpl/default/weather.am.php            |    4 
 mythweb/modules/weather/tmpl/default/weather.cc.php            |    4 
 mythweb/modules/weather/tmpl/default/weather.php               |    4 
 mythweb/modules/weather/tmpl/default/weather.sm.php            |    4 
 mythweb/modules/weather/tmpl/default/welcome.php               |    4 
 mythweb/modules/welcome.php                                    |    4 
 mythweb/mythweb.php                                            |    4 
 mythweb/mythweb.pl                                             |    4 
 mythzoneminder/mythzoneminder/zmclient.cpp                     |   34 ++-
 mythzoneminder/mythzoneminder/zmdefines.h                      |    1 
 mythzoneminder/mythzoneminder/zmliveplayer.cpp                 |   18 +
 settings.pro                                                   |    2 
 237 files changed, 550 insertions(+), 528 deletions(-)

Index: mythplugins-0.23-svnfixes.patch
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-13/mythplugins-0.23-svnfixes.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- mythplugins-0.23-svnfixes.patch	8 Jun 2010 14:40:56 -0000	1.2
+++ mythplugins-0.23-svnfixes.patch	17 Jun 2010 04:46:02 -0000	1.3
@@ -3463,6 +3463,114 @@
  # @version   $Revision$
  # @author    $Author$
  #
+diff -Naurp mythplugins-0.23-release/mythzoneminder/mythzoneminder/zmclient.cpp mythplugins-0.23/mythzoneminder/mythzoneminder/zmclient.cpp
+--- mythplugins-0.23-release/mythzoneminder/mythzoneminder/zmclient.cpp	2009-04-10 20:04:30.000000000 -0400
++++ mythplugins-0.23/mythzoneminder/mythzoneminder/zmclient.cpp	2010-06-09 15:36:20.626015000 -0400
+@@ -521,6 +521,7 @@ void ZMClient::getEventFrame(int monitor
+     if (!readData(data, imageSize))
+     {
+         VERBOSE(VB_GENERAL, "ZMClient::getEventFrame(): Failed to get image data");
++        delete [] data;
+         return;
+     }
+ 
+@@ -532,8 +533,9 @@ void ZMClient::getEventFrame(int monitor
+     if (!(*image)->loadFromData(data, imageSize, "JPEG"))
+     {
+         VERBOSE(VB_GENERAL, "ZMClient::getEventFrame(): Failed to load image from data");
+-        return;
+     }
++
++    delete [] data;
+ }
+ 
+ void ZMClient::getAnalyseFrame(int monitorID, int eventID, int frameNo, QImage &image)
+@@ -558,13 +560,17 @@ void ZMClient::getAnalyseFrame(int monit
+         VERBOSE(VB_GENERAL, "ZMClient::getAnalyseFrame(): Failed to get image data");
+         image = QImage();
+     }
+-
+-    // extract the image data and create a QImage from it
+-    if (!image.loadFromData(data, imageSize, "JPEG"))
++    else
+     {
+-        VERBOSE(VB_GENERAL, "ZMClient::getAnalyseFrame(): Failed to load image from data");
+-        image = QImage();
++        // extract the image data and create a QImage from it
++        if (!image.loadFromData(data, imageSize, "JPEG"))
++        {
++            VERBOSE(VB_GENERAL, "ZMClient::getAnalyseFrame(): Failed to load image from data");
++            image = QImage();
++        }
+     }
++
++    delete [] data;
+ }
+ 
+ int ZMClient::getLiveFrame(int monitorID, QString &status, unsigned char* buffer, int bufferSize)
+@@ -659,9 +665,21 @@ void ZMClient::getMonitorList(vector<Mon
+         item->zmaStatus = "";
+         item->events = 0;
+         item->status = "";
++        item->isV4L2 = (item->palette > 255);
+         monitorList->push_back(item);
+-        VERBOSE(VB_IMPORTANT, QString("Monitor: %1 (%2) is using palette: %3")
+-                .arg(item->name).arg(item->id).arg(item->palette));
++        if (item->isV4L2)
++        {
++            QString pallete;
++            pallete  = (char) (item->palette & 0xff);
++            pallete += (char) ((item->palette >> 8) & 0xff);
++            pallete += (char) ((item->palette >> 16) & 0xff);
++            pallete += (char) ((item->palette >> 24) & 0xff);
++            VERBOSE(VB_IMPORTANT, QString("Monitor: %1 (%2) is using palette: %3 (%4)")
++                    .arg(item->name).arg(item->id).arg(item->palette).arg(pallete));
++        }
++        else
++            VERBOSE(VB_IMPORTANT, QString("Monitor: %1 (%2) is using palette: %3")
++                    .arg(item->name).arg(item->id).arg(item->palette));
+     }
+ }
+ 
+diff -Naurp mythplugins-0.23-release/mythzoneminder/mythzoneminder/zmdefines.h mythplugins-0.23/mythzoneminder/mythzoneminder/zmdefines.h
+--- mythplugins-0.23-release/mythzoneminder/mythzoneminder/zmdefines.h	2009-05-15 22:26:03.000000000 -0400
++++ mythplugins-0.23/mythzoneminder/mythzoneminder/zmdefines.h	2010-06-09 15:36:20.626015000 -0400
+@@ -61,6 +61,7 @@ typedef struct
+     int width;
+     int height;
+     int palette;
++    bool isV4L2;
+ } Monitor;
+ 
+ #endif
+diff -Naurp mythplugins-0.23-release/mythzoneminder/mythzoneminder/zmliveplayer.cpp mythplugins-0.23/mythzoneminder/mythzoneminder/zmliveplayer.cpp
+--- mythplugins-0.23-release/mythzoneminder/mythzoneminder/zmliveplayer.cpp	2009-11-28 13:50:27.000000000 -0500
++++ mythplugins-0.23/mythzoneminder/mythzoneminder/zmliveplayer.cpp	2010-06-09 15:36:20.626015000 -0400
+@@ -450,10 +450,20 @@ void Player::updateFrame(const unsigned 
+             r = buffer[pos_data++];
+             g = buffer[pos_data++];
+             b = buffer[pos_data++];
+-            m_rgba[pos_rgba++] = b;
+-            m_rgba[pos_rgba++] = g;
+-            m_rgba[pos_rgba++] = r;
+-            m_rgba[pos_rgba++] = 0xff;
++            if (m_monitor.isV4L2)
++            {
++                m_rgba[pos_rgba++] = g;
++                m_rgba[pos_rgba++] = r;
++                m_rgba[pos_rgba++] = b;
++                m_rgba[pos_rgba++] = 0xff;
++            }
++            else
++            {
++                m_rgba[pos_rgba++] = b;
++                m_rgba[pos_rgba++] = g;
++                m_rgba[pos_rgba++] = r;
++                m_rgba[pos_rgba++] = 0xff;
++            }
+         }
+     }
+ 
 diff -Naurp mythplugins-0.23-release/settings.pro mythplugins-0.23/settings.pro
 --- mythplugins-0.23-release/settings.pro	2010-02-16 17:59:56.000000000 -0500
 +++ mythplugins-0.23/settings.pro	2010-05-11 11:29:36.773259000 -0400

mythtv-0.23-svnfixes.patch:
 VERSION                                                 |    1 
 bindings/perl/IO/Socket/INET/MythTV.pm                  |    4 -
 bindings/perl/MythTV.pm                                 |   11 +-
 bindings/perl/MythTV/Channel.pm                         |   64 ++++++++--------
 bindings/perl/MythTV/Program.pm                         |    4 -
 bindings/perl/MythTV/Recording.pm                       |    4 -
 bindings/perl/MythTV/StorageGroup.pm                    |    4 -
 bindings/python/MythTV/MythData.py                      |    4 -
 bindings/python/MythTV/MythFunc.py                      |   13 ++-
 configure                                               |   18 ++--
 contrib/config_files/lirc/lircrc.native.example.mceusb2 |    2 
 contrib/icons/master_iconmap/channel_icons.pl           |    4 -
 contrib/maintenance/flush_deleted_recgroup.pl           |    4 -
 contrib/maintenance/optimize_mythdb.pl                  |    4 -
 contrib/user_jobs/firewire_primer.pl                    |    4 -
 contrib/user_jobs/mythlink.pl                           |    4 -
 libs/libavcodec/libavcodec.pro                          |    5 -
 libs/libmyth/audiooutputpulse.cpp                       |   13 ++-
 libs/libmyth/mythcontext.cpp                            |    9 +-
 libs/libmyth/schemawizard.cpp                           |   17 ++++
 libs/libmythdb/mythdirs.cpp                             |    5 -
 libs/libmythdvdnav/libmythdvdnav.pro                    |    3 
 libs/libmythsoundtouch/AAFilter.cpp                     |    2 
 libs/libmythsoundtouch/AAFilter.h                       |    2 
 libs/libmythsoundtouch/BPMDetect.h                      |    2 
 libs/libmythsoundtouch/FIFOSampleBuffer.cpp             |    2 
 libs/libmythsoundtouch/FIFOSampleBuffer.h               |    2 
 libs/libmythsoundtouch/FIFOSamplePipe.h                 |    2 
 libs/libmythsoundtouch/FIRFilter.cpp                    |    2 
 libs/libmythsoundtouch/FIRFilter.h                      |    2 
 libs/libmythsoundtouch/RateTransposer.cpp               |    2 
 libs/libmythsoundtouch/RateTransposer.h                 |    2 
 libs/libmythsoundtouch/STTypes.h                        |    2 
 libs/libmythsoundtouch/SoundTouch.cpp                   |    2 
 libs/libmythsoundtouch/SoundTouch.h                     |    2 
 libs/libmythsoundtouch/TDStretch.cpp                    |    2 
 libs/libmythsoundtouch/TDStretch.h                      |    2 
 libs/libmythsoundtouch/cpu_detect.h                     |    2 
 libs/libmythsoundtouch/cpu_detect_x86_gcc.cpp           |    2 
 libs/libmythsoundtouch/mmx_gcc.cpp                      |    2 
 libs/libmythtv/avformatdecoder.cpp                      |   32 ++++++--
 libs/libmythtv/dbcheck.cpp                              |    9 --
 libs/libmythtv/tv_play.cpp                              |   19 +---
 libs/libmythtv/tv_play.h                                |    2 
 libs/libmythui/mythfontmanager.cpp                      |    6 -
 libs/libmythui/mythmainwindow.cpp                       |   12 +--
 libs/libmythui/mythsystem.cpp                           |    4 -
 libs/libmythui/xmlparsebase.cpp                         |    6 -
 libs/libswscale/libswscale.pro                          |    6 +
 programs/mythbackend/main.cpp                           |    7 +
 programs/mythcommflag/main.cpp                          |   35 +++++++-
 programs/mythtv-setup/main.cpp                          |    2 
 settings.pro                                            |    2 
 version.pro                                             |    2 
 54 files changed, 235 insertions(+), 146 deletions(-)

Index: mythtv-0.23-svnfixes.patch
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-13/mythtv-0.23-svnfixes.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- mythtv-0.23-svnfixes.patch	8 Jun 2010 14:40:56 -0000	1.2
+++ mythtv-0.23-svnfixes.patch	17 Jun 2010 04:46:02 -0000	1.3
@@ -742,8 +742,38 @@
  // $Id$
 diff -Naurp mythtv-0.23-release/libs/libmythtv/avformatdecoder.cpp mythtv-0.23/libs/libmythtv/avformatdecoder.cpp
 --- mythtv-0.23-release/libs/libmythtv/avformatdecoder.cpp	2010-04-29 20:08:03.000000000 -0400
-+++ mythtv-0.23/libs/libmythtv/avformatdecoder.cpp	2010-05-12 10:45:47.290448000 -0400
-@@ -1418,6 +1418,8 @@ void AvFormatDecoder::InitVideoCodec(AVS
++++ mythtv-0.23/libs/libmythtv/avformatdecoder.cpp	2010-06-10 00:02:51.816777000 -0400
+@@ -1291,6 +1291,14 @@ static float normalized_fps(AVStream *st
+             fps = tmpfps;
+     }
+ 
++    // and finally try the ffmpeg estimated rate
++    if (fps > 121.0f || fps < 3.0f)
++    {
++        float tmpfps = av_q2d(stream->r_frame_rate);
++        if (tmpfps > 20 && tmpfps < 70)
++            fps = tmpfps;
++    }
++
+     // If it is still out of range, just assume NTSC...
+     fps = (fps > 121.0f) ? (30000.0f / 1001.0f) : fps;
+     return fps;
+@@ -1386,11 +1394,10 @@ void AvFormatDecoder::InitVideoCodec(AVS
+     {
+         fps = normalized_fps(stream, enc);
+ 
+-
+-        if (stream->sample_aspect_ratio.num)
+-            aspect_ratio = av_q2d(stream->sample_aspect_ratio);
+-        else if (enc->sample_aspect_ratio.num)
++        if (enc->sample_aspect_ratio.num)
+             aspect_ratio = av_q2d(enc->sample_aspect_ratio);
++        else if (stream->sample_aspect_ratio.num)
++            aspect_ratio = av_q2d(stream->sample_aspect_ratio);
+         else
+             aspect_ratio = 1.0f;
+ 
+@@ -1418,6 +1425,8 @@ void AvFormatDecoder::InitVideoCodec(AVS
      enc->rate_emu = 0;
      enc->error_rate = 0;
  
@@ -752,7 +782,7 @@
      AVCodec *codec = avcodec_find_decoder(enc->codec_id);
      // look for a vdpau capable codec
      if (codec_is_vdpau(video_codec_id) && !CODEC_IS_VDPAU(codec))
-@@ -1465,7 +1467,7 @@ void AvFormatDecoder::InitVideoCodec(AVS
+@@ -1465,7 +1474,7 @@ void AvFormatDecoder::InitVideoCodec(AVS
      else if (codec && codec->capabilities & CODEC_CAP_DR1 &&
               (IS_DR1_PIX_FMT(enc->pix_fmt) /* HACK -- begin */
               /*   allow unknown pixel format to avoid regressions*/
@@ -761,7 +791,7 @@
  	     /* HACK -- end*/)
      {
          enc->flags          |= CODEC_FLAG_EMU_EDGE;
-@@ -2402,6 +2404,13 @@ int get_avf_buffer(struct AVCodecContext
+@@ -2402,6 +2411,13 @@ int get_avf_buffer(struct AVCodecContext
  {
      AvFormatDecoder *nd = (AvFormatDecoder *)(c->opaque);
  
@@ -775,7 +805,7 @@
      VideoFrame *frame = nd->GetNVP()->GetNextVideoFrame(true);
  
      for (int i = 0; i < 3; i++)
-@@ -4361,6 +4370,12 @@ bool AvFormatDecoder::GetFrame(DecodeTyp
+@@ -4361,6 +4377,12 @@ bool AvFormatDecoder::GetFrame(DecodeTyp
                              GetNVP()->DiscardVideoFrame(xf);
                          }
                      }
@@ -884,6 +914,36 @@
      void SwitchInputs(PlayerContext*, uint inputid);
      void ToggleInputs(PlayerContext*, uint inputid = 0);
      void SwitchCards(PlayerContext*,
+diff -Naurp mythtv-0.23-release/libs/libmythui/mythfontmanager.cpp mythtv-0.23/libs/libmythui/mythfontmanager.cpp
+--- mythtv-0.23-release/libs/libmythui/mythfontmanager.cpp	2010-02-24 02:41:32.000000000 -0500
++++ mythtv-0.23/libs/libmythui/mythfontmanager.cpp	2010-06-08 18:21:22.370095000 -0400
+@@ -23,7 +23,7 @@ static MythFontManager *gFontManager = N
+ void MythFontManager::LoadFonts(const QString &directory,
+                                 const QString &registeredFor)
+ {
+-    if (directory.isEmpty() || registeredFor.isEmpty())
++    if (directory.isEmpty() || directory == "/" || registeredFor.isEmpty())
+         return;
+ 
+     // Load the font files from this directory
+@@ -100,7 +100,7 @@ void MythFontManager::ReleaseFonts(const
+ void MythFontManager::LoadFontsFromDirectory(const QString &directory,
+                                              const QString &registeredFor)
+ {
+-    if (directory.isEmpty() || registeredFor.isEmpty())
++    if (directory.isEmpty() || directory == "/" || registeredFor.isEmpty())
+         return;
+ 
+     VERBOSE(VB_FILE + VB_EXTRA, QString("Scanning directory '%1' "
+@@ -124,7 +124,7 @@ void MythFontManager::LoadFontsFromDirec
+ void MythFontManager::LoadFontFile(const QString &fontPath,
+                                    const QString &registeredFor)
+ {
+-    if (fontPath.isEmpty() || registeredFor.isEmpty())
++    if (fontPath.isEmpty() || fontPath == "/" || registeredFor.isEmpty())
+         return;
+ 
+     QMutexLocker locker(&m_lock);
 diff -Naurp mythtv-0.23-release/libs/libmythui/mythmainwindow.cpp mythtv-0.23/libs/libmythui/mythmainwindow.cpp
 --- mythtv-0.23-release/libs/libmythui/mythmainwindow.cpp	2010-04-29 20:59:58.000000000 -0400
 +++ mythtv-0.23/libs/libmythui/mythmainwindow.cpp	2010-05-13 14:40:15.407856000 -0400


Index: mythtv.spec
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-13/mythtv.spec,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -r1.83 -r1.84
--- mythtv.spec	8 Jun 2010 19:14:57 -0000	1.83
+++ mythtv.spec	17 Jun 2010 04:46:02 -0000	1.84
@@ -65,7 +65,7 @@
 %define desktop_vendor  RPMFusion
 
 # SVN Revision number and branch ID
-%define _svnrev r25048
+%define _svnrev r25124
 %define branch release-0-23-fixes
 
 #
@@ -81,7 +81,7 @@
 %if "%{branch}" == "trunk"
 Release: 0.1.svn.%{_svnrev}%{?dist}
 %else
-Release: 3%{?dist}
+Release: 4%{?dist}
 %endif
 
 # The primary license is GPLv2+, but bits are borrowed from a number of
@@ -132,6 +132,7 @@
 Patch0:    mythtv-%{version}-svnfixes.patch
 Source1:   http://www.mythtv.org/mc/mythplugins-%{version}.tar.bz2
 Patch1:    mythplugins-%{version}-svnfixes.patch
+Patch2:    mythtv-0.23-shutup-vuvuzela.patch
 Source10:  PACKAGE-LICENSING
 Source101: mythbackend.sysconfig
 Source102: mythbackend.init
@@ -841,6 +842,7 @@
 
 cd mythtv-%{version}
 %patch0 -p1
+%patch2 -p1
 
 # Drop execute permissions on contrib bits, since they'll be %doc
     find contrib/ -type f -exec chmod -x "{}" \;
@@ -965,7 +967,7 @@
     --extra-cxxflags="%{optflags} -fomit-frame-pointer" \
 %endif
 %ifarch %{ix86}
-    --cpu=i686 --tune=i686 --enable-mmx \
+    --cpu=%{_target_cpu} --tune=%{_target_cpu} --enable-mmx \
 %endif
 %if %{with_proc_opt}
     --enable-proc-opt \
@@ -1477,6 +1479,13 @@
 ################################################################################
 
 %changelog
+* Wed Jun 16 2010 Jarod Wilson <jarod at wilsonet.com> 0.23-4
+- Update to release-0-23-fixes branch, svn revision 25124
+- Add anti-vuvuzela-filter patch from mythtv ticket #8568, because
+  I likes me some World Cup w/o the headache
+- Fix 32-bit x86 build on F11 i586 target
+- Fix a flub in the initscript from the prior build
+
 * Tue Jun 08 2010 Jarod Wilson <jarod at wilsonet.com> 0.23-3
 - Update to release-0-23-fixes branch, svn revision 25048
 - Includes pulseaudio white noise and seeking fixes (rpmfusion bz#1260)



More information about the rpmfusion-commits mailing list