summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
authorAndreas Regel <andreas.regel@powarman.de>2004-07-31 23:55:00 +0200
committerAndreas Regel <andreas.regel@powarman.de>2004-07-31 23:55:00 +0200
commitc024446839241af2fa7d618ce49cc8c1e5693f7f (patch)
tree6fe9beb2336294e030a739c4039911fb3e51d477 /setup.c
parent1df133b2a0565a35c3b07e043bd04b449869a0cb (diff)
downloadvdr-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.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/setup.c b/setup.c
new file mode 100644
index 0000000..6ddd9d9
--- /dev/null
+++ b/setup.c
@@ -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);
+}
+