From 4be1e3d6cdc48ae7c1922e91b2b158ad2803ac4c Mon Sep 17 00:00:00 2001 From: austriancoder Date: Sat, 18 Sep 2004 00:09:20 +0000 Subject: basic ac3 (dolby digital 5.1) support --- dxr3.c | 268 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 260 insertions(+), 8 deletions(-) (limited to 'dxr3.c') 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) @@ -62,6 +63,250 @@ eOSState cDxr3OsdItem::ProcessKey(eKeys Key) return Key == kOk ? osBack : cOsdItem::ProcessKey(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; } -- cgit v1.2.3