diff options
author | Andreas Regel <andreas.regel@powarman.de> | 2004-07-31 23:55:00 +0200 |
---|---|---|
committer | Andreas Regel <andreas.regel@powarman.de> | 2004-07-31 23:55:00 +0200 |
commit | c024446839241af2fa7d618ce49cc8c1e5693f7f (patch) | |
tree | 6fe9beb2336294e030a739c4039911fb3e51d477 /setup.c | |
parent | 1df133b2a0565a35c3b07e043bd04b449869a0cb (diff) | |
download | vdr-plugin-osdpip-c024446839241af2fa7d618ce49cc8c1e5693f7f.tar.gz vdr-plugin-osdpip-c024446839241af2fa7d618ce49cc8c1e5693f7f.tar.bz2 |
Release version 0.0.6v0.0.6
- added channel swapping. It is now possible to swap the currently viewed
channel with the pip channel by pressing the red key. (thanks to Sascha
Volkenandt)
- added support for other aspect ratios than 4:3. Image is now correctly
scaled and black border is added when necessary.
- added automatic frame dropping that always takes the last frame from
the ringbuffer.
- added -D_GNU_SOURCE to DEFINES in Makefile
- fixed a memory leak: missing deletion of frame ringbuffer
- fixed a memory leak: missing frame deletion in case of a full ringbuffer
- small speedup through just putting relevant frames to ringbuffer
- updated finnish translations (thanks to Rolf Ahrenberg)
Diffstat (limited to 'setup.c')
-rw-r--r-- | setup.c | 158 |
1 files changed, 158 insertions, 0 deletions
@@ -0,0 +1,158 @@ +/* + * OSD Picture in Picture plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + */ + +#include <vdr/config.h> + +#include "setup.h" + +#if VDRVERSNUM < 10307 +# if MAXNUMCOLORS < 256 +# warning WARNING: YOU WILL NOT BE ABLE TO USE 256 COLOR PIP +# endif + +# ifndef VDR_OSDPIP_PATCHED +# warning WARNING: YOU WILL NOT BE ABLE TO USE VARIABLE COLOR PIP +# endif + +# if MAXNUMCOLORS < 256 +const int kColorDepths = 1; +# else +# ifndef VDR_OSDPIP_PATCHED +const int kColorDepths = 3; +# else +const int kColorDepths = 4; +# endif +# endif +#else +const int kColorDepths = 4; +#endif + +const int kSizes = 6; +const int kFrameModes = 3; +const int kFrameDrops = 4; +const int kInfoPositions = 4; + +const char * ColorDepthItems[] = {NULL, NULL, NULL, NULL, NULL}; // initialized later +const char * InfoPositionItems[] = {NULL, NULL, NULL, NULL, NULL}; // initialized later +const char * FrameDropItems[] = {NULL, NULL, NULL, NULL, NULL}; // initialized later + +const char * SizeItems[] = { + "120x96", + "160x128", + "200x160", + "240x192", + "280x224", + "320x256", + NULL +}; + +const char * FrameModeItems[] = { + "I", + "I, P", + "I, P, B" +}; + +cOsdPipSetup OsdPipSetup; + +cOsdPipSetup::cOsdPipSetup(void) +{ + XPosition = 50; + YPosition = 50; + CropLeft = 5; + CropRight = 5; + CropTop = 5; + CropBottom = 5; + ColorDepth = kDepthGrey16; + Size = 2; + FrameMode = kFrameModeI; + FrameDrop = -1; + SwapFfmpeg = 1; + ShowInfo = 1; + InfoWidth = 400; + InfoPosition = kInfoBottomLeft; +} + +bool cOsdPipSetup::SetupParse(const char *Name, const char *Value) +{ + if (strcmp(Name, "XPosition") == 0) XPosition = atoi(Value); + else if (strcmp(Name, "YPosition") == 0) YPosition = atoi(Value); + else if (strcmp(Name, "CropLeft") == 0) CropLeft = atoi(Value); + else if (strcmp(Name, "CropRight") == 0) CropRight = atoi(Value); + else if (strcmp(Name, "CropTop") == 0) CropTop = atoi(Value); + else if (strcmp(Name, "CropBottom") == 0) CropBottom = atoi(Value); + else if (strcmp(Name, "ColorDepth") == 0) ColorDepth = atoi(Value); + else if (strcmp(Name, "Size") == 0) Size = atoi(Value); + else if (strcmp(Name, "FrameMode") == 0) FrameMode = atoi(Value); + else if (strcmp(Name, "FrameDrop") == 0) FrameDrop = atoi(Value); + else if (strcmp(Name, "SwapFfmpeg") == 0) SwapFfmpeg = atoi(Value); + else if (strcmp(Name, "ShowInfo") == 0) ShowInfo = atoi(Value); + else if (strcmp(Name, "InfoWidth") == 0) InfoWidth = atoi(Value); + else if (strcmp(Name, "InfoPosition") == 0) InfoPosition = atoi(Value); + else return false; + return true; +} + +cOsdPipSetupPage::cOsdPipSetupPage(void) +{ + m_NewOsdPipSetup = OsdPipSetup; + m_NewOsdPipSetup.FrameDrop += 1; + + ColorDepthItems[0] = tr("Greyscale (16)"); + ColorDepthItems[1] = tr("Greyscale (256)"); + ColorDepthItems[2] = tr("Color (256, fixed)"); + ColorDepthItems[3] = tr("Color (128, variable)"); + + InfoPositionItems[0] = tr("top left"); + InfoPositionItems[1] = tr("top right"); + InfoPositionItems[2] = tr("bottom left"); + InfoPositionItems[3] = tr("bottom right"); + + FrameDropItems[0] = tr("automatic"); + FrameDropItems[1] = tr("none"); + FrameDropItems[2] = tr("1 frame"); + FrameDropItems[3] = tr("2 frames"); + + Add(new cMenuEditIntItem(tr("X Position"), &m_NewOsdPipSetup.XPosition, 0, 600)); + Add(new cMenuEditIntItem(tr("Y Position"), &m_NewOsdPipSetup.YPosition, 0, 470)); + Add(new cMenuEditIntItem(tr("Crop left"), &m_NewOsdPipSetup.CropLeft, 0, 80)); + Add(new cMenuEditIntItem(tr("Crop right"), &m_NewOsdPipSetup.CropRight, 0, 80)); + Add(new cMenuEditIntItem(tr("Crop at top"), &m_NewOsdPipSetup.CropTop, 0, 80)); + Add(new cMenuEditIntItem(tr("Crop at bottom"), &m_NewOsdPipSetup.CropBottom, 0, 80)); + Add(new cMenuEditStraItem(tr("Color depth"), &m_NewOsdPipSetup.ColorDepth, kColorDepths, ColorDepthItems)); + Add(new cMenuEditStraItem(tr("Size"), &m_NewOsdPipSetup.Size, kSizes, SizeItems)); + Add(new cMenuEditStraItem(tr("Frames to display"), &m_NewOsdPipSetup.FrameMode, kFrameModes, FrameModeItems)); + Add(new cMenuEditStraItem(tr("Drop frames"), &m_NewOsdPipSetup.FrameDrop, kFrameDrops, FrameDropItems)); + Add(new cMenuEditBoolItem(tr("Swap FFMPEG output"), &m_NewOsdPipSetup.SwapFfmpeg)); + Add(new cMenuEditBoolItem(tr("Show info window"), &m_NewOsdPipSetup.ShowInfo)); + Add(new cMenuEditIntItem(tr("Info window width"), &m_NewOsdPipSetup.InfoWidth, 200, 600)); + Add(new cMenuEditStraItem(tr("Info window position"), &m_NewOsdPipSetup.InfoPosition, kInfoPositions, InfoPositionItems)); +} + +cOsdPipSetupPage::~cOsdPipSetupPage() +{ +} + +void cOsdPipSetupPage::Store(void) +{ + OsdPipSetup = m_NewOsdPipSetup; + OsdPipSetup.FrameDrop -= 1; + + SetupStore("XPosition", OsdPipSetup.XPosition); + SetupStore("YPosition", OsdPipSetup.YPosition); + SetupStore("CropLeft", OsdPipSetup.CropLeft); + SetupStore("CropRight", OsdPipSetup.CropRight); + SetupStore("CropTop", OsdPipSetup.CropTop); + SetupStore("CropBottom", OsdPipSetup.CropBottom); + SetupStore("ColorDepth", OsdPipSetup.ColorDepth); + SetupStore("Size", OsdPipSetup.Size); + SetupStore("FrameMode", OsdPipSetup.FrameMode); + SetupStore("FrameDrop", OsdPipSetup.FrameDrop); + SetupStore("SwapFfmpeg", OsdPipSetup.SwapFfmpeg); + SetupStore("ShowInfo", OsdPipSetup.ShowInfo); + SetupStore("InfoWidth", OsdPipSetup.InfoWidth); + SetupStore("InfoPosition", OsdPipSetup.InfoPosition); +} + |