diff options
-rw-r--r-- | config.c | 34 | ||||
-rw-r--r-- | config.h | 25 | ||||
-rw-r--r-- | device.c | 9 | ||||
-rw-r--r-- | device.h | 7 | ||||
-rw-r--r-- | equalizer.c | 8 | ||||
-rw-r--r-- | frontend.c | 6 | ||||
-rw-r--r-- | frontend.h | 5 | ||||
-rw-r--r-- | frontend_local.c | 11 | ||||
-rw-r--r-- | frontend_svr.c | 7 | ||||
-rw-r--r-- | i18n.c | 123 | ||||
-rw-r--r-- | menu.c | 12 | ||||
-rw-r--r-- | setup_menu.c | 89 |
12 files changed, 282 insertions, 54 deletions
@@ -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); @@ -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); @@ -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, @@ -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)); @@ -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], @@ -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 @@ -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 @@ -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) |