diff options
-rw-r--r-- | HISTORY | 5 | ||||
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | dxr3interface_spu_encoder.c | 31 | ||||
-rw-r--r-- | dxr3interface_spu_encoder.h | 3 | ||||
-rw-r--r-- | dxr3palettemanager.c | 121 | ||||
-rw-r--r-- | dxr3palettemanager.h | 40 |
6 files changed, 15 insertions, 189 deletions
@@ -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) @@ -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_*/ |