diff options
Diffstat (limited to 'osd.c')
-rw-r--r-- | osd.c | 491 |
1 files changed, 127 insertions, 364 deletions
@@ -12,6 +12,9 @@ #include <vdr/ringbuffer.h> #include <vdr/remux.h> +#include <vdr/thread.h> + +cMutex Mutex; cOsdPipObject::cOsdPipObject(cDevice *Device, const cChannel *Channel) : cOsdObject(true) @@ -22,14 +25,11 @@ cOsdPipObject::cOsdPipObject(cDevice *Device, const cChannel *Channel) m_Active = false; m_Ready = false; -#if VDRVERSNUM >= 10307 m_Reset = true; -#endif + m_MoveMode = false; m_Width = m_Height = -1; m_Bitmap = NULL; - m_BitmapInfo = NULL; - m_ShowTime = 0; - m_ShowInfo = false; + m_InfoWindow = NULL; m_AlphaBase = 0xFF000000; for (int i = 0; i < 256; i++) @@ -49,8 +49,7 @@ cOsdPipObject::~cOsdPipObject() delete m_ESBuffer; if (m_Bitmap != NULL) delete m_Bitmap; - if (m_BitmapInfo != NULL) - delete m_BitmapInfo; + delete m_InfoWindow; if (m_Osd != NULL) delete m_Osd; } @@ -129,54 +128,62 @@ void cOsdPipObject::ProcessImage(unsigned char * data, int length) if (!m_Ready) { -#if VDRVERSNUM >= 10307 if (m_Bitmap != NULL) delete m_Bitmap; - if (m_BitmapInfo != NULL) - delete m_BitmapInfo; -#endif + m_Bitmap = NULL; + if (m_InfoWindow != NULL) + delete m_InfoWindow; + m_InfoWindow = NULL; switch (OsdPipSetup.Size) { - case 0: m_Width = 120; m_Height = 96; break; - case 1: m_Width = 160; m_Height = 128; break; - case 2: m_Width = 200; m_Height = 160; break; - case 3: m_Width = 240; m_Height = 192; break; - case 4: m_Width = 280; m_Height = 224; break; - case 5: m_Width = 320; m_Height = 256; break; + case 0: m_Width = 100; m_Height = 80; break; + case 1: m_Width = 120; m_Height = 96; break; + case 2: m_Width = 140; m_Height = 112; break; + case 3: m_Width = 160; m_Height = 128; break; + case 4: m_Width = 180; m_Height = 144; break; + case 5: m_Width = 200; m_Height = 160; break; + case 6: m_Width = 220; m_Height = 176; break; + case 7: m_Width = 240; m_Height = 192; break; + case 8: m_Width = 260; m_Height = 208; break; + case 9: m_Width = 280; m_Height = 224; break; + case 10: m_Width = 300; m_Height = 240; break; } -#if VDRVERSNUM >= 10307 - if (OsdPipSetup.ShowInfo) + if (OsdPipSetup.ShowInfo > 0) { + int infoX = 0; + int infoY = 0; + int infoH = OsdPipSetup.ShowInfo * 30; + switch (OsdPipSetup.InfoPosition) { case kInfoTopLeft: - m_InfoX = Setup.OSDLeft; - m_InfoY = Setup.OSDTop; + infoX = Setup.OSDLeft; + infoY = Setup.OSDTop; break; case kInfoTopRight: - m_InfoX = Setup.OSDLeft + Setup.OSDWidth - OsdPipSetup.InfoWidth; - m_InfoY = Setup.OSDTop; + infoX = Setup.OSDLeft + Setup.OSDWidth - OsdPipSetup.InfoWidth; + infoY = Setup.OSDTop; break; case kInfoBottomLeft: - m_InfoX = Setup.OSDLeft; - m_InfoY = Setup.OSDTop + Setup.OSDHeight - 60; + infoX = Setup.OSDLeft; + infoY = Setup.OSDTop + Setup.OSDHeight - infoH; break; case kInfoBottomRight: - m_InfoX = Setup.OSDLeft + Setup.OSDWidth - OsdPipSetup.InfoWidth; - m_InfoY = Setup.OSDTop + Setup.OSDHeight - 60; + infoX = Setup.OSDLeft + Setup.OSDWidth - OsdPipSetup.InfoWidth; + infoY = Setup.OSDTop + Setup.OSDHeight - infoH; break; } tArea areas[] = { { OsdPipSetup.XPosition, OsdPipSetup.YPosition, OsdPipSetup.XPosition + m_Width - 1, OsdPipSetup.YPosition + m_Height - 1, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8 }, - { m_InfoX, m_InfoY, m_InfoX + OsdPipSetup.InfoWidth - 1, m_InfoY + 60 - 1, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8 } + { infoX, infoY, infoX + OsdPipSetup.InfoWidth - 1, infoY + infoH - 1, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8 } }; if (m_Osd->CanHandleAreas(areas, 2) == oeOk) m_Osd->SetAreas(areas, 2); else m_Osd->SetAreas(areas, 1); m_Bitmap = new cBitmap(m_Width, m_Height, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8); - m_BitmapInfo = new cBitmap(OsdPipSetup.InfoWidth, 60, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8); + m_InfoWindow = new cOsdInfoWindow(m_Osd, m_Palette, infoX, infoY); } else { @@ -188,6 +195,7 @@ void cOsdPipObject::ProcessImage(unsigned char * data, int length) m_Bitmap = new cBitmap(m_Width, m_Height, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8); } + Mutex.Lock(); if (OsdPipSetup.ColorDepth == kDepthGrey256) { for (int i = 0; i < 256; i++) @@ -207,59 +215,7 @@ void cOsdPipObject::ProcessImage(unsigned char * data, int length) m_Palette[0] = 0xFD000000; m_Palette[255] = 0xFDFFFFFF; } -#else - if (OsdPipSetup.ShowInfo) - { - int x = 0; - int y = 0; - switch (OsdPipSetup.InfoPosition) - { - case kInfoTopLeft: - x = (720 - (Setup.OSDwidth * cOsd::CellWidth())) / 2; - y = (576 - (Setup.OSDheight * cOsd::LineHeight())) / 2; - break; - case kInfoTopRight: - x = (720 + (Setup.OSDwidth * cOsd::CellWidth())) / 2 - OsdPipSetup.InfoWidth; - y = (576 - (Setup.OSDheight * cOsd::LineHeight())) / 2; - break; - case kInfoBottomLeft: - x = (720 - (Setup.OSDwidth * cOsd::CellWidth())) / 2; - y = (576 + (Setup.OSDheight * cOsd::LineHeight())) / 2 - 60; - break; - case kInfoBottomRight: - x = (720 + (Setup.OSDwidth * cOsd::CellWidth())) / 2 - OsdPipSetup.InfoWidth; - y = (576 + (Setup.OSDheight * cOsd::LineHeight())) / 2 - 60; - break; - } - m_WindowInfo = m_Osd->Create(x, y, OsdPipSetup.InfoWidth, 60, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8, false, false); - m_BitmapInfo = new cBitmap(OsdPipSetup.InfoWidth, 60, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8, false); - } - m_Window = m_Osd->Create(OsdPipSetup.XPosition, OsdPipSetup.YPosition, - m_Width, m_Height, OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8, false); - m_Bitmap = new cBitmap(m_Width, m_Height, - OsdPipSetup.ColorDepth == kDepthGrey16 ? 4 : 8, false); - if (OsdPipSetup.ColorDepth == kDepthGrey256 || - OsdPipSetup.ColorDepth == kDepthColor256fix) - { - for (int i = 0; i < 256; i++) - { - if (OsdPipSetup.ColorDepth == kDepthGrey256) - m_Palette[i] = m_AlphaBase | (i << 16) | (i << 8) | i; - else - m_Palette[i] = m_AlphaBase | quantizer->OutputPalette()[i]; - } - for (int i = 0; i < 256; i++) - { - m_Bitmap->SetColor(i, (eDvbColor) m_Palette[i]); - m_BitmapInfo->SetColor(i, (eDvbColor) m_Palette[i]); - } - } - if (OsdPipSetup.ColorDepth == kDepthColor128var) - { - m_Palette[0] = 0xFF000000; - m_Palette[255] = 0xFFFFFFFF; - } -#endif + Mutex.Unlock(); } if (decoder.AspectRatio() > 0.1) @@ -274,14 +230,8 @@ void cOsdPipObject::ProcessImage(unsigned char * data, int length) if (OsdPipSetup.ColorDepth == kDepthGrey16) { -#if VDRVERSNUM >= 10307 m_Bitmap->DrawRectangle(0, 0, m_Width - 1, (m_Height - height) / 2 - 1, m_Palette[0]); m_Bitmap->DrawRectangle(0, (m_Height + height) / 2, m_Width - 1, m_Height - 1, m_Palette[0]); -#else - m_Bitmap->Clear(); - m_Bitmap->Fill(0, 0, m_Width - 1, (m_Height - height) / 2 - 1, clrBlack); - m_Bitmap->Fill(0, (m_Height + height) / 2, m_Width - 1, m_Height - 1, clrBlack); -#endif outputImage = decoder.PicResample()->data[0]; for (int y = 0; y < height; y++) { @@ -289,36 +239,22 @@ void cOsdPipObject::ProcessImage(unsigned char * data, int length) { value = outputImage[y * m_Width + x]; value = value & 0xF0; - //value = value / 16; - //value = value * 16; value = m_AlphaBase | (value << 16) | (value << 8) | value; -#if VDRVERSNUM >= 10307 m_Bitmap->DrawPixel(x, y + (m_Height - height) / 2, value); -#else - m_Bitmap->SetPixel(x, y + (m_Height - height) / 2, (eDvbColor) value); -#endif } } } if (OsdPipSetup.ColorDepth == kDepthGrey256) { outputImage = decoder.PicResample()->data[0]; -#if VDRVERSNUM >= 10307 m_Bitmap->DrawRectangle(0, 0, m_Width - 1, m_Height - 1, m_Palette[0]); for (int i = 0; i < 256; i++) m_Bitmap->SetColor(i, m_Palette[i]); -#else - m_Bitmap->Fill(0, 0, m_Width - 1, m_Height - 1, (eDvbColor) m_Palette[0]); -#endif for (int y = 0; y < height; y++) { for (int x = 0; x < m_Width; x++) { -#if VDRVERSNUM >= 10307 m_Bitmap->SetIndex(x, y + (m_Height - height) / 2, outputImage[y * m_Width + x]); -#else - m_Bitmap->SetPixel(x, y + (m_Height - height) / 2, (eDvbColor) m_Palette[outputImage[y * m_Width + x]]); -#endif } } } @@ -351,42 +287,30 @@ void cOsdPipObject::ProcessImage(unsigned char * data, int length) outputImage = quantizer->OutputImage(); if (OsdPipSetup.ColorDepth == kDepthColor256fix) { -#if VDRVERSNUM >= 10307 m_Bitmap->DrawRectangle(0, 0, m_Width - 1, m_Height - 1, m_Palette[0]); for (int i = 0; i < 256; i++) m_Bitmap->SetColor(i, m_Palette[i]); -#else - m_Bitmap->Fill(0, 0, m_Width - 1, m_Height - 1, (eDvbColor) m_Palette[0]); -#endif for (int y = 0; y < height; y++) { for (int x = 0; x < m_Width; x++) { -#if VDRVERSNUM >= 10307 m_Bitmap->SetIndex(x, y + (m_Height - height) / 2, outputImage[y * m_Width + x] + 1); -#else - m_Bitmap->SetPixel(x, y + (m_Height - height) / 2, (eDvbColor) m_Palette[outputImage[y * m_Width + x]]); -#endif } } } else { + Mutex.Lock(); for (int i = 0; i < 127; i++) { m_Palette[m_PaletteStart + i] = outputPalette[i]; m_Palette[m_PaletteStart + i] |= m_AlphaBase; } + Mutex.Unlock(); -#if VDRVERSNUM >= 10307 m_Bitmap->DrawRectangle(0, 0, m_Width - 1, m_Height - 1, m_Palette[0]); for (int i = 0; i < 256; i++) m_Bitmap->SetColor(i, m_Palette[i]); -#else - for (int i = 0; i < 256; i++) - m_Bitmap->SetColor(i, (eDvbColor) m_Palette[i]); - m_Bitmap->Fill(0, 0, m_Width - 1, m_Height - 1, (eDvbColor) m_Palette[0]); -#endif for (int y = 0; y < height; y++) { for (int x = 0; x < m_Width; x++) @@ -398,33 +322,28 @@ void cOsdPipObject::ProcessImage(unsigned char * data, int length) if (m_PaletteStart == 1) { m_PaletteStart = 128; -#if VDRVERSNUM >= 10307 m_AlphaBase = 0xFE000000; -#endif } else { m_PaletteStart = 1; -#if VDRVERSNUM >= 10307 m_AlphaBase = 0xFF000000; -#endif } } } if (!m_Ready) { if (OsdPipSetup.ShowInfo) - ShowChannelInfo(Channels.GetByNumber(cDevice::ActualDevice()->CurrentChannel())); + { + m_InfoWindow->SetChannel(Channels.GetByNumber(cDevice::ActualDevice()->CurrentChannel())); + m_InfoWindow->Show(); + } m_Ready = true; } -#if VDRVERSNUM >= 10307 + Mutex.Lock(); m_Osd->DrawBitmap(OsdPipSetup.XPosition, OsdPipSetup.YPosition, *m_Bitmap); -#else - m_Osd->Clear(); - m_Osd->SetBitmap(OsdPipSetup.XPosition, OsdPipSetup.YPosition, - *m_Bitmap); -#endif m_Osd->Flush(); + Mutex.Unlock(); } void cOsdPipObject::Action(void) @@ -446,7 +365,6 @@ void cOsdPipObject::Action(void) while (m_Active) { -#if VDRVERSNUM >= 10307 if (m_Reset) { if (m_Osd) @@ -457,7 +375,6 @@ void cOsdPipObject::Action(void) m_Ready = false; m_Reset = false; } -#endif if (m_FrameDrop == -1) { while ((frame = m_ESBuffer->Get()) != NULL) @@ -499,34 +416,6 @@ void cOsdPipObject::Action(void) } } } - if (m_ShowTime != 0) - { - if (m_ShowInfo) - { -#if VDRVERSNUM >= 10307 - ShowChannelInfo(Channels.GetByNumber(cDevice::ActualDevice()->CurrentChannel())); - m_Osd->DrawBitmap(m_InfoX, m_InfoY, *m_BitmapInfo); -#else - ShowChannelInfo(Channels.GetByNumber(cDevice::ActualDevice()->CurrentChannel())); - m_Osd->SetBitmap(0, 0, *m_BitmapInfo, m_WindowInfo); - m_Osd->Show(m_WindowInfo); -#endif - m_Osd->Flush(); - m_ShowInfo = false; - } - time_t currentTime; - time(¤tTime); - if (currentTime - m_ShowTime > 2) { -#if VDRVERSNUM >= 10307 - ShowChannelInfo(Channels.GetByNumber(cDevice::ActualDevice()->CurrentChannel()), false); - m_Osd->DrawBitmap(m_InfoX, m_InfoY, *m_BitmapInfo); - m_Osd->Flush(); -#else - m_Osd->Hide(m_WindowInfo); -#endif - m_ShowTime = 0; - } - } } if (OsdPipSetup.ColorDepth == kDepthColor128var || @@ -539,120 +428,86 @@ void cOsdPipObject::Action(void) void cOsdPipObject::Show(void) { -#if VDRVERSNUM >= 10307 Start(); -#else - m_Osd = cOsd::OpenRaw(0, 0); - if (m_Osd) - Start(); -#endif } eOSState cOsdPipObject::ProcessKey(eKeys Key) { eOSState state = cOsdObject::ProcessKey(Key); - if (state == osUnknown) { - switch (Key & ~k_Repeat) { - case k0: Channels.SwitchTo(m_Channel->Number()); - case kBack: return osEnd; - - case kRed: SwapChannels(); + if (state == osUnknown) + { + if (m_MoveMode) + { + switch (Key & ~k_Repeat) + { + case k0: + Channels.SwitchTo(m_Channel->Number()); + case kBack: + return osEnd; + case kGreen: + m_MoveMode = false; + if (m_Ready && m_InfoWindow) + { + m_InfoWindow->SetMessage(tr("Normal mode")); + m_InfoWindow->Show(); + } + break; + case kUp: + if (OsdPipSetup.YPosition >= 10) + OsdPipSetup.YPosition -= 10; + m_Reset = true; + break; + case kLeft: + if (OsdPipSetup.XPosition >= 10) + OsdPipSetup.XPosition -= 10; + m_Reset = true; + break; + case kRight: + if (OsdPipSetup.XPosition + m_Width <= 720 - 10) + OsdPipSetup.XPosition += 10; + m_Reset = true; + break; + case kDown: + if (OsdPipSetup.YPosition + m_Height <= 576 - 10) + OsdPipSetup.YPosition += 10; + m_Reset = true; + break; + } + state = osContinue; + } + else + { + if (m_Ready && m_InfoWindow) + state = m_InfoWindow->ProcessKey(Key); + } + } + if (state == osUnknown) + { + switch (Key & ~k_Repeat) + { + case k0: + Channels.SwitchTo(m_Channel->Number()); + case kBack: + return osEnd; + case kRed: + SwapChannels(); break; - - case k1...k9: -#if VDRVERSNUM >= 10307 - switch (Key & ~k_Repeat) { - case k1: - if (OsdPipSetup.XPosition >= Setup.OSDLeft + 10) OsdPipSetup.XPosition -= 10; - if (OsdPipSetup.YPosition >= Setup.OSDTop + 10) OsdPipSetup.YPosition -= 10; - break; - case k2: - if (OsdPipSetup.YPosition >= Setup.OSDTop + 10) OsdPipSetup.YPosition -= 10; - break; - case k3: - if (OsdPipSetup.XPosition + m_Width <= Setup.OSDLeft + Setup.OSDWidth - 10) - OsdPipSetup.XPosition += 10; - if (OsdPipSetup.YPosition >= Setup.OSDTop + 10) OsdPipSetup.YPosition -= 10; - break; - case k4: - if (OsdPipSetup.XPosition >= Setup.OSDLeft + 10) OsdPipSetup.XPosition -= 10; - break; - case k6: - if (OsdPipSetup.XPosition + m_Width <= Setup.OSDLeft + Setup.OSDWidth - 10) - OsdPipSetup.XPosition += 10; - break; - case k7: - if (OsdPipSetup.XPosition >= Setup.OSDLeft + 10) OsdPipSetup.XPosition -= 10; - if (OsdPipSetup.YPosition + m_Height <= Setup.OSDTop + Setup.OSDHeight - 10) - OsdPipSetup.YPosition += 10; - break; - case k8: - if (OsdPipSetup.YPosition + m_Height <= Setup.OSDTop + Setup.OSDHeight - 10) - OsdPipSetup.YPosition += 10; - break; - case k9: - if (OsdPipSetup.XPosition + m_Width <= Setup.OSDLeft + Setup.OSDWidth - 10) - OsdPipSetup.XPosition += 10; - if (OsdPipSetup.YPosition + m_Height <= Setup.OSDTop + Setup.OSDHeight - 10) - OsdPipSetup.YPosition += 10; - break; - } - m_Reset = true; -#else - switch (Key & ~k_Repeat) { - case k1: - if (OsdPipSetup.XPosition > 9) OsdPipSetup.XPosition -= 10; - if (OsdPipSetup.YPosition > 9) OsdPipSetup.YPosition -= 10; - break; - case k2: - if (OsdPipSetup.YPosition > 9) OsdPipSetup.YPosition -= 10; - break; - case k3: - if (OsdPipSetup.XPosition < Setup.OSDwidth * cOsd::CellWidth()) - OsdPipSetup.XPosition += 10; - if (OsdPipSetup.YPosition > 9) OsdPipSetup.YPosition -= 10; - break; - case k4: - if (OsdPipSetup.XPosition > 9) OsdPipSetup.XPosition -= 10; - break; - case k6: - if (OsdPipSetup.XPosition < Setup.OSDwidth * cOsd::CellWidth()) - OsdPipSetup.XPosition += 10; - break; - case k7: - if (OsdPipSetup.XPosition > 9) OsdPipSetup.XPosition -= 10; - if (OsdPipSetup.YPosition < Setup.OSDheight * cOsd::LineHeight()) - OsdPipSetup.YPosition += 10; - break; - case k8: - if (OsdPipSetup.YPosition < Setup.OSDheight * cOsd::LineHeight()) - OsdPipSetup.YPosition += 10; - break; - case k9: - if (OsdPipSetup.XPosition < Setup.OSDwidth * cOsd::CellWidth()) - OsdPipSetup.XPosition += 10; - if (OsdPipSetup.YPosition < Setup.OSDheight * cOsd::LineHeight()) - OsdPipSetup.YPosition += 10; - break; + case kGreen: + m_MoveMode = true; + if (m_Ready && m_InfoWindow) + { + m_InfoWindow->SetMessage(tr("Move mode")); + m_InfoWindow->Show(); } - m_Osd->Relocate(m_Window, OsdPipSetup.XPosition, OsdPipSetup.YPosition); -#endif break; - case kUp: case kDown: cDevice::SwitchChannel(NORMALKEY(Key) == kUp ? 1 : -1); break; - case kOk: - if (OsdPipSetup.ShowInfo) { - if (m_ShowTime != 0) { - m_ShowTime -= 2; - } else { - //ShowChannelInfo(Channels.GetByNumber(cDevice::ActualDevice()->CurrentChannel())); - time(&m_ShowTime); - m_ShowInfo = true; - } + if (OsdPipSetup.ShowInfo) + { + m_InfoWindow->Show(); } break; default: @@ -669,122 +524,30 @@ void cOsdPipObject::ChannelSwitch(const cDevice * device, int channelNumber) return; if (channelNumber == 0) return; + if (channelNumber != cDevice::CurrentChannel()) + return; if (!m_Ready) return; if (OsdPipSetup.ShowInfo) { - //ShowChannelInfo(Channels.GetByNumber(device->CurrentChannel())); - time(&m_ShowTime); - m_ShowInfo = true; + m_InfoWindow->SetChannel(Channels.GetByNumber(channelNumber)); + m_InfoWindow->Show(); } } -void cOsdPipObject::ShowChannelInfo(const cChannel * channel, bool show) +void cOsdPipObject::OsdClear(void) { - char line1[100] = ""; - char line2[100] = ""; - - sprintf(line1, "%d %s", channel->Number(), channel->Name()); - -#if VDRVERSNUM >= 10300 - const cEvent * present = NULL; - cSchedulesLock schedulesLock; - const cSchedules * schedules = cSchedules::Schedules(schedulesLock); - if (schedules) { - const cSchedule * schedule = schedules->GetSchedule(channel->GetChannelID()); - if (schedule) { - const char * presentTitle = NULL; - if ((present = schedule->GetPresentEvent()) != NULL) { - presentTitle = present->Title(); - if (!isempty(presentTitle)) { - sprintf(line2, "%s %s", (const char*)present->GetTimeString(), presentTitle); -#if VDRVERSNUM < 10307 - while (m_Osd->Width(line2) > OsdPipSetup.InfoWidth - 10) { - line2[strlen(line2) - 1] = 0; - } -#endif - } - } - } - } -#else - const cEventInfo * present = NULL; - cMutexLock mutexLock; - const cSchedules * schedules = cSIProcessor::Schedules(mutexLock); - if (schedules) { - const cSchedule * schedule = schedules->GetSchedule(channel->GetChannelID()); - if (schedule) { - const char * presentTitle = NULL; - if ((present = schedule->GetPresentEvent()) != NULL) { - presentTitle = present->GetTitle(); - if (!isempty(presentTitle)) { - sprintf(line2, "%s %s", present->GetTimeString(), presentTitle); - while (m_Osd->Width(line2) > OsdPipSetup.InfoWidth - 10) { - line2[strlen(line2) - 1] = 0; - } - } - } - } - } -#endif -#if VDRVERSNUM >= 10307 - if (OsdPipSetup.ColorDepth == kDepthGrey16) - { - if (show) - { - m_BitmapInfo->DrawRectangle(0, 0, OsdPipSetup.InfoWidth - 1, 60 - 1, clrBlack); - const cFont *font = cFont::GetFont(fontOsd); - m_BitmapInfo->DrawText(0, 0, line1, clrWhite, clrBlack, font, OsdPipSetup.InfoWidth, 30); - m_BitmapInfo->DrawText(0, 30, line2, clrWhite, clrBlack, font, OsdPipSetup.InfoWidth, 30); - time(&m_ShowTime); - m_ShowInfo = true; - } - else - { - m_BitmapInfo->DrawRectangle(0, 0, OsdPipSetup.InfoWidth - 1, 60 - 1, clrTransparent); - } - } - else + //printf("OsdClear\n"); +} + +void cOsdPipObject::OsdStatusMessage(const char * message) +{ + if (!m_Ready) + return; + if (OsdPipSetup.ShowInfo) { - if (show) - { - m_Palette[0] = 0xFD000000; - m_Palette[255] = 0x00FFFFFF; - m_BitmapInfo->DrawRectangle(0, 0, OsdPipSetup.InfoWidth - 1, 60 - 1, m_Palette[0]); - for (int i = 0; i < 256; i++) - m_BitmapInfo->SetColor(i, m_Palette[i]); - m_Osd->DrawBitmap(m_InfoX, m_InfoY, *m_BitmapInfo); - m_Osd->Flush(); - m_Palette[255] = 0xFDFFFFFF; - m_BitmapInfo->DrawRectangle(0, 0, OsdPipSetup.InfoWidth - 1, 60 - 1, m_Palette[0]); - for (int i = 0; i < 256; i++) - m_BitmapInfo->SetColor(i, m_Palette[i]); - const cFont *font = cFont::GetFont(fontOsd); - m_BitmapInfo->DrawText(0, 0, line1, m_Palette[255], m_Palette[0], font, OsdPipSetup.InfoWidth, 30); - m_BitmapInfo->DrawText(0, 30, line2, m_Palette[255], m_Palette[0], font, OsdPipSetup.InfoWidth, 30); - time(&m_ShowTime); - m_ShowInfo = true; - } - else - { - m_Palette[0] = 0xFD000000; - m_Palette[255] = 0x00FFFFFF; - m_BitmapInfo->DrawRectangle(0, 0, OsdPipSetup.InfoWidth - 1, 60 - 1, m_Palette[0]); - for (int i = 0; i < 256; i++) - m_BitmapInfo->SetColor(i, m_Palette[i]); - m_BitmapInfo->DrawRectangle(0, 0, OsdPipSetup.InfoWidth - 1, 30 - 1, m_Palette[255]); - m_BitmapInfo->DrawRectangle(0, 30, OsdPipSetup.InfoWidth - 1, 60 - 1, m_Palette[255]); - } + m_InfoWindow->SetMessage(message); + m_InfoWindow->Show(); } -#else - if (OsdPipSetup.ColorDepth != kDepthGrey16) - for (int i = 0; i < 256; i++) - m_BitmapInfo->SetColor(i, (eDvbColor) m_Palette[i]); - m_BitmapInfo->Fill(0, 0, OsdPipSetup.InfoWidth, 60, (eDvbColor) 0xFF000000); - m_BitmapInfo->Text(0, 0, line1, (eDvbColor) 0xFFFFFFFF, (eDvbColor) 0xFF000000); - m_BitmapInfo->Text(0, 30, line2, (eDvbColor) 0xFFFFFFFF, (eDvbColor) 0xFF000000); - time(&m_ShowTime); - m_ShowInfo = true; -#endif } |