summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY5
-rw-r--r--Makefile4
-rw-r--r--dxr3interface_spu_encoder.c31
-rw-r--r--dxr3interface_spu_encoder.h3
-rw-r--r--dxr3palettemanager.c121
-rw-r--r--dxr3palettemanager.h40
6 files changed, 15 insertions, 189 deletions
diff --git a/HISTORY b/HISTORY
index 9412c11..033bbaf 100644
--- a/HISTORY
+++ b/HISTORY
@@ -278,7 +278,8 @@ NOTE: I havent found time to include all of the languages, will be done in pre2
- improve original OSD scaler for small resolutions (#1014339, Luca Olivetti)
- fix compilation with -fPIC, kudos to ffmpeg (Ville Skyttä)
- eliminate some compiler warnings (Ville Skyttä)
-- fix OSD going pink after returning from the MPlayer plugin
- (Ville Skyttä, Martin Cap)
+- fix OSD going pink after returning from the MPlayer plugin; while at it,
+ remove dxr3palettemanager.* and use VDR's cPalette
+ (Ville Skyttä, Martin Cap, Luca Olivetti)
- remove unused dxr3unixserversocket.* from 0.2.x (Ville Skyttä)
- fix sound with the MP3 plugin and VDR >= 1.3.18 (Antti Järvinen)
diff --git a/Makefile b/Makefile
index e438d2f..778bebf 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile,v 1.1.2.10 2005/03/30 21:22:48 scop Exp $
+# $Id: Makefile,v 1.1.2.11 2005/04/05 18:54:01 scop Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
@@ -60,7 +60,7 @@ DEFINES += -DUSE_XINE_SCALER
### The object files (add further files here):
OBJS = $(PLUGIN).o dxr3multichannelaudio.o dxr3sysclock.o dxr3colormanager.o dxr3syncbuffer.o dxr3audiodecoder.o \
-dxr3blackframe.o dxr3palettemanager.o dxr3nextpts.o dxr3pesframe.o dxr3demuxdevice.o dxr3configdata.o \
+dxr3blackframe.o dxr3nextpts.o dxr3pesframe.o dxr3demuxdevice.o dxr3configdata.o \
dxr3log.o dxr3ffmpeg.o dxr3interface_spu_encoder.o dxr3i18n.o \
dxr3interface.o dxr3device.o dxr3outputthread.o dxr3osd.o dxr3osd_subpicture.o dxr3spudecoder.o \
dxr3cpu.o dxr3memcpy.o
diff --git a/dxr3interface_spu_encoder.c b/dxr3interface_spu_encoder.c
index ab8aa24..6b9c405 100644
--- a/dxr3interface_spu_encoder.c
+++ b/dxr3interface_spu_encoder.c
@@ -45,6 +45,7 @@ ToDo:
#include <signal.h>
#include <string>
#include <vdr/plugin.h>
+#include "dxr3tools.h"
namespace XineScaler
{
@@ -268,6 +269,8 @@ cSPUEncoder::cSPUEncoder()
// set active area to 0
//m_x0 = m_x1 = m_y0 = m_y1 = 0;
+ // 16 Colors max.
+ m_palManager.SetBpp(4);
}
// ==================================
@@ -310,6 +313,7 @@ int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1,
break;
case OSD_SetPalette:
+ {
// Spu->Cmd(OSD_SetPalette, 0, NumColors - 1, 0, 0, 0, Colors);
// (firstcolor{color},lastcolor{x0},data)
// Set a number of entries in the palette
@@ -328,23 +332,18 @@ int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1,
for (int x = color, i = 0; x <= x0; x++,i++)
{
- m_palManager.AddColor((int)*col & 0xFFFFFF);
-
- idx = m_palManager.GetIndex((int)*col & 0xFFFFFF);
- if (m_palManager.HasChanged())
- {
- cDxr3Interface::Instance().SetPalette(m_palManager.GetPalette());
- }
-
+ idx = m_palManager.Index(Tools::Rgb2YCrCb(*col & 0x00FFFFFF));
opacity = ((*col & 0xFF000000) >> 24) * 0xF / 0xFF;
m_windows[m_lastwindow].colors[i] = (opacity << 4) | idx;
m_windows[m_lastwindow].opacity[i] = opacity;
col++;
}
+ int colors = 0;
+ cDxr3Interface::Instance().SetPalette((unsigned int*)m_palManager.Colors(colors));
return 0;
break;
-
+ }
case OSD_SetBlock:
// (x0,y0,x1,y1,increment{color},data)
// fills pixels x0,y0 through x1,y1 with the content of data[]
@@ -389,18 +388,7 @@ int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1,
case OSD_Close:
// clear colors from palettemanager
-
- #if VDRVERSNUM >= 10307
- if ((col = (tColor*)m_windows[m_lastwindow].colors) != NULL)
- #else
- if ((col = (eDvbColor*)m_windows[m_lastwindow].colors) != NULL)
- #endif
- {
- for (size_t i = 0; i < m_windows[m_lastwindow].NumColors; ++i)
- {
- m_palManager.RemoveColor((int)(col[i]) & 0xFFFFFF);
- }
- }
+ m_palManager.Reset();
// clear osd
for (size_t i = m_windows[m_lastwindow].y0; i <= m_windows[m_lastwindow].y1; ++i)
@@ -449,7 +437,6 @@ int cSPUEncoder::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1,
// This should be done in cSPUEncoder::cSPUEncoder
- m_palManager.Clear();
return 0;
break;
diff --git a/dxr3interface_spu_encoder.h b/dxr3interface_spu_encoder.h
index 20119b0..5cebb4d 100644
--- a/dxr3interface_spu_encoder.h
+++ b/dxr3interface_spu_encoder.h
@@ -33,7 +33,6 @@
#include <stdlib.h>
#include <linux/dvb/osd.h>
#include "dxr3vdrincludes.h"
-#include "dxr3palettemanager.h"
#include "dxr3colormanager.h"
#include "dxr3interface.h"
#include "dxr3singleton.h"
@@ -138,7 +137,7 @@ private:
void CalculateActiveOsdArea();
sOSD_Window m_windows[8];
- cDxr3PaletteManager m_palManager;
+ cPalette m_palManager; // name for hysterical raisins ;)
cColorManager* m_ColorManager;
encodedata m_encodeddata;
int m_lastwindow;
diff --git a/dxr3palettemanager.c b/dxr3palettemanager.c
deleted file mode 100644
index 058186b..0000000
--- a/dxr3palettemanager.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * dxr3palettemanager.c:
- *
- * See the main source file 'dxr3.c' for copyright information and
- * how to reach the author.
- *
- */
-
-/*
- ToDo:
- - cDxr3PaletteManager: Should we use here std::vector?
-*/
-
-#include <string.h>
-#include "dxr3palettemanager.h"
-#include "dxr3tools.h"
-
-// ==================================
-//! constructor
-cDxr3PaletteManager::cDxr3PaletteManager()
-{
- memset(m_colors, 0, sizeof(int) * MAX_COLORS);
- memset(m_users, 0, sizeof(int) * MAX_COLORS);
- memset(m_pal, 0, sizeof(uint32_t) * MAX_COLORS);
- m_changed = false;
-};
-
-// ==================================
-void cDxr3PaletteManager::AddColor(int color)
-{
- int freeIndex = MAX_COLORS;
- bool found = false;
-
- for (int i = 0; i < MAX_COLORS && !found; ++i)
- {
- if (color == m_colors[i])
- {
- if (m_users[i] == 0) m_changed = true;
- ++m_users[i];
- found = true;
- }
- if (m_users[i] == 0 && freeIndex >= MAX_COLORS)
- {
- freeIndex = i;
- }
- }
- if (!found && freeIndex < MAX_COLORS)
- {
- m_colors[freeIndex] = color;
- m_users[freeIndex] = 1;
- m_changed = true;
- }
-}
-
-// ==================================
-void cDxr3PaletteManager::RemoveColor(int color)
-{
- bool found = false;
- for (int i = 0; i < MAX_COLORS && !found; ++i)
- {
- if (color == m_colors[i])
- {
- if (m_users[i] > 0) --m_users[i];
- found = true;
- }
- }
-}
-
-// ==================================
-int cDxr3PaletteManager::GetIndex(int color)
-{
- bool found = false;
- int index = 0;
- for (int i = 0; i < MAX_COLORS && !found; ++i)
- {
- if (color == m_colors[i])
- {
- index = i;
- found = true;
- }
- }
- return index;
-}
-
-// ==================================
-int cDxr3PaletteManager::GetCount()
-{
- return MAX_COLORS;
-}
-
-// ==================================
-int cDxr3PaletteManager::operator[](int index)
-{
- assert(index < MAX_COLORS && index > 0);
- return m_colors[index];
-}
-
-// ==================================
-bool cDxr3PaletteManager::HasChanged()
-{
- bool retval = m_changed;
- m_changed = false;
- return retval;
-}
-
-// ==================================
-uint32_t* cDxr3PaletteManager::GetPalette()
-{
- for (int i = 0; i < MAX_COLORS; ++i)
- {
- m_pal[i] = Tools::Rgb2YCrCb(m_colors[i]);
- }
-
- return m_pal;
-}
-
-// ==================================
-void cDxr3PaletteManager::Clear()
-{
- memset(m_users, 0, sizeof(int) * MAX_COLORS);
-}
diff --git a/dxr3palettemanager.h b/dxr3palettemanager.h
deleted file mode 100644
index 432d6a2..0000000
--- a/dxr3palettemanager.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * dxr3palettemanager.h:
- *
- * See the main source file 'dxr3.c' for copyright information and
- * how to reach the author.
- *
- */
-
-#ifndef _DXR3PALETTEMANAGER_H_
-#define _DXR3PALETTEMANAGER_H_
-
-#include <assert.h>
-#include <stdlib.h>
-#include <stdint.h>
-
-// ==================================
-class cDxr3PaletteManager
-{
-public:
- cDxr3PaletteManager();
- ~cDxr3PaletteManager() {};
-
- void AddColor(int color);
- void RemoveColor(int color);
- void Clear();
- int GetCount();
- int operator[](int index);
- int GetIndex(int color);
- bool HasChanged();
- uint32_t* GetPalette();
-
-private:
- static const int MAX_COLORS = 16;
- int m_colors[MAX_COLORS];
- uint32_t m_pal[MAX_COLORS];
- int m_users[MAX_COLORS];
- bool m_changed;
-};
-
-#endif /*_DXR3PALETTEMANAGER_H_*/