summaryrefslogtreecommitdiff
path: root/setup_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'setup_menu.c')
-rw-r--r--setup_menu.c2011
1 files changed, 0 insertions, 2011 deletions
diff --git a/setup_menu.c b/setup_menu.c
deleted file mode 100644
index 28026229..00000000
--- a/setup_menu.c
+++ /dev/null
@@ -1,2011 +0,0 @@
-/*
- * setup_menu.c: Setup Menu
- *
- * See the main source file 'xineliboutput.c' for copyright information and
- * how to reach the author.
- *
- * $Id: setup_menu.c,v 1.75 2010-01-20 13:03:43 phintuka Exp $
- *
- */
-
-#include "features.h"
-
-#include <vdr/config.h>
-#include <vdr/plugin.h>
-#include <vdr/remote.h>
-#include <vdr/i18n.h>
-
-#include "config.h"
-#include "device.h"
-#include "menuitems.h"
-#include "osd.h" // cXinelibOsdProvider::RefreshOsd()
-#include "setup_menu.h"
-
-#define indent(x) Label_Ident(x)
-#define inden2(x) Label_Ident(Label_Ident(x))
-
-
-namespace XinelibOutputSetupMenu {
-
-//#define INTEGER_CONFIG_VIDEO_CONTROLS
-//#define LINEAR_VIDEO_CONTROLS
-//#define LOGARITHM_SCALING
-
-#define ISNUMBERKEY(k) (RAWKEY(k) >= k0 && RAWKEY(k) <= k9)
-
-//--- Setup Menu -------------------------------------------------------------
-
-const char *ModeLineChars =
- " 0123456789+-hvsync.";
-const char *DriverNameChars =
- " abcdefghijklmnopqrstuvwxyz0123456789-.,#~:;";
-const char *OptionsChars =
- "=.,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-const char *LangNameChars =
- "abcdefghijklmnopqrstuvwxyz";
-
-const char *controls[] =
- { "Off",
- "[|---------------]","[|---------------]",
- "[-|--------------]","[-|--------------]",
- "[--|-------------]","[--|-------------]",
- "[---|------------]","[---|------------]",
- "[----|-----------]","[----|-----------]",
- "[-----|----------]","[-----|----------]",
- "[------|---------]","[------|---------]",
- "[-------|--------]","[-------|--------]",
- "[--------|-------]","[--------|-------]",
- "[---------|------]","[---------|------]",
- "[----------|-----]","[----------|-----]",
- "[-----------|----]","[-----------|----]",
- "[------------|---]","[------------|---]",
- "[-------------|--]","[-------------|--]",
- "[--------------|-]","[--------------|-]",
- "[---------------|]","[---------------|]",
- NULL
- };
-
-#ifdef LINEAR_VIDEO_CONTROLS
-# define CONTROL_TO_INDEX(val) ((val)>=0 ? ((val)>>11)+1 : 0)
-# define INDEX_TO_CONTROL(ind) ((ind)==0 ? -1 : ((ind)-1)<<11)
-#else
-#ifdef LOGARITHM_SCALING
-const int ind2ctrl_tbl[33] = {
- -1, 0, 0x0001, 0x0002, 0x0003, 0x0004, 0x0007, 0x000a,
- 0x000f, 0x0014, 0x001f, 42, 0x003f, 80, 0x007f, 170,
- 0x00ff, 336, 0x01ff, 682, 0x03ff, 1630, 0x07ff, 2730,
- 0x0fff, 5726, 0x1fff, 10858, 0x3fff, 22110, 0x7fff, 43224,
- 0xffff };
-#else
-const int ind2ctrl_tbl[33] = {
- -1,
- 0x0000, 0x0843, 0x1085, 0x18c7, 0x2109, 0x294b, 0x318d, 0x39cf,
- 0x4211, 0x4a53, 0x5295, 0x5ad7, 0x6319, 0x6b5b, 0x739d, 0x7bdf,
- 0x8421, 0x8c63, 0x94a5, 0x9ce7, 0xa529, 0xad6b, 0xb5ad, 0xbdef,
- 0xc631, 0xce73, 0xd6b5, 0xdef7, 0xe739, 0xef7b, 0xf7bd, 0xffff
-};
-#endif
-static int CONTROL_TO_INDEX(int val)
-{
- for(int i=0; i<33;i++)
- if(val<=ind2ctrl_tbl[i])
- return i;
- return 32;
-}
-static int INDEX_TO_CONTROL(int ind)
-{
- if(ind<0) ind=0;
- if(ind>32) ind=32;
- return ind2ctrl_tbl[ind];
-}
-#endif
-
-//--- cMenuSetupAudio --------------------------------------------------------
-
-class cMenuSetupAudio : public cMenuSetupPage
-{
- private:
- config_t newconfig;
- int visualization;
- int goom_width, goom_height, goom_fps;
-
- cOsdItem *audio_ctrl_speakers;
- cOsdItem *audio_ctrl_volume;
- cOsdItem *audio_ctrl_delay;
- cOsdItem *audio_ctrl_compression;
- cOsdItem *audio_ctrl_upmix;
- cOsdItem *audio_ctrl_surround;
- cOsdItem *audio_ctrl_headphone;
- cOsdItem *audio_ctrl_vis;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupAudio(void);
- ~cMenuSetupAudio(void);
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupAudio::cMenuSetupAudio(void)
-{
- memcpy(&newconfig, &xc, sizeof(config_t));
-
- visualization = strstra(xc.audio_visualization,
- xc.s_audioVisualizations,
- 0);
- goom_width = 720;
- goom_height = 576;
- goom_fps = 25;
-
- char *pt;
- if(NULL != (pt=strstr(xc.audio_vis_goom_opts, "width=")))
- goom_width = max(320, min(1920, atoi(pt+6)));
- if(NULL != (pt=strstr(xc.audio_vis_goom_opts, "height=")))
- goom_height = max(240, min(1280, atoi(pt+7)));
- if(NULL != (pt=strstr(xc.audio_vis_goom_opts, "fps=")))
- goom_fps = max(1, min(100, atoi(pt+4)));
-
- Set();
-}
-
-cMenuSetupAudio::~cMenuSetupAudio(void)
-{
- cXinelibDevice::Instance().ConfigurePostprocessing(
- xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "upmix", xc.audio_upmix ? true : false, NULL);
-#ifdef ENABLE_TEST_POSTPLUGINS
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "headphone", xc.headphone ? true : false, NULL);
-#endif
-}
-
-void cMenuSetupAudio::Set(void)
-{
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- int current = Current();
- Clear();
-
- Add(SeparatorItem(tr("Audio")));
-
- Add(audio_ctrl_speakers =
- new cMenuEditStraI18nItem(tr("Speakers"), &newconfig.speaker_type,
- SPEAKERS_count, xc.s_speakerArrangements));
-
- Add(audio_ctrl_volume =
- new cMenuEditBoolItem(tr("Volume control"),
- &newconfig.sw_volume_control,
- tr("Hardware"), tr("Software")));
-
- Add(audio_ctrl_delay =
- new cMenuEditTypedIntItem(tr("Delay"), tr("ms"), &newconfig.audio_delay,
- -3000, 3000, tr("Off")));
- Add(audio_ctrl_compression =
- new cMenuEditTypedIntItem(tr("Audio Compression"), "%",
- &newconfig.audio_compression,
- 100, 500, NULL, tr("Off")));
- Add(audio_ctrl_upmix =
- new cMenuEditBoolItem(tr("Upmix stereo to 5.1"),
- &newconfig.audio_upmix));
- Add(audio_ctrl_surround =
- new cMenuEditBoolItem(tr("Downmix AC3 to surround"),
- &newconfig.audio_surround));
-#ifdef ENABLE_TEST_POSTPLUGINS
- Add(audio_ctrl_headphone =
- new cMenuEditBoolItem(tr("Mix to headphones"),
- &newconfig.headphone));
-#else
- audio_ctrl_headphone = NULL;
-#endif
- Add(audio_ctrl_vis =
- new cMenuEditStraI18nItem(tr("Visualization"), &visualization,
- AUDIO_VIS_count,
- xc.s_audioVisualizationNames));
- if(visualization == AUDIO_VIS_GOOM) {
- Add(new cMenuEditTypedIntItem(indent(tr("Width")), tr("px"),
- &goom_width, 320, 1920));
- Add(new cMenuEditTypedIntItem(indent(tr("Height")),tr("px"),
- &goom_height, 240, 1280));
- Add(new cMenuEditTypedIntItem(indent(tr("Speed")), tr("fps"),
- &goom_fps, 1, 100));
- }
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- Display();
-}
-
-eOSState cMenuSetupAudio::ProcessKey(eKeys Key)
-{
- cOsdItem *item = Get(Current());
-
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- Key = NORMALKEY(Key);
-
- if(Key!=kLeft && Key!=kRight)
- return state;
-
- 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.speaker_type);
- }
- else if(item == audio_ctrl_vis) {
- Set();
- }
- 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_volume) {
- // trigger volume control message by toggling mute
- cRemote::Put(kMute);
- cRemote::Put(kMute);
- }
- 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) {
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "headphone", newconfig.headphone ? true : false, NULL);
- }
-#endif
-
- return state;
-}
-
-
-void cMenuSetupAudio::Store(void)
-{
- memcpy(&xc, &newconfig, sizeof(config_t));
-
- strn0cpy(xc.audio_visualization, xc.s_audioVisualizations[visualization],
- sizeof(xc.audio_visualization));
- snprintf(xc.audio_vis_goom_opts, sizeof(xc.audio_vis_goom_opts),
- "width=%d,height=%d,fps=%d",
- goom_width, goom_height, goom_fps);
- xc.audio_vis_goom_opts[sizeof(xc.audio_vis_goom_opts)-1] = 0;
-
- 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);
- SetupStore("Audio.Headphone", xc.headphone);
- SetupStore("Audio.Visualization",xc.audio_visualization);
- SetupStore("Audio.Visualization.GoomOpts",xc.audio_vis_goom_opts);
- SetupStore("Audio.SoftwareVolumeControl", xc.sw_volume_control);
- Setup.Save();
-}
-
-//--- cMenuSetupAudioEq ------------------------------------------------------
-
-class cMenuSetupAudioEq : public cMenuSetupPage
-{
- private:
- config_t newconfig;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupAudioEq(void);
- ~cMenuSetupAudioEq(void);
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupAudioEq::cMenuSetupAudioEq(void)
-{
- memcpy(&newconfig, &xc, sizeof(config_t));
- Set();
-}
-
-cMenuSetupAudioEq::~cMenuSetupAudioEq(void)
-{
- cXinelibDevice::Instance().ConfigurePostprocessing(
- xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
-}
-
-void cMenuSetupAudioEq::Set(void)
-{
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- int current = Current();
- Clear();
-
- Add(SeparatorItem(tr("Audio Equalizer")));
- for(int i=0; i<AUDIO_EQ_count; i++)
- Add(new cMenuEditTypedIntItem(config_t::s_audioEqNames[i], "%",
- &newconfig.audio_equalizer[i],
- -100, 100, tr("Off")));
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- Display();
-}
-
-eOSState cMenuSetupAudioEq::ProcessKey(eKeys Key)
-{
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- Key = NORMALKEY(Key);
-
- if(Key == kLeft || Key == kRight) {
- cXinelibDevice::Instance().ConfigurePostprocessing(
- xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- newconfig.audio_equalizer, xc.audio_surround, xc.speaker_type);
- }
-
- return state;
-}
-
-void cMenuSetupAudioEq::Store(void)
-{
- memcpy(&xc, &newconfig, sizeof(config_t));
-
- char tmp[256];
- sprintf(tmp,"%d %d %d %d %d %d %d %d %d %d",
- xc.audio_equalizer[0], xc.audio_equalizer[1],
- xc.audio_equalizer[2], xc.audio_equalizer[3],
- xc.audio_equalizer[4], xc.audio_equalizer[5],
- xc.audio_equalizer[6], xc.audio_equalizer[7],
- xc.audio_equalizer[8], xc.audio_equalizer[9]);
- SetupStore("Audio.Equalizer", tmp);
- Setup.Save();
-}
-
-//--- cMenuSetupVideo --------------------------------------------------------
-
-static const char * const tvtime_method[] =
- { "use_vo_driver",
- "Linear",
- "LinearBlend",
- "Greedy",
- "Greedy2Frame",
- "Weave",
- "LineDoubler",
- "Vertical",
- "ScalerBob",
- "GreedyH",
- "TomsMoComp",
- NULL};
-
-static const int tvtime_methods_count = (sizeof(tvtime_method)/sizeof(tvtime_method[0]) - 1);
-
-static const char * const tvtime_method_name[] =
- {trNOOP("Use Video-Out Driver"), // "use_vo_driver"
- "Linear Interpolation", // "Linear",
- "Linear Blend (mplayer)", // "LinearBlend",
- "Greedy - Low motion (DScaler)", // "Greedy",
- "Greedy 2-frame (DScaler)", // "Greedy2Frame",
- "Weave Last Field", // "Weave",
- "Line Doubler", // "LineDoubler",
- "Vertical Blend (ffmpeg)", // "Vertical",
- "Scaler Bob", // "ScalerBob",
- "Greedy - High Motion (DScaler)", // "GreedyH",
- "Tom's Motion Compensated (DScaler)", // "TomsMoComp",
- NULL};
-
-static const char * const tvtime_pulldown[] =
- { "none",
- "vector",
- NULL};
-
-static const char * const tvtime_pulldown_name[] =
- { trNOOP("none"),
- trNOOP("vector"),
- NULL};
-
-static const char * const tvtime_framerate[] =
- { "full",
- "half_top",
- "half_bottom",
- NULL};
-
-static const char * const tvtime_framerate_name[] =
- { trNOOP("full"),
- trNOOP("half (top)"),
- trNOOP("half (bottom)"),
- NULL};
-
-struct tvtime_s {
- int method;
- int cheap_mode; // on/off
- int pulldown; // none, vector
- int framerate; // full, half_top, half_bottom
- int judder_correction; // on/off
- int use_progressive_frame_flag; // on/off
- int chroma_filter; // on/off
-
- void Parse(const char *str)
- {
- cheap_mode = strstr(str, "cheap_mode=1") ? 1 : 0;
- pulldown = strstr(str, "pulldown=none") ? 0 :
- strstr(str, "pulldown=0") ? 0 : 1;
- framerate = strstr(str, "framerate_mode=half_top") ? 1 :
- strstr(str, "framerate_mode=1") ? 1 :
- strstr(str, "framerate_mode=half_bottom") ? 2 :
- strstr(str, "framerate_mode=2") ? 2 : 0;
- chroma_filter = strstr(str, "chroma_filter=1") ? 1 : 0;
- judder_correction = strstr(str, "judder_correction=0") ? 0 : 1;
- use_progressive_frame_flag = strstr(str, "use_progressive_frame_flag=0") ? 0 : 1;
- method=1;
- const char *m = strstr(str, "method=");
- if(m) {
- char *tmp = strdup(m + 7);
- if(strchr(tmp, ','))
- *strchr(tmp, ',') = 0;
- method = strstra(tmp, tvtime_method, 1);
- free(tmp);
- }
- }
-
- const char *ToString(void)
- {
- static char buf[256];
- snprintf(buf, sizeof(buf),
- "method=%s,cheap_mode=%d,pulldown=%s,framerate_mode=%s,"
- "judder_correction=%d,use_progressive_frame_flag=%d,"
- "chroma_filter=%d,enabled=1",
- tvtime_method[method], cheap_mode, tvtime_pulldown[pulldown],
- tvtime_framerate[framerate], judder_correction,
- use_progressive_frame_flag, chroma_filter);
- buf[sizeof(buf)-1] = 0;
- return buf;
- }
-};
-
-class cMenuSetupVideo : public cMenuSetupPage
-{
- private:
- config_t newconfig;
-
- cOsdItem *ctrl_autocrop;
- cOsdItem *ctrl_swscale;
- cOsdItem *ctrl_swscale_resize;
- cOsdItem *ctrl_swscale_aspect;
- cOsdItem *ctrl_swscale_width;
- cOsdItem *ctrl_swscale_height;
- cOsdItem *ctrl_hue;
- cOsdItem *ctrl_saturation;
- cOsdItem *ctrl_contrast;
- cOsdItem *ctrl_brightness;
- cOsdItem *ctrl_sharpness;
- cOsdItem *ctrl_noise_reduction;
- cOsdItem *ctrl_overscan;
- cOsdItem *ctrl_pp;
- cOsdItem *ctrl_deinterlace;
- cOsdItem *ctrl_tvtime_method;
- cOsdItem *ctrl_unsharp;
- cOsdItem *ctrl_denoise3d;
- cOsdItem *ctrl_vo_aspect_ratio;
-
- int deinterlace;
- struct tvtime_s tvtime;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupVideo(void);
- ~cMenuSetupVideo(void);
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupVideo::cMenuSetupVideo(void)
-{
- memcpy(&newconfig, &xc, sizeof(config_t));
-
- newconfig.hue = CONTROL_TO_INDEX(newconfig.hue);
- newconfig.saturation = CONTROL_TO_INDEX(newconfig.saturation);
- newconfig.contrast = CONTROL_TO_INDEX(newconfig.contrast);
- newconfig.brightness = CONTROL_TO_INDEX(newconfig.brightness);
- newconfig.sharpness = CONTROL_TO_INDEX(newconfig.sharpness);
- newconfig.noise_reduction = CONTROL_TO_INDEX(newconfig.noise_reduction);
-
- deinterlace = strstra(xc.deinterlace_method, xc.s_deinterlaceMethods, 0);
-
- tvtime.Parse(newconfig.deinterlace_opts);
-
- Set();
-}
-
-cMenuSetupVideo::~cMenuSetupVideo(void)
-{
- cXinelibDevice::Instance().ConfigureVideo(xc.hue, xc.saturation,
- xc.brightness, xc.sharpness,
- xc.noise_reduction, xc.contrast,
- xc.overscan, xc.vo_aspect_ratio);
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "autocrop", xc.autocrop ? true : false, xc.AutocropOptions());
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "swscale", xc.swscale ? true : false, xc.SwScaleOptions());
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "pp", xc.ffmpeg_pp ? true : false, xc.FfmpegPpOptions());
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "unsharp", xc.unsharp ? true : false, xc.UnsharpOptions());
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "denoise3d", xc.denoise3d ? true : false, xc.Denoise3dOptions());
- cXinelibDevice::Instance().ConfigurePostprocessing(
- xc.deinterlace_method, xc.audio_delay, xc.audio_compression,
- xc.audio_equalizer, xc.audio_surround, xc.speaker_type);
-}
-
-void cMenuSetupVideo::Set(void)
-{
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- int current = Current();
- Clear();
-
- Add(SeparatorItem(tr("Video")));
-
- Add(ctrl_vo_aspect_ratio =
- new cMenuEditStraI18nItem(tr("Aspect ratio"), &newconfig.vo_aspect_ratio,
- VO_ASPECT_count, xc.s_vo_aspects));
-
- Add(ctrl_autocrop =
- new cMenuEditBoolItem(tr("Crop letterbox 4:3 to 16:9"),
- &newconfig.autocrop));
- if(newconfig.autocrop) {
- Add(new cMenuEditBoolItem(indent(tr("Autodetect letterbox")),
- &newconfig.autocrop_autodetect));
- Add(new cMenuEditBoolItem(indent(tr("Soft start")),
- &newconfig.autocrop_soft));
- Add(new cMenuEditBoolItem(indent(tr("Crop to")),
- &newconfig.autocrop_fixedsize,
- "4:3...20:9", "14:9/16:9"));
- Add(new cMenuEditBoolItem(indent(tr("Detect subtitles")),
- &newconfig.autocrop_subs));
- }
-
- ctrl_swscale_resize = ctrl_swscale_aspect = ctrl_swscale_width = ctrl_swscale_height = NULL;
- Add(ctrl_swscale =
- new cMenuEditBoolItem(tr("Software scaling"),
- &newconfig.swscale));
- if(newconfig.swscale) {
- Add(ctrl_swscale_aspect =
- new cMenuEditBoolItem(indent(tr("Change aspect ratio")),
- &newconfig.swscale_change_aspect));
- Add(ctrl_swscale_resize =
- new cMenuEditBoolItem(indent(tr("Change video size")),
- &newconfig.swscale_resize));
- if(newconfig.swscale_resize) {
- Add(ctrl_swscale_width =
- new cMenuEditIntItem( indent(tr("Width")),
- &newconfig.swscale_width, 360, 2000));
- Add(ctrl_swscale_height =
- new cMenuEditIntItem( indent(tr("Height")),
- &newconfig.swscale_height, 288, 1200));
- Add(new cMenuEditBoolItem(indent(tr("Allow downscaling")),
- &newconfig.swscale_downscale));
- }
- }
-
- Add(ctrl_overscan =
- new cMenuEditTypedIntItem(tr("Overscan (crop image borders)"), "%",
- &newconfig.overscan, 0, 10,
- tr("Off")));
-
- Add(ctrl_pp = new cMenuEditBoolItem(tr("Post processing (ffmpeg)"),
- &newconfig.ffmpeg_pp));
- if(newconfig.ffmpeg_pp) {
- Add(new cMenuEditIntItem( indent(tr("Quality")),
- &newconfig.ffmpeg_pp_quality, 0, 6));
- Add(new cMenuEditStrItem( indent(tr("Mode")),
- newconfig.ffmpeg_pp_mode,
- 255, OptionsChars));
- }
-
- Add(ctrl_deinterlace =
- new cMenuEditStraI18nItem(tr("Deinterlacing"), &deinterlace,
- DEINTERLACE_count,
- xc.s_deinterlaceMethodNames));
-
- ctrl_tvtime_method = NULL;
- if(deinterlace == DEINTERLACE_TVTIME) {
- Add(ctrl_tvtime_method =
- new cMenuEditStraI18nItem(indent(tr("Method")),
- &tvtime.method, tvtime_methods_count, tvtime_method_name));
- Add(new cMenuEditBoolItem( indent(tr("Cheap mode")),
- &tvtime.cheap_mode));
- Add(new cMenuEditStraI18nItem(indent(tr("Pulldown")),
- &tvtime.pulldown, 2, tvtime_pulldown_name));
- Add(new cMenuEditStraI18nItem(indent(tr("Frame rate")),
- &tvtime.framerate, 3, tvtime_framerate_name));
- Add(new cMenuEditBoolItem( indent(tr("Judder Correction")),
- &tvtime.judder_correction));
- Add(new cMenuEditBoolItem( indent(tr("Use progressive frame flag")),
- &tvtime.use_progressive_frame_flag));
- Add(new cMenuEditBoolItem( indent(tr("Chroma Filter")),
- &tvtime.chroma_filter));
- }
-
- Add(ctrl_unsharp = new cMenuEditBoolItem(tr("Sharpen / Blur"),
- &newconfig.unsharp));
- if(newconfig.unsharp) {
- Add(new cMenuEditOddIntItem( indent(tr("Width of the luma matrix")),
- &newconfig.unsharp_luma_matrix_width, 3, 11));
- Add(new cMenuEditOddIntItem( indent(tr("Height of the luma matrix")),
- &newconfig.unsharp_luma_matrix_height, 3, 11));
- Add(new cMenuEditFpIntItem( indent(tr("Amount of luma sharpness/blur")),
- &newconfig.unsharp_luma_amount, -20, 20, 1,
- tr("Off")));
- Add(new cMenuEditOddIntItem( indent(tr("Width of the chroma matrix")),
- &newconfig.unsharp_chroma_matrix_width, 3, 11));
- Add(new cMenuEditOddIntItem( indent(tr("Height of the chroma matrix")),
- &newconfig.unsharp_chroma_matrix_height, 3, 11));
- Add(new cMenuEditFpIntItem( indent(tr("Amount of chroma sharpness/blur")),
- &newconfig.unsharp_chroma_amount, -20, 20, 1,
- tr("Off")));
- }
-
- Add(ctrl_denoise3d = new cMenuEditBoolItem(tr("3D Denoiser"),
- &newconfig.denoise3d));
- if(newconfig.denoise3d) {
- Add(new cMenuEditFpIntItem( indent(tr("Spatial luma strength")),
- &newconfig.denoise3d_luma, 0, 100, 1));
- Add(new cMenuEditFpIntItem( indent(tr("Spatial chroma strength")),
- &newconfig.denoise3d_chroma, 0, 100, 1));
- Add(new cMenuEditFpIntItem( indent(tr("Temporal strength")),
- &newconfig.denoise3d_time, 0, 100, 1));
- }
-
-
-#ifdef INTEGER_CONFIG_VIDEO_CONTROLS
- Add(new cMenuEditIntItem(tr("HUE"), &newconfig.hue, -1, 0xffff));
- Add(new cMenuEditIntItem(tr("Saturation"), &newconfig.saturation,-1,0xffff));
- Add(new cMenuEditIntItem(tr("Contrast"), &newconfig.contrast, -1, 0xffff));
- Add(new cMenuEditIntItem(tr("Brightness"), &newconfig.brightness,-1,0xffff));
-#ifdef HAVE_VDPAU
- Add(new cMenuEditIntItem(tr("Sharpness"), &newconfig.sharpness, -1,0xffff));
- Add(new cMenuEditIntItem(tr("Noise Reduction"), &newconfig.noise_reduction, -1,0xffff));
-#endif
-#else
- Add(ctrl_hue = new cMenuEditStraItem(tr("HUE"), &newconfig.hue, 33,
- controls));
- Add(ctrl_saturation =
- new cMenuEditStraItem(tr("Saturation"), &newconfig.saturation, 33,
- controls));
- Add(ctrl_contrast =
- new cMenuEditStraItem(tr("Contrast"), &newconfig.contrast, 33,
- controls));
- Add(ctrl_brightness =
- new cMenuEditStraItem(tr("Brightness"), &newconfig.brightness, 33,
- controls));
-#ifdef HAVE_VDPAU
- Add(ctrl_sharpness =
- new cMenuEditStraItem(tr("Sharpness"), &newconfig.sharpness, 33,
- controls));
- Add(ctrl_noise_reduction =
- new cMenuEditStraItem(tr("Noise Reduction"), &newconfig.noise_reduction, 33,
- controls));
-#endif
-#endif
-
-#ifdef DEVICE_SUPPORTS_IBP_TRICKSPEED
- Add(new cMenuEditBoolItem(tr("Smooth fast forward"),
- &newconfig.ibp_trickspeed));
-#endif
- Add(new cMenuEditIntItem(tr("Fastest trick speed"),
- &newconfig.max_trickspeed, 1, 12));
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- //SetCurrent(Get(1));
- Display();
-}
-
-eOSState cMenuSetupVideo::ProcessKey(eKeys Key)
-{
- cOsdItem *item = Get(Current());
-
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- Key = NORMALKEY(Key);
-
- if(Key!=kLeft && Key!=kRight)
- return state;
-
- if(item == ctrl_hue || item == ctrl_saturation ||
- item == ctrl_sharpness || item == ctrl_noise_reduction ||
- item == ctrl_contrast || item == ctrl_brightness ||
- item == ctrl_overscan || item == ctrl_vo_aspect_ratio)
-#ifdef INTEGER_CONFIG_VIDEO_CONTROLS
- cXinelibDevice::Instance().ConfigureVideo(newconfig.hue,
- newconfig.saturation,
- newconfig.brightness,
- newconfig.sharpness,
- newconfig.noise_reduction,
- newconfig.contrast,
- newconfig.overscan,
- newconfig.vo_aspect_ratio);
-#else
- cXinelibDevice::Instance().ConfigureVideo(
- INDEX_TO_CONTROL(newconfig.hue),
- INDEX_TO_CONTROL(newconfig.saturation),
- INDEX_TO_CONTROL(newconfig.brightness),
- INDEX_TO_CONTROL(newconfig.sharpness),
- INDEX_TO_CONTROL(newconfig.noise_reduction),
- INDEX_TO_CONTROL(newconfig.contrast),
- newconfig.overscan, newconfig.vo_aspect_ratio);
-#endif
- else if(item == ctrl_autocrop) {
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "autocrop", newconfig.autocrop ? true : false,
- newconfig.AutocropOptions());
- Set();
- }
- else if(item == ctrl_swscale ||
- item == ctrl_swscale_resize ||
- item == ctrl_swscale_aspect ||
- item == ctrl_swscale_width ||
- item == ctrl_swscale_height) {
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "swscale", newconfig.swscale ? true : false,
- newconfig.SwScaleOptions());
- Set();
- }
- else if(item == ctrl_pp) {
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "pp", newconfig.ffmpeg_pp ? true : false,
- newconfig.FfmpegPpOptions());
- Set();
- }
- else if(item == ctrl_unsharp) {
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "unsharp", newconfig.unsharp ? true : false,
- newconfig.UnsharpOptions());
- Set();
- }
- else if(item == ctrl_denoise3d) {
- cXinelibDevice::Instance().ConfigurePostprocessing(
- "denoise3d", newconfig.denoise3d ? true : false,
- newconfig.Denoise3dOptions());
- Set();
- }
- else if(item == ctrl_deinterlace) {
- if(deinterlace == DEINTERLACE_TVTIME && !ctrl_tvtime_method) {
- Set();
- } else if(deinterlace != DEINTERLACE_TVTIME && ctrl_tvtime_method) {
- Set();
- }
- }
-
- return state;
-}
-
-void cMenuSetupVideo::Store(void)
-{
- memcpy(&xc, &newconfig, sizeof(config_t));
-
-#ifdef INTEGER_CONFIG_VIDEO_CONTROLS
-#else
- xc.hue = INDEX_TO_CONTROL(xc.hue);
- xc.saturation = INDEX_TO_CONTROL(xc.saturation);
- xc.contrast = INDEX_TO_CONTROL(xc.contrast);
- xc.brightness = INDEX_TO_CONTROL(xc.brightness);
- xc.sharpness = INDEX_TO_CONTROL(xc.sharpness);
- xc.noise_reduction = INDEX_TO_CONTROL(xc.noise_reduction);
-#endif
-
- strn0cpy(xc.deinterlace_method, xc.s_deinterlaceMethods[deinterlace], sizeof(xc.deinterlace_method));
- strn0cpy(xc.deinterlace_opts, tvtime.ToString(), sizeof(xc.deinterlace_opts));
- SetupStore("Video.Deinterlace", xc.deinterlace_method);
- SetupStore("Video.DeinterlaceOptions", xc.deinterlace_opts);
-
- 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.SwScale", xc.swscale);
- SetupStore("Video.SwScale.Aspect", xc.swscale_change_aspect);
- SetupStore("Video.SwScale.Resize", xc.swscale_resize);
- SetupStore("Video.SwScale.Width", xc.swscale_width);
- SetupStore("Video.SwScale.Height", xc.swscale_height);
- SetupStore("Video.SwScale.Downscale", xc.swscale_downscale);
- SetupStore("Video.HUE", xc.hue);
- SetupStore("Video.Saturation", xc.saturation);
- SetupStore("Video.Contrast", xc.contrast);
- SetupStore("Video.Brightness", xc.brightness);
- SetupStore("Video.Sharpness", xc.sharpness);
- SetupStore("Video.NoiseReduction", xc.noise_reduction);
- SetupStore("Video.Overscan", xc.overscan);
- SetupStore("Video.IBPTrickSpeed", xc.ibp_trickspeed);
- SetupStore("Video.MaxTrickSpeed", xc.max_trickspeed);
- SetupStore("Video.AspectRatio", xc.vo_aspect_ratio);
- SetupStore("Post.pp.Enable", xc.ffmpeg_pp);
- SetupStore("Post.pp.Quality", xc.ffmpeg_pp_quality);
- SetupStore("Post.pp.Mode", xc.ffmpeg_pp_mode);
- SetupStore("Post.unsharp.Enable", xc.unsharp);
- SetupStore("Post.unsharp.luma_matrix_width", xc.unsharp_luma_matrix_width);
- SetupStore("Post.unsharp.luma_matrix_height", xc.unsharp_luma_matrix_height);
- SetupStore("Post.unsharp.luma_amount", xc.unsharp_luma_amount);
- SetupStore("Post.unsharp.chroma_matrix_width", xc.unsharp_chroma_matrix_width);
- SetupStore("Post.unsharp.chroma_matrix_height", xc.unsharp_chroma_matrix_height);
- SetupStore("Post.unsharp.chroma_amount", xc.unsharp_chroma_amount);
- SetupStore("Post.denoise3d.Enable", xc.denoise3d);
- SetupStore("Post.denoise3d.luma", xc.denoise3d_luma);
- SetupStore("Post.denoise3d.chroma", xc.denoise3d_chroma);
- SetupStore("Post.denoise3d.time", xc.denoise3d_time);
- SetupStore("Video.Decoder.MPEG2", xc.s_decoders_MPEG2[xc.decoder_mpeg2]);
- SetupStore("Video.Decoder.H264", xc.s_decoders_H264[xc.decoder_h264]);
-#if 1
- // delete old keys (<1.0.0)
- SetupStore("Video.AutoScale");
-#endif
- Setup.Save();
-}
-
-
-//--- cMenuSetupOSD ----------------------------------------------------------
-
-class cMenuSetupOSD : public cMenuSetupPage
-{
- private:
- config_t newconfig;
-
- int orig_alpha_correction;
- int orig_alpha_correction_abs;
-
- cOsdItem *ctrl_size;
- cOsdItem *ctrl_width;
- cOsdItem *ctrl_scaling;
- cOsdItem *ctrl_alpha;
- cOsdItem *ctrl_alpha_abs;
- cOsdItem *ctrl_blending;
- cOsdItem *ctrl_lowres;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupOSD(void);
- ~cMenuSetupOSD();
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupOSD::cMenuSetupOSD(void)
-{
- memcpy(&newconfig, &xc, sizeof(config_t));
- orig_alpha_correction = xc.alpha_correction;
- orig_alpha_correction_abs = xc.alpha_correction_abs;
- newconfig.extsub_size++;
-
- Set();
-}
-
-cMenuSetupOSD::~cMenuSetupOSD()
-{
- xc.alpha_correction = orig_alpha_correction;
- xc.alpha_correction_abs = orig_alpha_correction_abs;
-}
-
-void cMenuSetupOSD::Set(void)
-{
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- int current = Current();
- Clear();
-
- ctrl_size = NULL;
- ctrl_width = NULL;
- ctrl_scaling = NULL;
- ctrl_blending = NULL;
- ctrl_lowres = NULL;
- ctrl_alpha = NULL;
- ctrl_alpha_abs = NULL;
-
- Add(SeparatorItem(tr("On-Screen Display")));
- Add(new cMenuEditBoolItem(tr("Hide main menu"),
- &newconfig.hide_main_menu));
-
- Add(ctrl_size =
- new cMenuEditStraI18nItem(tr("Resolution"), &newconfig.osd_size,
- OSD_SIZE_count, xc.s_osdSizes));
- if (newconfig.osd_size == OSD_SIZE_custom) {
- Add(ctrl_width =
- new cMenuEditTypedIntItem(indent(tr("Width")), "px",
- &newconfig.osd_width, 480, 2048));
- Add(new cMenuEditTypedIntItem(indent(tr("Height")), "px",
- &newconfig.osd_height, 576, 1200));
- }
-
- Add(ctrl_blending =
- new cMenuEditBoolItem(tr("Blending method"),
- &newconfig.osd_blending,
- tr(xc.s_osdBlendingMethods[OSD_BLENDING_SOFTWARE]),
- tr(xc.s_osdBlendingMethods[OSD_BLENDING_HARDWARE])));
- if(newconfig.osd_blending == OSD_BLENDING_SOFTWARE) {
- Add(ctrl_lowres =
- new cMenuEditBoolItem(indent(tr("Use hardware for low-res video")),
- &newconfig.osd_blending_lowresvideo));
- }
-
- Add(ctrl_scaling =
- new cMenuEditStraI18nItem(tr("Scaling method"), &newconfig.osd_scaling,
- OSD_SCALING_count, xc.s_osdScalings));
-
- Add(new cMenuEditStraI18nItem(tr("Show all layers"), &newconfig.osd_mixer,
- OSD_MIXER_count, xc.s_osdMixers));
-
- Add(ctrl_alpha =
- new cMenuEditTypedIntItem(tr("Dynamic transparency correction"), "%",
- &newconfig.alpha_correction, -200, 200,
- tr("Off")));
- Add(ctrl_alpha_abs =
- new cMenuEditTypedIntItem(tr("Static transparency correction"), "",
- &newconfig.alpha_correction_abs, -0xff, 0xff,
- tr("Off")));
-
- Add(new cMenuEditStraI18nItem(tr("External subtitle size"),
- &newconfig.extsub_size, SUBTITLESIZE_count, xc.s_subtitleSizes));
-
- Add(new cMenuEditBoolItem(tr("DVB subtitle decoder"),
- &newconfig.dvb_subtitles,
- "VDR",
- "frontend"));
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- //SetCurrent(Get(1));
- Display();
-}
-
-eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
-{
- cOsdItem *item = Get(Current());
-
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- Key = NORMALKEY(Key);
-
- if(Key!=kLeft && Key!=kRight)
- return state;
-
- if(item == ctrl_scaling)
- cXinelibOsdProvider::RefreshOsd();
- else if(item == ctrl_alpha)
- xc.alpha_correction = newconfig.alpha_correction;
- else if(item == ctrl_alpha_abs)
- xc.alpha_correction_abs = newconfig.alpha_correction_abs;
-
- if (newconfig.osd_size == OSD_SIZE_custom && !ctrl_width)
- Set();
- if (newconfig.osd_size != OSD_SIZE_custom && ctrl_width)
- Set();
-
- if(newconfig.osd_blending==OSD_BLENDING_SOFTWARE && !ctrl_lowres)
- Set();
- if(newconfig.osd_blending!=OSD_BLENDING_SOFTWARE && ctrl_lowres)
- Set();
- return state;
-}
-
-void cMenuSetupOSD::Store(void)
-{
- newconfig.extsub_size --;
- if(newconfig.extsub_size != xc.extsub_size) {
- cString tmp = cString::sprintf("EXTSUBSIZE %d", newconfig.extsub_size);
- cXinelibDevice::Instance().PlayFileCtrl(tmp);
- }
-
- memcpy(&xc, &newconfig, sizeof(config_t));
- orig_alpha_correction = xc.alpha_correction;
- orig_alpha_correction_abs = xc.alpha_correction_abs;
-
- SetupStore("OSD.Size", xc.s_osdSizes[xc.osd_size]);
- SetupStore("OSD.Width", xc.osd_width);
- SetupStore("OSD.Height", xc.osd_height);
- SetupStore("OSD.Scaling", xc.osd_scaling);
- SetupStore("OSD.HideMainMenu", xc.hide_main_menu);
- SetupStore("OSD.LayersVisible", xc.osd_mixer);
- SetupStore("OSD.Blending", xc.osd_blending);
- SetupStore("OSD.BlendingLowRes", xc.osd_blending_lowresvideo);
-#if 1
- // Delete old keys (<=1.0.0)
- SetupStore("OSD.UnscaledAlways");
- SetupStore("OSD.UnscaledLowRes");
- SetupStore("OSD.UnscaledOpaque");
- SetupStore("OSD.Prescale");
- SetupStore("OSD.Downscale");
-#endif
- SetupStore("OSD.AlphaCorrection", xc.alpha_correction);
- SetupStore("OSD.AlphaCorrectionAbs", xc.alpha_correction_abs);
-
- SetupStore("OSD.ExtSubSize", xc.extsub_size);
- SetupStore("OSD.DvbSubtitles", xc.dvb_subtitles);
-
- Setup.Save();
-}
-
-
-//--- cMenuSetupDecoder ------------------------------------------------------
-
-class cMenuSetupDecoder : public cMenuSetupPage
-{
- private:
- config_t newconfig;
-
- int pes_buffers_ind;
-
- cOsdItem *ctrl_pes_buffers_ind;
- cOsdItem *ctrl_pes_buffers;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupDecoder(void);
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupDecoder::cMenuSetupDecoder(void)
-{
- int i;
- memcpy(&newconfig, &xc, sizeof(config_t));
-
- pes_buffers_ind = PES_BUFFERS_CUSTOM;
- for(i=0;xc.s_bufferSize[i];i++)
- if(xc.pes_buffers == xc.i_pesBufferSize[i])
- pes_buffers_ind = i;
-
- Set();
-}
-
-void cMenuSetupDecoder::Set(void)
-{
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- int current = Current();
- Clear();
-
- Add(SeparatorItem(tr("Decoder")));
- Add(ctrl_pes_buffers_ind =
- new cMenuEditStraI18nItem(tr("Buffer size"), &pes_buffers_ind,
- PES_BUFFERS_count, xc.s_bufferSize));
- if(pes_buffers_ind == PES_BUFFERS_CUSTOM)
- Add(ctrl_pes_buffers =
- new cMenuEditIntItem(indent(tr("Number of PES packets")),
- &newconfig.pes_buffers, 10, 10000));
- else
- ctrl_pes_buffers = NULL;
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- Display();
-}
-
-eOSState cMenuSetupDecoder::ProcessKey(eKeys Key)
-{
- cOsdItem *item = Get(Current());
-
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- Key = NORMALKEY(Key);
-
- if(Key!=kLeft && Key!=kRight)
- return state;
-
- if(item == ctrl_pes_buffers_ind) {
- if(pes_buffers_ind == PES_BUFFERS_CUSTOM && !ctrl_pes_buffers) {
- Set();
- } else if(pes_buffers_ind != PES_BUFFERS_CUSTOM && ctrl_pes_buffers) {
- Set();
- }
- }
-
- return state;
-}
-
-void cMenuSetupDecoder::Store(void)
-{
- int old_buffers = xc.pes_buffers;
-
- //memcpy(&xc, &newconfig, sizeof(config_t));
- xc.pes_buffers = newconfig.pes_buffers;
-
- if(pes_buffers_ind != PES_BUFFERS_CUSTOM)
- xc.pes_buffers = xc.i_pesBufferSize[pes_buffers_ind];
-
- SetupStore("Decoder.PesBuffers", xc.pes_buffers);
-#if 1
- // delete old keys (<1.0.0)
- SetupStore("Decoder.Priority");
- SetupStore("Decoder.InactivityTimer");
-#endif
-
- if(xc.pes_buffers != old_buffers)
- cXinelibDevice::Instance().ConfigureDecoder(xc.pes_buffers);
- Setup.Save();
-}
-
-
-//--- cMenuSetupLocal --------------------------------------------------------
-
-class cMenuSetupLocal : public cMenuSetupPage
-{
- private:
- config_t newconfig;
-
- int local_frontend;
- int local_frontend_orig;
- int audio_driver;
- int audio_driver_orig;
- int video_driver;
- int video_driver_orig;
-
- cOsdItem *ctrl_scale;
- cOsdItem *ctrl_local_fe;
- cOsdItem *ctrl_driver;
- cOsdItem *ctrl_fullscreen;
- cOsdItem *ctrl_window_width;
- cOsdItem *ctrl_window_height;
- cOsdItem *ctrl_interlace_order;
- cOsdItem *ctrl_aspect;
- cOsdItem *ctrl_audio_driver;
- cOsdItem *ctrl_audio_port;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupLocal(void);
- ~cMenuSetupLocal(void);
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupLocal::cMenuSetupLocal(void)
-{
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
-
- memcpy(&newconfig, &xc, sizeof(config_t));
-
- local_frontend_orig = local_frontend = strstra(xc.local_frontend, xc.s_frontends, 0);
- audio_driver_orig = audio_driver = strstra(xc.audio_driver, xc.s_audioDrivers, 0);
-
- video_driver = 0;
- if(local_frontend == FRONTEND_X11)
- video_driver = strstra(xc.video_driver, xc.s_videoDriversX11, 0);
- if(local_frontend == FRONTEND_FB)
- video_driver = strstra(xc.video_driver, xc.s_videoDriversFB, 0);
- video_driver_orig = video_driver;
-
- Set();
-}
-
-cMenuSetupLocal::~cMenuSetupLocal(void)
-{
- cXinelibDevice::Instance().ConfigureWindow(
- xc.fullscreen, xc.width, xc.height, xc.modeswitch, xc.modeline,
- 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.speaker_type);
-}
-
-void cMenuSetupLocal::Set(void)
-{
- int current = Current();
- Clear();
-
- ctrl_interlace_order = NULL;
- ctrl_fullscreen = NULL;
- ctrl_window_width = NULL;
- ctrl_window_height = NULL;
- ctrl_driver = NULL;
- ctrl_aspect = NULL;
- ctrl_scale = NULL;
- ctrl_audio_driver = NULL;
- ctrl_audio_port = NULL;
-
- Add(SeparatorItem(tr("Local Frontend")));
-
- Add(ctrl_local_fe =
- new cMenuEditStraI18nItem(tr("Local Display Frontend"), &local_frontend,
- FRONTEND_count, xc.s_frontendNames));
-
- if(local_frontend == FRONTEND_X11) {
- Add(new cMenuEditBoolItem(tr("Use keyboard"),
- &newconfig.use_x_keyboard));
- }
-
- if(local_frontend != FRONTEND_NONE) {
- Add(SubMenuItem(tr("Decoder"), osUser1));
- Add(SeparatorItem(tr("Video")));
- }
-
- if(local_frontend == FRONTEND_X11) {
- Add(ctrl_driver =
- new cMenuEditStraI18nItem(tr("Driver"), &video_driver,
- X11_DRIVER_count,
- xc.s_videoDriverNamesX11));
- Add(new cMenuEditStrItem(tr("Display address"), newconfig.video_port,
- 31, DriverNameChars));
-
- } else if(local_frontend == FRONTEND_FB) {
- Add(ctrl_driver =
- new cMenuEditStraI18nItem(tr("Driver"), &video_driver,
- FB_DRIVER_count,
- xc.s_videoDriverNamesFB));
- Add(new cMenuEditStrItem(tr("Framebuffer device"), newconfig.video_port, 31,
- DriverNameChars));
- }
-#if 0
- if(local_frontend == FRONTEND_FB || !newconfig.fullscreen) {
- Add(new cMenuEditStrItem( "Modeline", newconfig.modeline, 31,
- ModeLineChars));
- Add(new cMenuEditBoolItem("Videomode switching", &xc.modeswitch));
- }
-#endif
-
- if(local_frontend == FRONTEND_X11) {
- Add(ctrl_fullscreen = new cMenuEditBoolItem(tr("Fullscreen mode"),
- &newconfig.fullscreen));
- if(!newconfig.fullscreen) {
- Add(ctrl_window_width =
- new cMenuEditTypedIntItem( indent(tr("Window width")), tr("px"),
- &newconfig.width, 1, 2048));
- Add(ctrl_window_height =
- new cMenuEditTypedIntItem( indent(tr("Window height")), tr("px"),
- &newconfig.height, 1, 2048));
- }
- }
-
- if(local_frontend != FRONTEND_NONE) {
- Add(ctrl_aspect =
- new cMenuEditStraI18nItem(tr("Window aspect"), &newconfig.display_aspect,
- ASPECT_count, xc.s_aspects));
- Add(ctrl_scale =
- new cMenuEditBoolItem(tr("Scale to window size"), &newconfig.scale_video));
-
-#ifdef HAVE_XV_FIELD_ORDER
- Add(ctrl_interlace_order =
- new cMenuEditStraI18nItem(tr("Interlaced Field Order"),
- &newconfig.field_order, FIELD_ORDER_count,
- xc.s_fieldOrder));
-#endif
-
- Add(SeparatorItem(tr("Audio")));
-
- Add(ctrl_audio_driver =
- new cMenuEditStraI18nItem(tr("Driver"), &audio_driver,
- AUDIO_DRIVER_count, xc.s_audioDriverNames));
- if(audio_driver != AUDIO_DRIVER_AUTO && audio_driver != AUDIO_DRIVER_NONE)
- Add(ctrl_audio_port =
- new cMenuEditStrItem(tr("Port"), newconfig.audio_port, 31,
- DriverNameChars));
- }
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- Display();
-}
-
-eOSState cMenuSetupLocal::ProcessKey(eKeys Key)
-{
- int prev_frontend = local_frontend;
- int prev_audio_driver = audio_driver;
-
- cOsdItem *item = Get(Current());
-
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- if(state == osUser1)
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupDecoder);
-
- Key = NORMALKEY(Key);
-
- if((Key!=kLeft && Key!=kRight) || !item)
- return state;
-
- if(item == ctrl_audio_driver) {
- if(prev_audio_driver != audio_driver) {
-
- if(audio_driver == audio_driver_orig)
- strcpy(newconfig.audio_port, xc.audio_port);
- else if(audio_driver == AUDIO_DRIVER_ALSA)
- strcpy(newconfig.audio_port, "default");
- else if(audio_driver == AUDIO_DRIVER_OSS)
- strcpy(newconfig.audio_port, "/dev/dsp");
- else
- strcpy(newconfig.audio_port, "");
- Set();
- }
- else if((audio_driver != AUDIO_DRIVER_AUTO &&
- audio_driver != AUDIO_DRIVER_NONE) &&
- !ctrl_audio_port)
- Set();
- else if((audio_driver == AUDIO_DRIVER_AUTO ||
- audio_driver == AUDIO_DRIVER_NONE) &&
- ctrl_audio_port)
- Set();
- }
- else if(item == ctrl_aspect || item == ctrl_scale || item == ctrl_interlace_order)
- cXinelibDevice::Instance().ConfigureWindow(
- xc.fullscreen, xc.width, xc.height, xc.modeswitch, xc.modeline,
- newconfig.display_aspect, newconfig.scale_video,
- newconfig.field_order);
- else if(item == ctrl_local_fe && local_frontend != prev_frontend) {
-
- if(local_frontend == local_frontend_orig) {
- video_driver = video_driver_orig;
- strcpy(newconfig.video_port, xc.video_port);
- }
- else if(local_frontend == FRONTEND_FB)
- strcpy(newconfig.video_port, "/dev/fb/0");
- else if(local_frontend == FRONTEND_X11)
- strcpy(newconfig.video_port, "0.0");
-
- Set();
- }
- else if(item == ctrl_fullscreen) {
- if(!newconfig.fullscreen && !ctrl_window_width) {
- Set();
- } else if(newconfig.fullscreen && ctrl_window_width) {
- Set();
- }
- }
-
- return state;
-}
-
-void cMenuSetupLocal::Store(void)
-{
- int old_buffers = xc.pes_buffers;
-
- memcpy(&xc, &newconfig, sizeof(config_t));
-
- xc.pes_buffers = old_buffers;
-
- strn0cpy(xc.audio_driver, xc.s_audioDrivers[audio_driver], sizeof(xc.audio_driver));
- strn0cpy(xc.local_frontend, xc.s_frontends[local_frontend], sizeof(xc.local_frontend));
- if(local_frontend == FRONTEND_X11)
- strn0cpy(xc.video_driver, xc.s_videoDriversX11[video_driver], sizeof(xc.video_driver));
- if(local_frontend == FRONTEND_FB)
- strn0cpy(xc.video_driver, xc.s_videoDriversFB[video_driver], sizeof(xc.video_driver));
-
- SetupStore("Frontend", xc.local_frontend);
- SetupStore("Audio.Driver", xc.audio_driver);
- SetupStore("Audio.Port", xc.audio_port);
- SetupStore("Video.Driver", xc.video_driver);
- SetupStore("Video.Port", xc.video_port);
-#if 0
- SetupStore("Video.Port", NULL); /* should delete entry ? */
- SetupStore("Video.Port.X11",xc.video_port_x11);
- SetupStore("Video.Port.FB", xc.video_port_fb);
-#endif
- SetupStore("Video.Scale", xc.scale_video);
- SetupStore("Video.FieldOrder", xc.field_order);
- SetupStore("Modeline", xc.modeline);
- SetupStore("VideoModeSwitching", xc.modeswitch);
- SetupStore("Fullscreen", xc.fullscreen);
- SetupStore("DisplayAspect", xc.s_aspects[xc.display_aspect]);
- SetupStore("X11.WindowWidth", xc.width);
- SetupStore("X11.WindowHeight", xc.height);
- SetupStore("X11.UseKeyboard", xc.use_x_keyboard);
- Setup.Save();
-}
-
-//--- cMenuSetupRemote -------------------------------------------------------
-
-class cMenuSetupRemote : public cMenuSetupPage
-{
- private:
- config_t newconfig;
-
- cOsdItem *ctrl_remote_mode;
- cOsdItem *ctrl_usertp;
- cOsdItem *ctrl_rtp_addr;
- cOsdItem *ctrl_use_http;
- cOsdItem *ctrl_http_ctrl;
- cOsdItem *ctrl_use_rtsp;
- cOsdItem *ctrl_rtsp_ctrl;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupRemote(void);
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupRemote::cMenuSetupRemote(void)
-{
- memcpy(&newconfig, &xc, sizeof(config_t));
- Set();
-}
-
-void cMenuSetupRemote::Set(void)
-{
- int current = Current();
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- Clear();
-
- Add(SeparatorItem(tr("Remote Clients")));
- Add(ctrl_remote_mode = new cMenuEditBoolItem(tr("Allow remote clients"),
- &newconfig.remote_mode));
- ctrl_usertp = NULL;
- ctrl_rtp_addr = NULL;
- ctrl_use_http = NULL;
- ctrl_use_rtsp = NULL;
- ctrl_http_ctrl = NULL;
- ctrl_rtsp_ctrl = NULL;
- if(newconfig.remote_mode) {
- Add(new cMenuEditIntItem( indent(tr("Listen port (TCP and broadcast)")),
- &newconfig.listen_port,
- 0, 0xffff));
- Add(new cMenuEditStrItem( indent(tr("Listen address")),
- &newconfig.remote_local_ip[0], 16, "0123456789."));
- Add(new cMenuEditBoolItem(indent(tr("Remote keyboard")),
- &newconfig.remote_keyboard));
- Add(new cMenuEditIntItem( indent(tr("Max number of clients")),
- &newconfig.remote_max_clients,
- 1, MAXCLIENTS));
-
- Add(new cMenuEditBoolItem(indent(tr("PIPE transport")),
- &newconfig.remote_usepipe));
- Add(new cMenuEditBoolItem(indent(tr("TCP transport")),
- &newconfig.remote_usetcp));
- Add(new cMenuEditBoolItem(indent(tr("UDP transport")),
- &newconfig.remote_useudp));
- Add(ctrl_usertp =
- new cMenuEditBoolItem(indent(tr("RTP (multicast) transport")),
- &newconfig.remote_usertp));
- if(newconfig.remote_usertp) {
- Add(ctrl_rtp_addr =
- new cMenuEditStrItem( inden2(tr("Address")),
- &newconfig.remote_rtp_addr[0], 16, "0123456789."));
- Add(new cMenuEditOddIntItem( inden2(tr("Port")),
- &newconfig.remote_rtp_port, 1000, 0xfffe));
- Add(new cMenuEditIntItem( inden2(tr("TTL")),
- &newconfig.remote_rtp_ttl, 1, 10));
- Add(new cMenuEditBoolItem( inden2(tr("Transmit always on")),
- &newconfig.remote_rtp_always_on));
- Add(new cMenuEditBoolItem( inden2(tr("SAP announcements")),
- &newconfig.remote_rtp_sap));
- }
- Add(new cMenuEditBoolItem(indent(tr("Server announce broadcasts")),
- &newconfig.remote_usebcast));
-
- Add(new cMenuEditBoolItem(indent(tr("HTTP transport for media files")),
- &newconfig.remote_http_files));
-
- Add(SeparatorItem(tr("Additional network services")));
- Add(ctrl_use_http =
- new cMenuEditBoolItem(tr("HTTP server"),
- &newconfig.remote_use_http));
- if(newconfig.remote_use_http)
- Add(ctrl_http_ctrl =
- new cMenuEditBoolItem(tr("HTTP clients can control VDR"),
- &newconfig.remote_use_http_ctrl));
- Add(ctrl_use_rtsp =
- new cMenuEditBoolItem(tr("RTSP server"),
- &newconfig.remote_use_rtsp));
- if(newconfig.remote_use_rtsp)
- Add(ctrl_rtsp_ctrl =
- new cMenuEditBoolItem(tr("RTSP clients can control VDR"),
- &newconfig.remote_use_rtsp_ctrl));
- }
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- Display();
-}
-
-eOSState cMenuSetupRemote::ProcessKey(eKeys Key)
-{
- cOsdItem *item = Get(Current());
-
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- Key = NORMALKEY(Key);
-
- if(Key!=kLeft && Key!=kRight)
- return state;
-
- if(item == ctrl_remote_mode) {
- if(newconfig.remote_mode && !ctrl_usertp) {
- Set();
- } else if(!newconfig.remote_mode && ctrl_usertp) {
- Set();
- }
- }
- if(item == ctrl_usertp) {
- if(newconfig.remote_usertp && !ctrl_rtp_addr) {
- Set();
- } else if(!newconfig.remote_usertp && ctrl_rtp_addr) {
- Set();
- }
- }
- if(item == ctrl_use_http) {
- if(newconfig.remote_use_http && !ctrl_http_ctrl) {
- Set();
- } else if(!newconfig.remote_use_http && ctrl_http_ctrl) {
- Set();
- }
- }
- if(item == ctrl_use_rtsp) {
- if(newconfig.remote_use_rtsp && !ctrl_rtsp_ctrl) {
- Set();
- } else if(!newconfig.remote_use_rtsp && ctrl_rtsp_ctrl) {
- Set();
- }
- }
-
- return state;
-}
-
-void cMenuSetupRemote::Store(void)
-{
- memcpy(&xc, &newconfig, sizeof(config_t));
-
- SetupStore("RemoteMode", xc.remote_mode);
- SetupStore("Remote.ListenPort", xc.listen_port);
- SetupStore("Remote.Iface", xc.remote_local_if);
- SetupStore("Remote.LocalIP", xc.remote_local_ip);
- SetupStore("Remote.Keyboard", xc.remote_keyboard);
-
- SetupStore("Remote.MaxClients", xc.remote_max_clients);
- SetupStore("Remote.UsePipe",xc.remote_usepipe);
- SetupStore("Remote.UseTcp", xc.remote_usetcp);
- SetupStore("Remote.UseUdp", xc.remote_useudp);
- SetupStore("Remote.UseRtp", xc.remote_usertp);
- SetupStore("Remote.UseBroadcast", xc.remote_usebcast);
-
- SetupStore("Remote.UseHttp", xc.remote_http_files);
-
- SetupStore("Remote.Rtp.Address", xc.remote_rtp_addr);
- SetupStore("Remote.Rtp.Port", xc.remote_rtp_port);
- SetupStore("Remote.Rtp.TTL", xc.remote_rtp_ttl);
- SetupStore("Remote.Rtp.AlwaysOn", xc.remote_rtp_always_on);
- SetupStore("Remote.Rtp.SapAnnouncements", xc.remote_rtp_sap);
-
- SetupStore("Remote.AllowRtsp", xc.remote_use_rtsp);
- SetupStore("Remote.AllowRtspCtrl", xc.remote_use_rtsp_ctrl);
- SetupStore("Remote.AllowHttp", xc.remote_use_http);
- SetupStore("Remote.AllowHttpCtrl", xc.remote_use_http_ctrl);
-
- cXinelibDevice::Instance().Listen(xc.remote_mode, xc.listen_port);
- Setup.Save();
-}
-
-//--- cMenuSetupMediaPlayer --------------------------------------------------------
-
-class cMenuSetupMediaPlayer : public cMenuSetupPage
-{
- private:
- config_t newconfig;
-
- cOsdItem *media_ctrl_playlist_tracknumber;
- cOsdItem *media_ctrl_playlist_artist;
- cOsdItem *media_ctrl_playlist_album;
- cOsdItem *media_ctrl_playlist_cache;
- cOsdItem *media_ctrl_playlist_id3scanner;
-
- protected:
- virtual void Store(void);
- void Set(void);
-
- public:
- cMenuSetupMediaPlayer(void);
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuSetupMediaPlayer::cMenuSetupMediaPlayer(void)
-{
- memcpy(&newconfig, &xc, sizeof(config_t));
- Set();
-}
-
-void cMenuSetupMediaPlayer::Set(void)
-{
- SetPlugin(cPluginManager::GetPlugin(PLUGIN_NAME_I18N));
- int current = Current();
- Clear();
-
- Add(SeparatorItem(tr("Playlist settings")));
-
- Add(media_ctrl_playlist_tracknumber =
- new cMenuEditBoolItem(tr("Show the track number"),
- &newconfig.playlist_tracknumber));
-
- Add(media_ctrl_playlist_artist =
- new cMenuEditBoolItem(tr("Show the name of the artist"),
- &newconfig.playlist_artist));
-
- Add(media_ctrl_playlist_album =
- new cMenuEditBoolItem(tr("Show the name of the album"),
- &newconfig.playlist_album));
-
- Add(media_ctrl_playlist_id3scanner =
- new cMenuEditBoolItem(tr("Scan for metainfo"),
- &newconfig.enable_id3_scanner));
-
- Add(media_ctrl_playlist_cache =
- new cMenuEditBoolItem(tr("Cache metainfo"),
- &newconfig.cache_implicit_playlists));
-
- Add(new cMenuEditBoolItem(tr("Arrow keys control DVD playback"),
- &newconfig.dvd_arrow_keys_control_playback));
-
- Add(SeparatorItem(tr("Media Player")));
- Add(new cMenuEditBitItem(tr("Play file"), &newconfig.media_menu_items, MEDIA_MENU_FILES));
- Add(new cMenuEditBitItem(tr("Play music"), &newconfig.media_menu_items, MEDIA_MENU_MUSIC));
- Add(new cMenuEditBitItem(tr("View images"), &newconfig.media_menu_items, MEDIA_MENU_IMAGES));
- Add(new cMenuEditBitItem(tr("Play DVD disc"), &newconfig.media_menu_items, MEDIA_MENU_DVD));
- Add(new cMenuEditBitItem(tr("Play audio CD"), &newconfig.media_menu_items, MEDIA_MENU_CD));
- Add(new cMenuEditBitItem(tr("Play BluRay disc"), &newconfig.media_menu_items, MEDIA_MENU_BLURAY));
- Add(new cMenuEditBitItem(tr("Video settings"), &newconfig.media_menu_items, MEDIA_MENU_VIDEO_SETUP));
- Add(new cMenuEditBitItem(tr("Audio settings"), &newconfig.media_menu_items, MEDIA_MENU_AUDIO_SETUP));
-
- if(current<1) current=1; /* first item is not selectable */
- SetCurrent(Get(current));
- Display();
-}
-
-eOSState cMenuSetupMediaPlayer::ProcessKey(eKeys Key)
-{
- eOSState state = cMenuSetupPage::ProcessKey(Key);
- return state;
-}
-
-void cMenuSetupMediaPlayer::Store(void)
-{
- memcpy(&xc, &newconfig, sizeof(config_t));
-
- SetupStore("Playlist.Tracknumber", xc.playlist_tracknumber);
- SetupStore("Playlist.Album", xc.playlist_album);
- SetupStore("Playlist.Artist", xc.playlist_artist);
- SetupStore("Media.CacheImplicitPlaylists", xc.cache_implicit_playlists);
- SetupStore("Media.EnableID3Scanner", xc.enable_id3_scanner);
- SetupStore("Media.DVD.ArrowKeysControlPlayback", xc.dvd_arrow_keys_control_playback);
- SetupStore("Media.MenuItems", xc.media_menu_items);
-
- Setup.Save();
-}
-
-} // namespace
-
-
-//--- cMenuTestImages ------------------------------------------------------
-
-#include <vdr/osdbase.h>
-
-#define OSD_W (720-2)
-#define OSD_H (576-2)
-#define OSD_X (1)
-#define OSD_Y (1)
-
-//
-// cTestGrayscale
-//
-
-class cTestGrayscale : public cOsdObject
-{
- private:
- cOsd *m_Osd;
-
- public:
- cTestGrayscale() { m_Osd = NULL; }
- virtual ~cTestGrayscale() { delete m_Osd; }
-
- virtual void Show();
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-void cTestGrayscale::Show()
-{
- tArea areas [] = { { 0, 0, OSD_W/2 - 1, OSD_H - 1, 8},
- {OSD_W/2, 0, OSD_W - 1, OSD_H - 1, 8}};
- int i;
-
- if(!m_Osd)
- m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y, 0);
-
- if(m_Osd) {
- if (m_Osd->CanHandleAreas(areas, sizeof(areas) / sizeof(tArea) ) == oeOk) {
- m_Osd->SetAreas(areas, sizeof(areas) / sizeof(tArea));
- m_Osd->Flush();
-
- // border
- m_Osd->DrawRectangle(0, 0, OSD_W - 1, OSD_H - 1, 0xff000000);
- m_Osd->DrawRectangle(1, 1, OSD_W - 2, OSD_H - 2, 0xff000000);
-
- // background
- m_Osd->DrawRectangle(2, 2, 2+103, OSD_H - 3, 0xffffffff);
- m_Osd->DrawRectangle(OSD_W-2-103, 2, OSD_W-2, OSD_H - 3, 0xff000000);
-
- for(i=0; i<0xff; i++)
- m_Osd->DrawRectangle(2+103+2*i, 2, 2+103+2*(i+1), OSD_H - 3,
- 0xff000000|(i*0x00010101)/*=(i<<16)|(i<<8)|(i)*/);
- // line
- m_Osd->DrawRectangle(1, OSD_H/2-20, OSD_W - 2, OSD_H/2, 0xffffffff);
- m_Osd->DrawRectangle(1, OSD_H/2+1, OSD_W - 2, OSD_H/2+21, 0xff000000);
-
- // Cross
- for(int x=0; x<OSD_W;x++) {
- m_Osd->DrawPixel(x, x*OSD_H/OSD_W, 0x00000000);
- m_Osd->DrawPixel(x, OSD_H - 1 - x*OSD_H/OSD_W, 0x00000000);
- }
-
- // commit
- m_Osd->Flush();
- }
-
- }
-}
-
-eOSState cTestGrayscale::ProcessKey(eKeys key)
-{
- char s[32];
- static int br = xc.brightness;
- static int co = xc.contrast;
- eOSState state = cOsdObject::ProcessKey(key);
- if (state == osUnknown) {
- switch (key & ~k_Repeat) {
- case kOk:
- case kBack:
- return osEnd;
- case kRight:
- br += 0xffff/1024*2;
- case kLeft:
- br -= 0xffff/1024;
- sprintf(s, "b %d", br);
- m_Osd->DrawText(400, 100, s, 0xff000000, 0xffffffff, cFont::GetFont(fontSml));
- cXinelibDevice::Instance().ConfigureVideo(xc.hue, xc.saturation, br, xc.sharpness, xc.noise_reduction, co, xc.overscan, xc.vo_aspect_ratio);
- m_Osd->Flush();
- return osContinue;
- case kUp:
- co += 0xffff/1024*2;
- case kDown:
- co -= 0xffff/1024;
- sprintf(s, "c %d", co);
- m_Osd->DrawText(400, 130, s, 0xff000000, 0xffffffff, cFont::GetFont(fontSml));
- cXinelibDevice::Instance().ConfigureVideo(xc.hue, xc.saturation, br, xc.sharpness, xc.noise_reduction, co, xc.overscan, xc.vo_aspect_ratio);
- m_Osd->Flush();
- return osContinue;
- }
- }
- return state;
-}
-
-
-//
-// cTestBitmap
-//
-
-class cTestBitmap : public cOsdObject
-{
- private:
- cOsd *m_Osd;
- int bpp;
-
- public:
- cTestBitmap(int _bpp = 1) {
- m_Osd = NULL;
- if(_bpp<1) _bpp = 1;
- if(_bpp>6) _bpp = 6;
- bpp = 1<<_bpp;
- }
- virtual ~cTestBitmap() { delete m_Osd; }
-
- virtual void Show();
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-void cTestBitmap::Show()
-{
- tArea areas [] = {{ 0, 0, OSD_W - 1, OSD_H - 1, 8}};
- int x, y, bit = 0;
-
- if(!m_Osd) {
- m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y, 0);
-
- if(m_Osd) {
- if (m_Osd->CanHandleAreas(areas, sizeof(areas) / sizeof(tArea) ) == oeOk) {
- m_Osd->SetAreas(areas, sizeof(areas) / sizeof(tArea));
- m_Osd->Flush();
- }
- }
- }
-
- if(m_Osd) {
- for(x=0; x<OSD_W; x+=bpp) {
- bit = (x/bpp) & 1;
- for(y=0; y<OSD_H; y+=bpp) {
- m_Osd->DrawRectangle(x, y, x+bpp, y+bpp, bit?0xffffffff:0xff000000);
- bit = !bit;
- }
- }
- // commit
- m_Osd->Flush();
- }
-}
-
-eOSState cTestBitmap::ProcessKey(eKeys key)
-{
- eOSState state = cOsdObject::ProcessKey(key);
-
- if (state == osUnknown) {
- switch (key & ~k_Repeat) {
- case kOk:
- case kBack:
- return osEnd;
- case kRight:
- bpp = (bpp<64) ? (bpp<<1) : 1;
- Show();
- return osContinue;
- case kLeft:
- bpp = (bpp>1) ? (bpp>>1) : 64;
- Show();
- return osContinue;
- default:
- break;
- }
- }
- return state;
-}
-
-//
-// cMenuTestImages
-//
-
-#include <vdr/remote.h> // CallPlugin
-
-extern cOsdObject *g_PendingMenuAction;
-
-class cMenuTestImages : public cMenuSetupPage {
-
- protected:
- void Set(void);
- virtual void Store(void) {};
-
- public:
- cMenuTestImages();
-
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-cMenuTestImages::cMenuTestImages()
-{
- Set();
-}
-
-void cMenuTestImages::Set(void)
-{
- char buf[128];
- Clear();
-
- SetHasHotkeys();
- Add(new cOsdItem(tr("Grayscale"), osUser1));
-
- snprintf(buf, sizeof(buf), "%s 1bit", tr("Bitmap"));
- buf[sizeof(buf)-1] = 0;
- Add(new cOsdItem(buf, osUser2));
-
- snprintf(buf, sizeof(buf), "%s 4bit", tr("Bitmap"));
- buf[sizeof(buf)-1] = 0;
- Add(new cOsdItem(buf, osUser3));
-
- Display();
-}
-
-eOSState cMenuTestImages::ProcessKey(eKeys Key)
-{
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- switch (state) {
- case osUser1:
- if(cRemote::CallPlugin("xineliboutput"))
- g_PendingMenuAction = new cTestGrayscale();
- return osEnd;
- case osUser2:
- if(cRemote::CallPlugin("xineliboutput"))
- g_PendingMenuAction = new cTestBitmap(1);
- return osEnd;
- case osUser3:
- if(cRemote::CallPlugin("xineliboutput"))
- g_PendingMenuAction = new cTestBitmap(4);
- return osEnd;
- default: ;
- }
-
- return state;
-}
-
-//--- cMenuSetupXinelib ------------------------------------------------------
-
-cMenuSetupXinelib::cMenuSetupXinelib(void)
-{
- XinelibOutputSetupMenu::controls[0] = tr("Off");
- Set();
-}
-
-void cMenuSetupXinelib::Set(void)
-{
- Clear();
-
- SetHasHotkeys();
- Add(new cOsdItem(hk(tr("Audio")), osUser1));
- Add(new cOsdItem(hk(tr("Audio Equalizer")),osUser2));
- Add(new cOsdItem(hk(tr("Video")), osUser3));
- Add(new cOsdItem(hk(tr("OSD")), osUser4));
- //Add(new cOsdItem(hk(tr("Decoder")), osUser5));
- Add(new cOsdItem(hk(tr("Media Player")), osUser5));
- Add(new cOsdItem(hk(tr("Local Frontend")), osUser6));
- Add(new cOsdItem(hk(tr("Remote Clients")), osUser7));
- Add(new cOsdItem(hk(tr("Test Images")), osUser8));
-
- Display();
-}
-
-eOSState cMenuSetupXinelib::ProcessKey(eKeys Key)
-{
- eOSState state = cMenuSetupPage::ProcessKey(Key);
-
- switch (state) {
- case osUser1:
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupAudio);
- case osUser2:
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupAudioEq);
- case osUser3:
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupVideo);
- case osUser4:
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupOSD);
- case osUser5:
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupMediaPlayer);
- case osUser6:
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupLocal);
- case osUser7:
- return AddSubMenu(new XinelibOutputSetupMenu::cMenuSetupRemote);
- case osUser8:
- return AddSubMenu(new cMenuTestImages);
-
- default: ;
- }
-
- return state;
-}
-
-