rpms/kdebase-runtime/devel kdebase-runtime-4.0.3-deinterlace-crash.patch, NONE, 1.1 kdebase-runtime.spec, 1.26, 1.27

Kevin Kofler (kkofler) fedora-extras-commits at redhat.com
Sat Apr 5 15:25:04 UTC 2008


Author: kkofler

Update of /cvs/pkgs/rpms/kdebase-runtime/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12725/devel

Modified Files:
	kdebase-runtime.spec 
Added Files:
	kdebase-runtime-4.0.3-deinterlace-crash.patch 
Log Message:
* Sat Apr 05 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.0.3-4
- don't crash if we don't have deinterlacing support in xine-lib (#440299)

kdebase-runtime-4.0.3-deinterlace-crash.patch:

--- NEW FILE kdebase-runtime-4.0.3-deinterlace-crash.patch ---
diff -ur kdebase-runtime-4.0.3/phonon/xine/kcm/xineoptions.cpp kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/kcm/xineoptions.cpp
--- kdebase-runtime-4.0.3/phonon/xine/kcm/xineoptions.cpp	2008-01-05 00:54:43.000000000 +0100
+++ kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/kcm/xineoptions.cpp	2008-04-05 17:07:45.000000000 +0200
@@ -30,7 +30,7 @@
 K_EXPORT_PLUGIN(XineOptionsFactory("kcm_phononxine"))
 
 XineOptions::XineOptions(QWidget *parent, const QVariantList &args)
-    : KCModule(XineOptionsFactory::componentData(), parent, args)
+    : KCModule(XineOptionsFactory::componentData(), parent, args), m_noDeinterlace(false)
 {
     setupUi(this);
 
@@ -60,35 +60,39 @@
         xine_init(xine);
         xine_video_port_t *nullVideoPort = xine_open_video_driver(xine, "auto", XINE_VISUAL_TYPE_NONE, 0);
         xine_post_t *deinterlacer = xine_post_init(xine, "tvtime", 1, 0, &nullVideoPort);
-        Q_ASSERT(deinterlacer);
-        xine_post_in_t *paraInput = xine_post_input(deinterlacer, "parameters");
-        Q_ASSERT(paraInput);
-        Q_ASSERT(paraInput->data);
-        xine_post_api_t *api = reinterpret_cast<xine_post_api_t *>(paraInput->data);
-        xine_post_api_descr_t *desc = api->get_param_descr();
-        for (int i = 0; desc->parameter[i].type != POST_PARAM_TYPE_LAST; ++i) {
-            xine_post_api_parameter_t &p = desc->parameter[i];
-            switch (p.type) {
-            case POST_PARAM_TYPE_INT:          /* integer (or vector of integers)    */
-                if (0 == strcmp(p.name, "method") && p.enum_values) {
-                    for (int j = 0; p.enum_values[j]; ++j) {
-                        deinterlaceMethodBox->addItem(p.enum_values[j]);
+        if (deinterlacer) {
+            xine_post_in_t *paraInput = xine_post_input(deinterlacer, "parameters");
+            Q_ASSERT(paraInput);
+            Q_ASSERT(paraInput->data);
+            xine_post_api_t *api = reinterpret_cast<xine_post_api_t *>(paraInput->data);
+            xine_post_api_descr_t *desc = api->get_param_descr();
+            for (int i = 0; desc->parameter[i].type != POST_PARAM_TYPE_LAST; ++i) {
+                xine_post_api_parameter_t &p = desc->parameter[i];
+                switch (p.type) {
+                case POST_PARAM_TYPE_INT:          /* integer (or vector of integers)    */
+                    if (0 == strcmp(p.name, "method") && p.enum_values) {
+                        for (int j = 0; p.enum_values[j]; ++j) {
+                            deinterlaceMethodBox->addItem(p.enum_values[j]);
+                        }
                     }
+                    break;
+                case POST_PARAM_TYPE_DOUBLE:       /* double (or vector of doubles)      */
+                case POST_PARAM_TYPE_CHAR:         /* char (or vector of chars = string) */
+                case POST_PARAM_TYPE_STRING:       /* (char *), ASCIIZ                   */
+                case POST_PARAM_TYPE_STRINGLIST:   /* (char **) list, NULL terminated    */
+                case POST_PARAM_TYPE_BOOL:         /* integer (0 or 1)                   */
+                    break;
+                case POST_PARAM_TYPE_LAST:         /* terminator of parameter list       */
+                default:
+                    kFatal() << "invalid type";
                 }
-                break;
-            case POST_PARAM_TYPE_DOUBLE:       /* double (or vector of doubles)      */
-            case POST_PARAM_TYPE_CHAR:         /* char (or vector of chars = string) */
-            case POST_PARAM_TYPE_STRING:       /* (char *), ASCIIZ                   */
-            case POST_PARAM_TYPE_STRINGLIST:   /* (char **) list, NULL terminated    */
-            case POST_PARAM_TYPE_BOOL:         /* integer (0 or 1)                   */
-                break;
-            case POST_PARAM_TYPE_LAST:         /* terminator of parameter list       */
-            default:
-                kFatal() << "invalid type";
             }
-        }
 
-        xine_post_dispose(xine, deinterlacer);
+            xine_post_dispose(xine, deinterlacer);
+        } else {
+            m_noDeinterlace = true;
+            deinterlaceGroupBox->setEnabled(false);
+        }
         xine_close_video_driver(xine, nullVideoPort);
         xine_exit(xine);
     }
@@ -108,29 +112,35 @@
 {
     KConfigGroup cg(m_config, "Settings");
     m_ossCheckbox->setChecked(cg.readEntry("showOssDevices", false));
-    deinterlaceMediaList->item(0)->setCheckState(cg.readEntry("deinterlaceDVD", true) ? Qt::Checked : Qt::Unchecked);
-    deinterlaceMediaList->item(1)->setCheckState(cg.readEntry("deinterlaceVCD", false) ? Qt::Checked : Qt::Unchecked);
-    deinterlaceMediaList->item(2)->setCheckState(cg.readEntry("deinterlaceFile", false) ? Qt::Checked : Qt::Unchecked);
-    deinterlaceMethodBox->setCurrentIndex(cg.readEntry("deinterlaceMethod", 0));
+    if (!m_noDeinterlace) {
+        deinterlaceMediaList->item(0)->setCheckState(cg.readEntry("deinterlaceDVD", true) ? Qt::Checked : Qt::Unchecked);
+        deinterlaceMediaList->item(1)->setCheckState(cg.readEntry("deinterlaceVCD", false) ? Qt::Checked : Qt::Unchecked);
+        deinterlaceMediaList->item(2)->setCheckState(cg.readEntry("deinterlaceFile", false) ? Qt::Checked : Qt::Unchecked);
+        deinterlaceMethodBox->setCurrentIndex(cg.readEntry("deinterlaceMethod", 0));
+    }
 }
 
 void XineOptions::save()
 {
     KConfigGroup cg(m_config, "Settings");
     cg.writeEntry("showOssDevices", m_ossCheckbox->isChecked());
-    cg.writeEntry("deinterlaceDVD", deinterlaceMediaList->item(0)->checkState() == Qt::Checked);
-    cg.writeEntry("deinterlaceVCD", deinterlaceMediaList->item(1)->checkState() == Qt::Checked);
-    cg.writeEntry("deinterlaceFile", deinterlaceMediaList->item(2)->checkState() == Qt::Checked);
-    cg.writeEntry("deinterlaceMethod", deinterlaceMethodBox->currentIndex());
+    if (!m_noDeinterlace) {
+        cg.writeEntry("deinterlaceDVD", deinterlaceMediaList->item(0)->checkState() == Qt::Checked);
+        cg.writeEntry("deinterlaceVCD", deinterlaceMediaList->item(1)->checkState() == Qt::Checked);
+        cg.writeEntry("deinterlaceFile", deinterlaceMediaList->item(2)->checkState() == Qt::Checked);
+        cg.writeEntry("deinterlaceMethod", deinterlaceMethodBox->currentIndex());
+    }
 }
 
 void XineOptions::defaults()
 {
     m_ossCheckbox->setChecked(false);
-    deinterlaceMediaList->item(0)->setCheckState(Qt::Checked);
-    deinterlaceMediaList->item(1)->setCheckState(Qt::Unchecked);
-    deinterlaceMediaList->item(2)->setCheckState(Qt::Unchecked);
-    deinterlaceMethodBox->setCurrentIndex(0);
+    if (!m_noDeinterlace) {
+        deinterlaceMediaList->item(0)->setCheckState(Qt::Checked);
+        deinterlaceMediaList->item(1)->setCheckState(Qt::Unchecked);
+        deinterlaceMediaList->item(2)->setCheckState(Qt::Unchecked);
+        deinterlaceMethodBox->setCurrentIndex(0);
+    }
 }
 
 #include "xineoptions.moc"
diff -ur kdebase-runtime-4.0.3/phonon/xine/kcm/xineoptions.h kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/kcm/xineoptions.h
--- kdebase-runtime-4.0.3/phonon/xine/kcm/xineoptions.h	2008-01-05 00:54:43.000000000 +0100
+++ kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/kcm/xineoptions.h	2008-04-05 17:04:20.000000000 +0200
@@ -42,6 +42,7 @@
 
     private:
         KSharedConfigPtr m_config;
+        bool m_noDeinterlace;
 };
 
 #endif // PHONON_XINEOPTIONS_H
diff -ur kdebase-runtime-4.0.3/phonon/xine/kcm/xineoptions.ui kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/kcm/xineoptions.ui
--- kdebase-runtime-4.0.3/phonon/xine/kcm/xineoptions.ui	2008-03-27 21:34:21.000000000 +0100
+++ kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/kcm/xineoptions.ui	2008-04-05 17:07:25.000000000 +0200
@@ -85,7 +85,7 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="groupBox" >
+    <widget class="QGroupBox" name="deinterlaceGroupBox" >
      <property name="title" >
       <string>Deinterlacing</string>
      </property>
diff -ur kdebase-runtime-4.0.3/phonon/xine/xinestream.cpp kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/xinestream.cpp
--- kdebase-runtime-4.0.3/phonon/xine/xinestream.cpp	2008-03-27 21:34:21.000000000 +0100
+++ kdebase-runtime-4.0.3-deinterlace-crash/phonon/xine/xinestream.cpp	2008-04-05 17:10:33.000000000 +0200
@@ -171,33 +171,33 @@
             videoPort = XineEngine::nullVideoPort();
         }
         m_deinterlacer = xine_post_init(XineEngine::xine(), "tvtime", 1, 0, &videoPort);
-        Q_ASSERT(m_deinterlacer);
-
-        // set method
-        xine_post_in_t *paraInput = xine_post_input(m_deinterlacer, "parameters");
-        Q_ASSERT(paraInput);
-        Q_ASSERT(paraInput->data);
-        xine_post_api_t *api = reinterpret_cast<xine_post_api_t *>(paraInput->data);
-        xine_post_api_descr_t *desc = api->get_param_descr();
-        char *pluginParams = static_cast<char *>(malloc(desc->struct_size));
-        api->get_parameters(m_deinterlacer, pluginParams);
-        for (int i = 0; desc->parameter[i].type != POST_PARAM_TYPE_LAST; ++i) {
-            xine_post_api_parameter_t &p = desc->parameter[i];
-            if (p.type == POST_PARAM_TYPE_INT && 0 == strcmp(p.name, "method")) {
-                int *value = reinterpret_cast<int *>(pluginParams + p.offset);
-                *value = XineEngine::deinterlaceMethod();
-                break;
+        if (m_deinterlacer) {
+            // set method
+            xine_post_in_t *paraInput = xine_post_input(m_deinterlacer, "parameters");
+            Q_ASSERT(paraInput);
+            Q_ASSERT(paraInput->data);
+            xine_post_api_t *api = reinterpret_cast<xine_post_api_t *>(paraInput->data);
+            xine_post_api_descr_t *desc = api->get_param_descr();
+            char *pluginParams = static_cast<char *>(malloc(desc->struct_size));
+            api->get_parameters(m_deinterlacer, pluginParams);
+            for (int i = 0; desc->parameter[i].type != POST_PARAM_TYPE_LAST; ++i) {
+                xine_post_api_parameter_t &p = desc->parameter[i];
+                if (p.type == POST_PARAM_TYPE_INT && 0 == strcmp(p.name, "method")) {
+                    int *value = reinterpret_cast<int *>(pluginParams + p.offset);
+                    *value = XineEngine::deinterlaceMethod();
+                    break;
+                }
             }
-        }
-        api->set_parameters(m_deinterlacer, pluginParams);
-        free(pluginParams);
+            api->set_parameters(m_deinterlacer, pluginParams);
+            free(pluginParams);
 
-        // connect to xine_stream_t
-        xine_post_in_t *x = xine_post_input(m_deinterlacer, "video");
-        Q_ASSERT(x);
-        xine_post_out_t *videoOutputPort = xine_get_video_source(m_stream);
-        Q_ASSERT(videoOutputPort);
-        xine_post_wire(videoOutputPort, x);
+            // connect to xine_stream_t
+            xine_post_in_t *x = xine_post_input(m_deinterlacer, "video");
+            Q_ASSERT(x);
+            xine_post_out_t *videoOutputPort = xine_get_video_source(m_stream);
+            Q_ASSERT(videoOutputPort);
+            xine_post_wire(videoOutputPort, x);
+        }
     } else if (m_deinterlacer) {
         xine_post_dispose(XineEngine::xine(), m_deinterlacer);
         m_deinterlacer = 0;


Index: kdebase-runtime.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kdebase-runtime/devel/kdebase-runtime.spec,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- kdebase-runtime.spec	3 Apr 2008 16:57:49 -0000	1.26
+++ kdebase-runtime.spec	5 Apr 2008 15:24:27 -0000	1.27
@@ -9,7 +9,7 @@
 Name:          kdebase-runtime
 Summary:       K Desktop Environment - Runtime 
 Version:       4.0.3
-Release:       3%{?dist}
+Release:       4%{?dist}
 
 License:       GPLv2
 Group:         User Interface/Desktops
@@ -17,6 +17,8 @@
 Source0:       ftp://ftp.kde.org/pub/kde/stable/%{version}/src/kdebase-runtime-%{version}.tar.bz2
 # KDE 3 version of this service description
 Source1:       khelpcenter.desktop
+# Don't crash if we don't have deinterlacing support in xine-lib (#440299)
+Patch0:        kdebase-runtime-4.0.3-deinterlace-crash.patch
 BuildRoot:     %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 #ifarch noarch
@@ -87,6 +89,7 @@
 
 %prep
 %setup -q -n kdebase-runtime-%{version}
+%patch0 -p1 -b .deinterlace-crash
 
 
 %build
@@ -287,6 +290,9 @@
 
 
 %changelog
+* Sat Apr 05 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.0.3-4
+- don't crash if we don't have deinterlacing support in xine-lib (#440299)
+
 * Thu Apr 03 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.0.3-3
 - rebuild for the new %%{_kde4_buildtype}
 




More information about the fedora-extras-commits mailing list