summaryrefslogtreecommitdiff
path: root/dxr3.c
diff options
context:
space:
mode:
authoraustriancoder <austriancoder>2004-09-18 00:09:20 +0000
committeraustriancoder <austriancoder>2004-09-18 00:09:20 +0000
commit4be1e3d6cdc48ae7c1922e91b2b158ad2803ac4c (patch)
tree983f0b74e61f6e84baadbd3027c3835bef778856 /dxr3.c
parent48d3d4fe3b7e7e89f734c9b398d5b59d9181715d (diff)
downloadvdr-plugin-dxr3-4be1e3d6cdc48ae7c1922e91b2b158ad2803ac4c.tar.gz
vdr-plugin-dxr3-4be1e3d6cdc48ae7c1922e91b2b158ad2803ac4c.tar.bz2
basic ac3 (dolby digital 5.1) support
Diffstat (limited to 'dxr3.c')
-rw-r--r--dxr3.c268
1 files changed, 260 insertions, 8 deletions
diff --git a/dxr3.c b/dxr3.c
index 0024a48..b030779 100644
--- a/dxr3.c
+++ b/dxr3.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
-* $Id: dxr3.c,v 1.1 2004/08/05 23:05:21 austriancoder Exp $
+* $Id: dxr3.c,v 1.2 2004/09/18 00:11:11 austriancoder Exp $
*/
@@ -12,14 +12,15 @@
#include "dxr3syncbuffer.h"
#include "dxr3configdata.h"
#include "dxr3interface.h"
+#include "dxr3i18n.h"
+#include "dxr3cpu.h"
+#include "dxr3dolbydigital.h"
#include "dxr3.h"
static const char *VERSION = "0.2.3-pre3-cvs";
static const char *DESCRIPTION = "DXR3-MPEG decoder plugin";
static const char *MAINMENUENTRY = "DXR3";
-#include "dxr3cpu.h"
-
// ==================================
// 'message-handler' for the main screen
eOSState cDxr3OsdItem::ProcessKey(eKeys Key)
@@ -63,6 +64,250 @@ eOSState cDxr3OsdItem::ProcessKey(eKeys Key)
}
// ==================================
+// special osd item to change color settings
+cDxr3OsdColorItem::cDxr3OsdColorItem(const char* Name, eDxr3ColorItem item)
+:cMenuEditItem(Name), m_item(item)
+{
+ m_value = 0;
+ m_min = 0;
+ m_max = 32;
+
+ // get vale from setup.conf
+ switch (m_item)
+ {
+ case DXR3_BRIGHTNESS:
+ m_value = cDxr3ConfigData::Instance().GetBrightness();
+ break;
+
+ case DXR3_CONTRAST:
+ m_value = cDxr3ConfigData::Instance().GetContrast();
+ break;
+
+ case DXR3_SATURATION:
+ m_value = cDxr3ConfigData::Instance().GetSaturation();
+ break;
+ };
+
+ Set();
+}
+
+// ==================================
+// react to keypresses
+eOSState cDxr3OsdColorItem::ProcessKey(eKeys Key)
+{
+ eOSState state = cMenuEditItem::ProcessKey(Key);
+
+ if (state == osUnknown)
+ {
+ int newValue = m_value;
+ Key = NORMALKEY(Key);
+ switch (Key)
+ {
+ case kNone: break;
+ case k0 ... k9:
+ if (fresh)
+ {
+ m_value = 0;
+ fresh = false;
+ }
+ newValue = m_value * 10 + (Key - k0);
+ break;
+ case kLeft: // TODO might want to increase the delta if repeated quickly?
+ newValue = m_value - 1;
+ fresh = true;
+ break;
+ case kRight:
+ newValue = m_value + 1;
+ fresh = true;
+ break;
+ default:
+ if (m_value < m_min) { m_value = m_min; Set(); }
+ if (m_value > m_max) { m_value = m_max; Set(); }
+ return state;
+ }
+ if ((!fresh || m_min <= newValue) && newValue <= m_max)
+ {
+ m_value = newValue;
+ Set();
+ }
+ state = osContinue;
+ }
+ return state;
+}
+
+// ==================================
+// set caption and call hardware ioctl's
+void cDxr3OsdColorItem::Set()
+{
+ // real value with rounding
+ int realValue = int(m_value * 31.25);
+
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%s", "Hallo");
+ SetValue(buf);
+}
+
+/*
+// ==================================
+// special osd item to change color settings
+cDxr3OsdColorItem::cDxr3OsdColorItem(const char* Name, eDxr3ColorItem item)
+:cOsdItem(Name), m_item(item)
+{
+ // get vale from setup.conf
+ switch (m_item)
+ {
+ case DXR3_BRIGHTNESS:
+ m_value = cDxr3ConfigData::Instance().GetBrightness();
+ break;
+
+ case DXR3_CONTRAST:
+ m_value = cDxr3ConfigData::Instance().GetContrast();
+ break;
+
+ case DXR3_SATURATION:
+ m_value = cDxr3ConfigData::Instance().GetSaturation();
+ break;
+ };
+
+ // allowed values: 0 - 32
+ m_min = 0;
+ m_max = 32;
+
+ m_name = strdup(Name);
+ m_caption = NULL;
+
+ Set();
+}
+
+// ==================================
+// set caption and call hardware ioctl's
+void cDxr3OsdColorItem::Set()
+{
+/*
+ SetValue(SettingBar[m_value]);
+
+ // real value with rounding
+ int realValue = int(m_value * 31.25);
+
+ switch (m_item)
+ {
+ case DXR3_BRIGHTNESS:
+ cDxr3Interface::Instance().SetBrightness(realValue);
+ cDxr3ConfigData::Instance().SetBrightness(m_value);
+ break;
+
+ case DXR3_CONTRAST:
+ cDxr3Interface::Instance().SetContrast(realValue);
+ cDxr3ConfigData::Instance().SetContrast(m_value);
+ break;
+
+ case DXR3_SATURATION:
+ cDxr3Interface::Instance().SetSaturation(realValue);
+ cDxr3ConfigData::Instance().SetSaturation(m_value);
+ break;
+ };
+*//*
+}
+
+// ==================================
+void cDxr3OsdColorItem::SetValue(const char *Value)
+{
+/*
+ free(m_caption);
+ m_caption = strdup(Value);
+ char *buffer = NULL;
+ asprintf(&buffer, "%s:\t%s", m_name, m_caption);
+ SetText(buffer, false);
+ cStatus::MsgOsdCurrentItem(buffer);
+*//*
+}
+
+// ==================================
+// react to keypresses
+eOSState cDxr3OsdColorItem::ProcessKey(eKeys Key)
+{
+/*
+ eOSState state = osUnknown;
+
+ if (state == osUnknown)
+ {
+ int newValue = m_value;
+ Key = NORMALKEY(Key);
+
+ switch (Key)
+ {
+ case kNone:
+ break;
+
+ case k0 ... k9:
+ if (fresh)
+ {
+ m_value = 0;
+ fresh = false;
+ }
+ newValue = m_value * 10 + (Key - k0);
+ break;
+
+ case kLeft: // TODO might want to increase the delta if repeated quickly?
+ newValue = m_value - 1;
+ fresh = true;
+ break;
+
+ case kRight:
+ newValue = m_value + 1;
+ fresh = true;
+ break;
+
+ default:
+ if (m_value < m_min) { m_value = m_min; Set(); }
+ if (m_value > m_max) { m_value = m_max; Set(); }
+ return state;
+ }
+
+ if ((!fresh || m_min <= newValue) && newValue <= m_max)
+ {
+ m_value = newValue;
+ Set();
+ }
+ state = osContinue;
+ }
+ return state;
+*/
+//}
+
+
+// ==================================
+// the main menu of the plugin
+cDxr3OsdMenu::cDxr3OsdMenu() : cOsdMenu(tr("DXR3 Adjustment"))
+{
+ b = 0;
+ c = 10;
+ s = 0;
+
+ Clear();
+ SetHasHotkeys();
+ Add(new cDxr3OsdItem(tr("Reset DXR3 Hardware"), DXR3_RESET_HARDWARE));
+ Add(new cDxr3OsdItem(tr("Toggle Force LetterBox"), DXR3_FORCE_LETTER_BOX));
+
+ // switch between differen output modes
+ if (cDxr3ConfigData::Instance().GetUseDigitalOut())
+ {
+ Add(new cDxr3OsdItem(tr("Analog Output"), DXR3_ANALOG_OUT));
+ }
+ else
+ {
+ Add(new cDxr3OsdItem(tr("Digital Output"), DXR3_DIGITAL_OUT));
+ }
+
+ //SettingBar
+ Add(new cDxr3OsdColorItem(tr("Brightness"), DXR3_BRIGHTNESS));
+// Add(new cMenuEditStraItem(tr("Brightness"), &b, 33, SettingBar));
+// Add(new cMenuEditStraItem(tr("Contrast"), &c, 33, SettingBar));
+// Add(new cMenuEditStraItem(tr("Saturation"), &s, 33, SettingBar));
+}
+
+
+// ==================================
// setup menu
cMenuSetupDxr3::cMenuSetupDxr3(void)
{
@@ -82,11 +327,11 @@ cMenuSetupDxr3::cMenuSetupDxr3(void)
// save menu values
void cMenuSetupDxr3::Store(void)
{
- SetupStore("UseDigitalOut", cDxr3ConfigData::Instance().SetUseDigitalOut(newUseDigitalOut));
- SetupStore("Dxr3Card", cDxr3ConfigData::Instance().SetDxr3Card(newDxr3Card));
- SetupStore("Dxr3VideoMode", cDxr3ConfigData::Instance().SetVideoMode((eVideoMode) newVideoMode));
- SetupStore("Dxr3Debug", cDxr3ConfigData::Instance().SetDebug(newDebug));
- SetupStore("Dxr3DebugLevel", cDxr3ConfigData::Instance().SetDebugLevel(newDebugLevel));
+ SetupStore("UseDigitalOut", cDxr3ConfigData::Instance().SetUseDigitalOut(newUseDigitalOut));
+ SetupStore("Dxr3Card", cDxr3ConfigData::Instance().SetDxr3Card(newDxr3Card));
+ SetupStore("Dxr3VideoMode", cDxr3ConfigData::Instance().SetVideoMode((eVideoMode) newVideoMode));
+ SetupStore("Dxr3Debug", cDxr3ConfigData::Instance().SetDebug(newDebug));
+ SetupStore("Dxr3DebugLevel", cDxr3ConfigData::Instance().SetDebugLevel(newDebugLevel));
}
// ==================================
@@ -139,14 +384,18 @@ bool cPluginDxr3::ProcessArgs(int argc, char *argv[])
// ==================================
bool cPluginDxr3::Start()
{
+ new cDxr3DolbyDigital();
return true;
}
// ==================================
bool cPluginDxr3::Initialize()
{
+ RegisterI18n(Phrases);
+
new cDxr3CPU();
cDxr3Device::Instance();
+
return true;
}
@@ -170,6 +419,9 @@ bool cPluginDxr3::SetupParse(const char *Name, const char *Value)
if (!strcasecmp(Name, "Dxr3Debug")) { cDxr3ConfigData::Instance().SetDebug(atoi(Value)); return true; }
if (!strcasecmp(Name, "Dxr3VideoMode")) { cDxr3ConfigData::Instance().SetVideoMode((eVideoMode) atoi(Value)); return true;}
if (!strcasecmp(Name, "Dxr3DebugLevel")) { cDxr3ConfigData::Instance().SetDebugLevel(atoi(Value)); return true;}
+ if (!strcasecmp(Name, "Dxr3Contrast")) { cDxr3ConfigData::Instance().SetContrast(atoi(Value)); return true;}
+ if (!strcasecmp(Name, "Dxr3Brightness")) { cDxr3ConfigData::Instance().SetBrightness(atoi(Value)); return true;}
+ if (!strcasecmp(Name, "Dxr3Saturation")) { cDxr3ConfigData::Instance().SetSaturation(atoi(Value)); return true;}
return false;
}