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;