summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.c34
-rw-r--r--config.h25
-rw-r--r--device.c9
-rw-r--r--device.h7
-rw-r--r--equalizer.c8
-rw-r--r--frontend.c6
-rw-r--r--frontend.h5
-rw-r--r--frontend_local.c11
-rw-r--r--frontend_svr.c7
-rw-r--r--i18n.c123
-rw-r--r--menu.c12
-rw-r--r--setup_menu.c89
12 files changed, 282 insertions, 54 deletions
diff --git a/config.c b/config.c
index ae482440..e0f93032 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c,v 1.6 2006-08-19 19:18:21 phintuka Exp $
+ * $Id: config.c,v 1.7 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -66,6 +66,14 @@ const char *config_t::s_audioVisualizationNames[] =
const char *config_t::s_audioVisualizations[] =
{"none", "goom", "oscope", "fftscope", "fftgraph", NULL};
+/* xine, audio_alsa_out.c */
+const char *config_t::s_speakerArrangements[] =
+ {"Mono 1.0", "Stereo 2.0", "Headphones 2.0", "Stereo 2.1",
+ "Surround 3.0", "Surround 4.0", "Surround 4.1",
+ "Surround 5.0", "Surround 5.1", "Surround 6.0",
+ "Surround 6.1", "Surround 7.1", "Pass Through",
+ NULL};
+
static char *strcatrealloc(char *dest, const char *src)
{
if (!src || !*src)
@@ -127,7 +135,16 @@ bool config_t::IsImageFile(const char *fname)
return false;
}
-
+const char *config_t::AutocropOptions(void)
+{
+ if(autocrop) {
+ static char buffer[128];
+ sprintf(buffer, "enable_autodetect=%d,soft_start=%d,stabilize=%d,enable_subs_detect=%d",
+ autocrop_autodetect, autocrop_soft, autocrop_fixedsize, autocrop_subs);
+ return buffer;
+ }
+ return NULL;
+}
config_t::config_t() {
memset(this, 0, sizeof(config_t));
@@ -139,6 +156,7 @@ config_t::config_t() {
strcpy(audio_driver , s_audioDrivers[AUDIO_DRIVER_ALSA]);
strcpy(audio_port , "default");
+ speaker_type = SPEAKERS_STEREO;
post_plugins = NULL;
@@ -173,7 +191,11 @@ config_t::config_t() {
height = 576;
scale_video = 0;
field_order = 0;
- autocrop = 0;
+ autocrop = 0;
+ autocrop_autodetect = 1;
+ autocrop_soft = 1;
+ autocrop_fixedsize = 1;
+ autocrop_subs = 1;
remote_mode = 0;
listen_port = LISTEN_PORT;
@@ -304,6 +326,8 @@ bool config_t::SetupParse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "Audio.Driver")) strcpy(audio_driver, Value);
else if (!strcasecmp(Name, "Audio.Port")) strcpy(audio_port, Value);
+ else if (!strcasecmp(Name, "Audio.Speakers")) speaker_type = strstra(Value, s_speakerArrangements,
+ SPEAKERS_STEREO);
else if (!strcasecmp(Name, "Audio.Delay")) audio_delay = atoi(Value);
else if (!strcasecmp(Name, "Audio.Compression")) audio_compression = atoi(Value);
else if (!strcasecmp(Name, "Audio.Visualization")) strcpy(audio_visualization, Value);
@@ -345,6 +369,10 @@ bool config_t::SetupParse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "Video.Deinterlace")) strcpy(deinterlace_method, Value);
else if (!strcasecmp(Name, "Video.FieldOrder")) field_order=atoi(Value)?1:0;
else if (!strcasecmp(Name, "Video.AutoCrop")) autocrop = atoi(Value);
+ else if (!strcasecmp(Name, "Video.AutoCrop.AutoDetect")) autocrop_autodetect = atoi(Value);
+ else if (!strcasecmp(Name, "Video.AutoCrop.SoftStart")) autocrop_soft = atoi(Value);
+ else if (!strcasecmp(Name, "Video.AutoCrop.FixedSize")) autocrop_fixedsize = atoi(Value);
+ else if (!strcasecmp(Name, "Video.AutoCrop.DetectSubs")) autocrop_subs = atoi(Value);
else if (!strcasecmp(Name, "Video.HUE")) hue = atoi(Value);
else if (!strcasecmp(Name, "Video.Saturation")) saturation = atoi(Value);
else if (!strcasecmp(Name, "Video.Contrast")) contrast = atoi(Value);
diff --git a/config.h b/config.h
index 86d3df9c..2dc03a89 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h,v 1.5 2006-08-19 19:18:21 phintuka Exp $
+ * $Id: config.h,v 1.6 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -104,6 +104,22 @@
#define AUDIO_VIS_GOOM 1
#define AUDIO_VIS_count 5
+/* speaker arrangements: xine, audio_out_alsa.c */
+#define SPEAKERS_MONO 0
+#define SPEAKERS_STEREO 1
+#define SPEAKERS_HEADPHONES 2
+#define SPEAKERS_SURROUND21 3
+#define SPEAKERS_SURROUND3 4
+#define SPEAKERS_SURROUND4 5
+#define SPEAKERS_SURROUND41 6
+#define SPEAKERS_SURROUND5 7
+#define SPEAKERS_SURROUND51 8
+#define SPEAKERS_SURROUND6 9
+#define SPEAKERS_SURROUND61 10
+#define SPEAKERS_SURROUND71 11
+#define SPEAKERS_A52_PASSTHRU 12
+#define SPEAKERS_count 13
+
typedef enum {
ShowMenu = 0,
ShowEq = 1,
@@ -134,12 +150,14 @@ class config_t {
static const char *s_audioEqNames[];
static const char *s_audioVisualizations[];
static const char *s_audioVisualizationNames[];
+ static const char *s_speakerArrangements[];
public:
char video_driver[32];
char video_port[64]; // X11: DISPLAY=...
char audio_driver[32];
char audio_port[32];
+ int speaker_type;
char *post_plugins; // from command line options
int audio_delay; // in ms
@@ -176,6 +194,10 @@ class config_t {
int scale_video;
int field_order;
int autocrop;
+ int autocrop_autodetect;
+ int autocrop_soft;
+ int autocrop_fixedsize;
+ int autocrop_subs;
int exit_on_close;
int remote_mode;
@@ -209,6 +231,7 @@ class config_t {
bool IsImageFile(const char *);
bool IsVideoFile(const char *);
+ const char *AutocropOptions(void);
protected:
bool ProcessArg(const char *Name, const char *Value);
diff --git a/device.c b/device.c
index 76cf0c7f..05b92dfb 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c,v 1.12 2006-08-21 21:24:05 phintuka Exp $
+ * $Id: device.c,v 1.13 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -324,18 +324,19 @@ void cXinelibDevice::ConfigurePostprocessing(const char *deinterlace_method,
int audio_delay,
int audio_compression,
const int *audio_equalizer,
- int audio_surround)
+ int audio_surround,
+ int speaker_type)
{
TRACEF("cXinelibDevice::ConfigurePostprocessing");
if(m_local)
m_local->ConfigurePostprocessing(deinterlace_method, audio_delay,
audio_compression, audio_equalizer,
- audio_surround);
+ audio_surround, speaker_type);
if(m_server)
m_server->ConfigurePostprocessing(deinterlace_method, audio_delay,
audio_compression, audio_equalizer,
- audio_surround);
+ audio_surround, speaker_type);
}
void cXinelibDevice::ConfigurePostprocessing(const char *name, bool on,
diff --git a/device.h b/device.h
index 4e556d4b..2330df42 100644
--- a/device.h
+++ b/device.h
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: device.h,v 1.7 2006-08-18 02:22:48 phintuka Exp $
+ * $Id: device.h,v 1.8 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -30,6 +30,8 @@ class cXinelibDevice : public cDevice
cXinelibDevice(); //
cXinelibDevice(cXinelibDevice&); // no copy constructor
+ //cList<cFunctorBase> *m_MainThreadFunctors; // function calls waiting to be executed in VDR main thread context
+
public:
virtual ~cXinelibDevice();
@@ -99,7 +101,8 @@ class cXinelibDevice : public cDevice
int audio_delay,
int audio_compression,
const int *audio_equalizer,
- int audio_surround);
+ int audio_surround,
+ int speaker_type);
void ConfigurePostprocessing(const char *name, bool on=true,
const char *args=NULL);
void ConfigureVideo(int hue, int saturation, int brightness, int contrast);
diff --git a/equalizer.c b/equalizer.c
index ebadd34e..9a957cdd 100644
--- a/equalizer.c
+++ b/equalizer.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: equalizer.c,v 1.1 2006-06-03 10:01:17 phintuka Exp $
+ * $Id: equalizer.c,v 1.2 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -70,14 +70,14 @@ eOSState cEqualizer::ProcessKey(eKeys key)
if(m_Values[m_Current] < ADJUST_MIN)
m_Values[m_Current] = ADJUST_MIN;
DrawBar(m_Current,true);
- cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround);
+ cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround, xc.speaker_type);
break;
case kUp:
m_Values[m_Current] += ADJUST_STEP;
if(m_Values[m_Current] > ADJUST_MAX)
m_Values[m_Current] = ADJUST_MAX;
DrawBar(m_Current,true);
- cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround);
+ cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround, xc.speaker_type);
break;
case kLeft:
if(m_Current>0) {
@@ -94,7 +94,7 @@ eOSState cEqualizer::ProcessKey(eKeys key)
}
break;
case kBack:
- cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, xc.audio_equalizer, xc.audio_surround);
+ cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
return osEnd;
case kOk:
memcpy(xc.audio_equalizer, m_Values, sizeof(xc.audio_equalizer));
diff --git a/frontend.c b/frontend.c
index cc6d2cda..815b1ebd 100644
--- a/frontend.c
+++ b/frontend.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: frontend.c,v 1.10 2006-08-16 21:46:34 phintuka Exp $
+ * $Id: frontend.c,v 1.11 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -538,7 +538,8 @@ int cXinelibThread::ConfigurePostprocessing(const char *deinterlace_method,
int audio_delay,
int audio_compression,
const int *audio_equalizer,
- int audio_surround)
+ int audio_surround,
+ int speaker_type)
{
char tmp[255];
int r = true;
@@ -550,6 +551,7 @@ int cXinelibThread::ConfigurePostprocessing(const char *deinterlace_method,
r = Xine_Control("AUDIODELAY", audio_delay) && r;
r = Xine_Control("AUDIOCOMPRESSION", audio_compression) && r;
r = Xine_Control("AUDIOSURROUND", audio_surround) && r;
+ r = Xine_Control("SPEAKERS", speaker_type) && r;
sprintf(tmp,"EQUALIZER %d %d %d %d %d %d %d %d %d %d",
audio_equalizer[0],audio_equalizer[1],
audio_equalizer[2],audio_equalizer[3],
diff --git a/frontend.h b/frontend.h
index 5d28a774..7804c895 100644
--- a/frontend.h
+++ b/frontend.h
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: frontend.h,v 1.5 2006-07-07 05:32:14 phintuka Exp $
+ * $Id: frontend.h,v 1.6 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -110,7 +110,8 @@ class cXinelibThread : public cThread, public cListObject
int audio_delay,
int audio_compression,
const int *audio_equalizer,
- int audio_surround);
+ int audio_surround,
+ int speaker_type);
virtual int ConfigurePostprocessing(const char *name, bool on, const char *args);
virtual int ConfigureVideo(int hue, int saturation,
int brightness, int contrast);
diff --git a/frontend_local.c b/frontend_local.c
index fa998e07..b0b7a369 100644
--- a/frontend_local.c
+++ b/frontend_local.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: frontend_local.c,v 1.7 2006-08-16 21:46:34 phintuka Exp $
+ * $Id: frontend_local.c,v 1.8 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -369,8 +369,8 @@ void cXinelibLocal::Action(void)
fe = curr_fe;
if(m_bReconfigRequest) {
- if(!fe->xine_init(fe, xc.audio_driver, xc.audio_port,
- xc.video_driver,
+ if(!fe->xine_init(fe, xc.audio_driver, xc.audio_port,
+ xc.video_driver,
xc.pes_buffers, xc.decoder_priority,
xc.post_plugins)) {
LOGMSG("cXinelibLocal: Error initializing frontend");
@@ -404,10 +404,11 @@ void cXinelibLocal::Action(void)
ConfigureOSD(xc.prescale_osd, xc.unscaled_osd);
ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay,
xc.audio_compression, xc.audio_equalizer,
- xc.audio_surround);
+ xc.audio_surround, xc.speaker_type);
ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.contrast);
ConfigurePostprocessing("upmix", xc.audio_upmix ? true : false, NULL);
- ConfigurePostprocessing("autocrop", xc.autocrop ? true : false, NULL);
+ ConfigurePostprocessing("autocrop", xc.autocrop ? true : false,
+ xc.AutocropOptions());
#ifdef ENABLE_TEST_POSTPLUGINS
ConfigurePostprocessing("headphone", xc.headphone ? true : false, NULL);
#endif
diff --git a/frontend_svr.c b/frontend_svr.c
index c4b97bf0..cce9ae27 100644
--- a/frontend_svr.c
+++ b/frontend_svr.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: frontend_svr.c,v 1.14 2006-08-19 23:49:03 phintuka Exp $
+ * $Id: frontend_svr.c,v 1.15 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -956,10 +956,11 @@ void cXinelibServer::Handle_Control_CONFIG(int cli)
ConfigureOSD(xc.prescale_osd, xc.unscaled_osd);
ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay,
xc.audio_compression, xc.audio_equalizer,
- xc.audio_surround);
+ xc.audio_surround, xc.speaker_type);
ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.contrast);
ConfigurePostprocessing("upmix", xc.audio_upmix ? true : false, NULL);
- ConfigurePostprocessing("autocrop", xc.autocrop ? true : false, NULL);
+ ConfigurePostprocessing("autocrop", xc.autocrop ? true : false,
+ xc.AutocropOptions());
#ifdef ENABLE_TEST_POSTPLUGINS
ConfigurePostprocessing("headphone", xc.headphone ? true : false, NULL);
#endif
diff --git a/i18n.c b/i18n.c
index 064c7e78..453832ff 100644
--- a/i18n.c
+++ b/i18n.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: i18n.c,v 1.4 2006-08-18 02:26:06 phintuka Exp $
+ * $Id: i18n.c,v 1.5 2006-08-22 03:45:34 phintuka Exp $
*
* Translations provided by:
*
@@ -2339,7 +2339,126 @@ const tI18nPhrase Phrases[] = {
"", // Russian
"", // Croatian
},
-
+ {
+ "Speakers", // English
+ "", // Deutsch
+ "", // Slovenski
+ "", // Italiano
+ "", // Nederlands
+ "", // Portugu<EA>s
+ "", // Fran<E7>ais
+ "", // Norsk
+ "Kaiuttimet", // Suomi
+ "", // Polski
+ "", // Espa<F1>ol
+ "", // Ellinika
+ "", // Svenska
+ "", // Romaneste
+ "", // Magyar
+ "", // Catala
+ "", // Russian
+ "", // Croatian
+ },
+ {
+ "Headphones 2.0", // English
+ "", // Deutsch
+ "", // Slovenski
+ "", // Italiano
+ "", // Nederlands
+ "", // Portugu<EA>s
+ "", // Fran<E7>ais
+ "", // Norsk
+ "Kuulokkeet 2.0", // Suomi
+ "", // Polski
+ "", // Espa<F1>ol
+ "", // Ellinika
+ "", // Svenska
+ "", // Romaneste
+ "", // Magyar
+ "", // Catala
+ "", // Russian
+ "", // Croatian
+ },
+ {
+ " Autodetect letterbox", // English
+ "", // Deutsch
+ "", // Slovenski
+ "", // Italiano
+ "", // Nederlands
+ "", // Portugu<EA>s
+ "", // Fran<E7>ais
+ "", // Norsk
+ " Tunnista letterbox automaattisesti", // Suomi
+ "", // Polski
+ "", // Espa<F1>ol
+ "", // Ellinika
+ "", // Svenska
+ "", // Romaneste
+ "", // Magyar
+ "", // Catala
+ "", // Russian
+ "", // Croatian
+ },
+ {
+ " Soft start", // English
+ "", // Deutsch
+ "", // Slovenski
+ "", // Italiano
+ "", // Nederlands
+ "", // Portugu<EA>s
+ "", // Fran<E7>ais
+ "", // Norsk
+ " Portaittainen aloitus", // Suomi
+ "", // Polski
+ "", // Espa<F1>ol
+ "", // Ellinika
+ "", // Svenska
+ "", // Romaneste
+ "", // Magyar
+ "", // Catala
+ "", // Russian
+ "", // Croatian
+ },
+ {
+ " Cropping size", // English
+ "", // Deutsch
+ "", // Slovenski
+ "", // Italiano
+ "", // Nederlands
+ "", // Portugu<EA>s
+ "", // Fran<E7>ais
+ "", // Norsk
+ " Leikkauksen koko", // Suomi
+ "", // Polski
+ "", // Espa<F1>ol
+ "", // Ellinika
+ "", // Svenska
+ "", // Romaneste
+ "", // Magyar
+ "", // Catala
+ "", // Russian
+ "", // Croatian
+ },
+ {
+ " Detect subtitles", // English
+ "", // Deutsch
+ "", // Slovenski
+ "", // Italiano
+ "", // Nederlands
+ "", // Portugu<EA>s
+ "", // Fran<E7>ais
+ "", // Norsk
+ " Huomioi tekstitys", // Suomi
+ "", // Polski
+ "", // Espa<F1>ol
+ "", // Ellinika
+ "", // Svenska
+ "", // Romaneste
+ "", // Magyar
+ "", // Catala
+ "", // Russian
+ "", // Croatian
+ },
#if 0
{
"", // English
diff --git a/menu.c b/menu.c
index 50df09d4..463fe840 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c,v 1.10 2006-08-19 14:22:14 phintuka Exp $
+ * $Id: menu.c,v 1.11 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -704,7 +704,7 @@ cMenuXinelib::~cMenuXinelib()
#endif
if(xc.audio_compression != compression)
- cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, xc.audio_equalizer, xc.audio_surround);
+ cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
if(xc.headphone != headphone)
cXinelibDevice::Instance().ConfigurePostprocessing("headphone",
@@ -712,7 +712,8 @@ cMenuXinelib::~cMenuXinelib()
if(xc.autocrop != autocrop)
cXinelibDevice::Instance().ConfigurePostprocessing("autocrop",
- xc.autocrop ? true : false);
+ xc.autocrop ? true : false,
+ xc.AutocropOptions());
int dev_novideo = cXinelibDevice::Instance().GetPlayMode() == pmAudioOnlyBlack ? 1 : 0;
if(dev_novideo != novideo)
@@ -779,11 +780,12 @@ eOSState cMenuXinelib::ProcessKey(eKeys Key)
if(item == audio_ctrl_compress)
cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay,
compression, xc.audio_equalizer,
- xc.audio_surround);
+ xc.audio_surround, xc.speaker_type);
else if(item == ctrl_headphone)
cXinelibDevice::Instance().ConfigurePostprocessing("headphone", headphone?true:false);
else if(item == ctrl_autocrop)
- cXinelibDevice::Instance().ConfigurePostprocessing("autocrop", autocrop?true:false);
+ cXinelibDevice::Instance().ConfigurePostprocessing("autocrop", autocrop?true:false,
+ xc.AutocropOptions());
else if(item == ctrl_novideo)
cXinelibDevice::Instance().SetPlayMode(novideo ? pmAudioOnlyBlack : pmNone);
#ifdef HAVE_XV_FIELD_ORDER
diff --git a/setup_menu.c b/setup_menu.c
index 5700438a..41a8e583 100644
--- a/setup_menu.c
+++ b/setup_menu.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: setup_menu.c,v 1.4 2006-08-07 18:20:43 phintuka Exp $
+ * $Id: setup_menu.c,v 1.5 2006-08-22 03:45:34 phintuka Exp $
*
*/
@@ -97,6 +97,7 @@ class cMenuSetupAudio : public cMenuSetupPage
int visualization;
cOsdItem *audio_driver_item;
+ cOsdItem *audio_ctrl_speakers;
cOsdItem *audio_ctrl_delay;
cOsdItem *audio_ctrl_compression;
cOsdItem *audio_ctrl_upmix;
@@ -131,7 +132,7 @@ cMenuSetupAudio::~cMenuSetupAudio(void)
{
cXinelibDevice::Instance().ConfigurePostprocessing(
xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- xc.audio_equalizer, xc.audio_surround);
+ xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
cXinelibDevice::Instance().ConfigurePostprocessing(
"upmix", xc.audio_upmix ? true : false, NULL);
#ifdef ENABLE_TEST_POSTPLUGINS
@@ -156,6 +157,10 @@ void cMenuSetupAudio::Set(void)
DriverNameChars));
else
audio_port_item = NULL;
+
+ Add(audio_ctrl_speakers =
+ new cMenuEditStraI18nItem(tr("Speakers"), &newconfig.speaker_type,
+ SPEAKERS_count, xc.s_speakerArrangements));
Add(audio_ctrl_delay =
new cMenuEditTypedIntItem(tr("Delay"), tr("ms"), &newconfig.audio_delay,
-3000, 3000, tr("Off")));
@@ -217,16 +222,40 @@ eOSState cMenuSetupAudio::ProcessKey(eKeys Key)
audio_port_item)
Set();
}
- else if(item == audio_ctrl_delay || item == audio_ctrl_compression ||
- item == audio_ctrl_surround) {
+ else if(item == audio_ctrl_delay || item == audio_ctrl_compression) {
cXinelibDevice::Instance().ConfigurePostprocessing(
xc.deinterlace_method, newconfig.audio_delay,
newconfig.audio_compression, newconfig.audio_equalizer,
- newconfig.audio_surround);
+ newconfig.audio_surround, newconfig.speaker_type);
+ }
+ else if(item == audio_ctrl_speakers) {
+ cXinelibDevice::Instance().ConfigurePostprocessing(
+ xc.deinterlace_method, newconfig.audio_delay,
+ newconfig.audio_compression, newconfig.audio_equalizer,
+ newconfig.audio_surround, newconfig.speaker_type);
+ if(newconfig.speaker_type <= SPEAKERS_STEREO &&
+ newconfig.audio_upmix) {
+ newconfig.audio_upmix = false;
+ Set();
+ }
+ }
+ else if(item == audio_ctrl_surround) {
+ cXinelibDevice::Instance().ConfigurePostprocessing(
+ xc.deinterlace_method, newconfig.audio_delay,
+ newconfig.audio_compression, newconfig.audio_equalizer,
+ newconfig.audio_surround, newconfig.speaker_type);
+ if(newconfig.audio_surround && newconfig.audio_upmix) {
+ newconfig.audio_upmix = 0;
+ Set();
+ }
}
else if(item == audio_ctrl_upmix) {
cXinelibDevice::Instance().ConfigurePostprocessing(
"upmix", newconfig.audio_upmix ? true : false, NULL);
+ if(newconfig.audio_upmix && newconfig.audio_surround) {
+ newconfig.audio_surround = 0;
+ Set();
+ }
}
#ifdef ENABLE_TEST_POSTPLUGINS
else if(item == audio_ctrl_headphone) {
@@ -245,9 +274,10 @@ void cMenuSetupAudio::Store(void)
strcpy(xc.audio_driver, xc.s_audioDrivers[audio_driver]);
strcpy(xc.audio_visualization, xc.s_audioVisualizations[visualization]);
- SetupStore("Audio.Driver", xc.audio_driver);
- SetupStore("Audio.Port", xc.audio_port);
- SetupStore("Audio.Delay", xc.audio_delay);
+ SetupStore("Audio.Driver", xc.audio_driver);
+ SetupStore("Audio.Port", xc.audio_port);
+ SetupStore("Audio.Speakers", xc.s_speakerArrangements[xc.speaker_type]);
+ SetupStore("Audio.Delay", xc.audio_delay);
SetupStore("Audio.Compression", xc.audio_compression);
SetupStore("Audio.Surround", xc.audio_surround);
SetupStore("Audio.Upmix", xc.audio_upmix);
@@ -283,7 +313,7 @@ cMenuSetupAudioEq::~cMenuSetupAudioEq(void)
{
cXinelibDevice::Instance().ConfigurePostprocessing(
xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- xc.audio_equalizer, xc.audio_surround);
+ xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
}
void cMenuSetupAudioEq::Set(void)
@@ -310,7 +340,7 @@ eOSState cMenuSetupAudioEq::ProcessKey(eKeys Key)
if(Key == kLeft || Key == kRight) {
cXinelibDevice::Instance().ConfigurePostprocessing(
xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- newconfig.audio_equalizer, xc.audio_surround);
+ newconfig.audio_equalizer, xc.audio_surround, xc.speaker_type);
}
return state;
@@ -371,13 +401,13 @@ cMenuSetupVideo::~cMenuSetupVideo(void)
cXinelibDevice::Instance().ConfigureVideo(xc.hue, xc.saturation,
xc.brightness, xc.contrast);
cXinelibDevice::Instance().ConfigurePostprocessing(
- "autocrop", xc.autocrop ? true : false, NULL);
+ "autocrop", xc.autocrop ? true : false, xc.AutocropOptions());
}
void cMenuSetupVideo::Set(void)
{
SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- //int current = Current();
+ int current = Current();
Clear();
Add(NewTitle("Video"));
@@ -385,6 +415,17 @@ void cMenuSetupVideo::Set(void)
Add(ctrl_autocrop =
new cMenuEditBoolItem(tr("Crop letterbox 4:3 to 16:9"),
&newconfig.autocrop));
+ if(newconfig.autocrop) {
+ Add(new cMenuEditBoolItem(tr(" Autodetect letterbox"),
+ &newconfig.autocrop_autodetect));
+ Add(new cMenuEditBoolItem(tr(" Soft start"),
+ &newconfig.autocrop_soft));
+ Add(new cMenuEditBoolItem(tr(" Cropping size"),
+ &newconfig.autocrop_fixedsize,
+ "4:3...20:9", "14:9/16:9"));
+ Add(new cMenuEditBoolItem(tr(" Detect subtitles"),
+ &newconfig.autocrop_subs));
+ }
#ifdef INTEGER_CONFIG_VIDEO_CONTROLS
Add(new cMenuEditIntItem(tr("HUE"), &newconfig.hue, -1, 0xffff));
@@ -405,9 +446,9 @@ void cMenuSetupVideo::Set(void)
controls));
#endif
- //if(current<1) current=1; /* first item is not selectable */
- //SetCurrent(Get(current));
- SetCurrent(Get(1));
+ if(current<1) current=1; /* first item is not selectable */
+ SetCurrent(Get(current));
+ //SetCurrent(Get(1));
Display();
}
@@ -434,10 +475,12 @@ eOSState cMenuSetupVideo::ProcessKey(eKeys Key)
INDEX_TO_CONTROL(newconfig.brightness),
INDEX_TO_CONTROL(newconfig.contrast));
#endif
- else if(item == ctrl_autocrop)
+ else if(item == ctrl_autocrop) {
cXinelibDevice::Instance().ConfigurePostprocessing(
- "autocrop", xc.autocrop ? true : false, NULL);
-
+ "autocrop", newconfig.autocrop ? true : false,
+ newconfig.AutocropOptions());
+ Set();
+ }
return state;
}
@@ -453,7 +496,11 @@ void cMenuSetupVideo::Store(void)
xc.brightness = INDEX_TO_CONTROL(xc.brightness);
#endif
- SetupStore("Video.AutoCrop", xc.autocrop);
+ SetupStore("Video.AutoCrop", xc.autocrop);
+ SetupStore("Video.AutoCrop.AutoDetect", xc.autocrop_autodetect);
+ SetupStore("Video.AutoCrop.SoftStart", xc.autocrop_soft);
+ SetupStore("Video.AutoCrop.FixedSize", xc.autocrop_fixedsize);
+ SetupStore("Video.AutoCrop.DetectSubs", xc.autocrop_subs);
SetupStore("Video.HUE", xc.hue);
SetupStore("Video.Saturation", xc.saturation);
SetupStore("Video.Contrast", xc.contrast);
@@ -551,7 +598,7 @@ void cMenuSetupOSD::Set(void)
if(current<1) current=1; /* first item is not selectable */
SetCurrent(Get(current));
- SetCurrent(Get(1));
+ //SetCurrent(Get(1));
Display();
}
@@ -759,7 +806,7 @@ cMenuSetupLocal::~cMenuSetupLocal(void)
xc.display_aspect, xc.scale_video, xc.field_order);
cXinelibDevice::Instance().ConfigurePostprocessing(
xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- xc.audio_equalizer, xc.audio_surround);
+ xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
}
void cMenuSetupLocal::Set(void)