void DVBSubtitles::finishPage(const DVBSubtitlePage& page)
{
- if (page.dirty)
+ if (page.dirty && !osdMenuShowing)
{
osd->clearOSD();
}
region_iter = page.regions.find(i->first);
if (region_iter == page.regions.end()) continue;
Log::getInstance()->log("SUBTITLES", Log::DEBUG, "Clear region %d", i->first);
- osd->clearOSDArea(i->second.x, i->second.y,
+ if (!osdMenuShowing) osd->clearOSDArea(i->second.x, i->second.y,
region_iter->second.getWidth(), region_iter->second.getHeight(),dds);
}
}
region_iter = page.regions.find(i->first);
if (region_iter == page.regions.end()) continue;
Log::getInstance()->log("SUBTITLES", Log::DEBUG, "Display region %d", i->first);
- osd->drawOSDBitmap(i->second.x, i->second.y, region_iter->second,dds);
+ if (!osdMenuShowing) osd->drawOSDBitmap(i->second.x, i->second.y,
+ region_iter->second,dds);
}
// after displaying regions set the page timeout timer
SubtitleTimeout.Set(page.timeout * 1000);
DVBSubtitlePage::RegionMap::const_iterator region_iter;
region_iter = page.regions.find(i->first);
if (region_iter == page.regions.end()) continue;
- osd->clearOSDArea(i->second.x, i->second.y,
+ if (!osdMenuShowing) osd->clearOSDArea(i->second.x, i->second.y,
region_iter->second.getWidth(), region_iter->second.getHeight(),dds);
}
}
DVBSubtitlePage::RegionMap::const_iterator region_iter;
region_iter = page.regions.find(i->first);
if (region_iter == page.regions.end()) continue;
- osd->clearOSDArea(i->second.x, i->second.y,
+ if (!osdMenuShowing) osd->clearOSDArea(i->second.x, i->second.y,
region_iter->second.getWidth(), region_iter->second.getHeight(),dds);
}
}
if (SubtitleTimeout.TimedOut()) // do we have a subtitle timeout
{
lockOutput();
- if(showing)
+ if (showing && !osdMenuShowing)
osd->clearOSD(); // if we have the timeout, lets clear the OSD
unlockOutput();
}
}
}
}
+
+void DVBSubtitles::setOSDMenuVisibility(bool visible)
+{
+ lockOutput();
+ osdMenuShowing = visible;
+ unlockOutput();
+}
+
void stop();
void show();
void hide();
+ void setOSDMenuVisibility(bool visible);
private:
OSDReceiver* osd;
void finishPage(const DVBSubtitlePage&);
DVBSubtitleDisplayDefinition dds;
+ bool osdMenuShowing;
bool running;
bool showing;
bool threadNudged;
}
+void Player::tellSubtitlesOSDVisible(bool visible){
+subtitles->setOSDMenuVisibility(visible);
+}
+
Channel * Player::getDemuxerChannel() {
if (!is_pesrecording) {
return ((DemuxerTS*) demuxer)->getChannelInfo();
bool toggleSubtitles();
void turnSubtitlesOn(bool ison);
bool isSubtitlesOn() { return subtitlesShowing; }
+ void tellSubtitlesOSDVisible(bool visible);
void play();
void stop();
}
}
+
+void PlayerLiveTV::tellSubtitlesOSDVisible(bool visible)
+{
+subtitles->setOSDMenuVisibility(visible);
+}
+
// ----------------------------------- Externally called events
void PlayerLiveTV::go(ULONG index)
virtual bool toggleSubtitles();
virtual void turnSubtitlesOn(bool ison);
virtual bool isSubtitlesOn() {return subtitlesShowing;};
+ virtual void tellSubtitlesOSDVisible(bool visible);
virtual bool* getDemuxerMpegAudioChannels();
virtual bool* getDemuxerAc3AudioChannels();
#include "timers.h"
#include "boxstack.h"
#include "remote.h"
+#include "playerlivetv.h"
-VTeletextView::VTeletextView(TeletextDecoderVBIEBU* TTdecoder,Boxx* playerview)
+VTeletextView::VTeletextView(TeletextDecoderVBIEBU* TTdecoder,Boxx* playerview, PlayerLiveTV* playerObj)
{
ttdecoder=TTdecoder;
pv=playerview;
+ player=playerObj;
subtitlemode=false;
case Remote::OK:
return 2;
case Remote::BACK:
+ if(player) player->tellSubtitlesOSDVisible(false); // Only on liveTV
return 4;
- case Remote::ZERO:
+ case Remote::ZERO:
case Remote::ONE:
case Remote::TWO:
case Remote::THREE:
#include "timerreceiver.h"
#include "teletextdecodervbiebu.h"
+class PlayerLiveTV;
+
class VTeletextView : public Boxx, public TimerReceiver
{
public:
- VTeletextView (TeletextDecoderVBIEBU* TTdecoder, Boxx* playerview);
+ VTeletextView (TeletextDecoderVBIEBU* TTdecoder, Boxx* playerview,
+ PlayerLiveTV* palyerObj);
~VTeletextView ();
void draw(bool completedraw, bool onlyfirstline);
void draw() {draw(true,false);};
int keyindigit;
int page;
bool subtitlemode;
- Boxx* pv;
+ Boxx* pv;
+ PlayerLiveTV* player;
};
}
case Remote::YELLOW:
{
- if (streamType ==VDR::VIDEO) doTeletext(); //TODO: Add a selector for subtitles or teletext
+ if (streamType ==VDR::VIDEO)
+ {
+ doTeletext(); //TODO: Add a selector for subtitles or teletext
+ }
return 2;
}
case Remote::GUIDE:
void VVideoLiveTV::doTeletext(bool subtitlemode)
{
if (streamType !=VDR::VIDEO) return;
+ (static_cast<PlayerLiveTV*>(player))->tellSubtitlesOSDVisible(true);
bool exists=true;
// Cancel keying
osdChanNum.setText(formatChanNum);
osdChanName.setText((*chanList)[osdChannelIndex]->name);
}
+ (static_cast<PlayerLiveTV*>(player))->tellSubtitlesOSDVisible(true);
if (osd.getVisible()) clearScreen();
// Draw the teletxt
VTeletextView *vtxv=((PlayerLiveTV*)player)->getTeletextDecoder()->getTeletxtView();
if (vtxv==NULL) {
- vtxv= new VTeletextView(((PlayerLiveTV*)player)->getTeletextDecoder(),this);
+ vtxv= new VTeletextView(((PlayerLiveTV*)player)->getTeletextDecoder(),this, (PlayerLiveTV*)player);
((PlayerLiveTV*)player)->getTeletextDecoder()->registerTeletextView(vtxv);
exists=false;
}
void VVideoLiveTV::displayOSD(bool newNowNextData)
{
+ (static_cast<PlayerLiveTV*>(player))->tellSubtitlesOSDVisible(true);
osd.setVisible(true);
if (newNowNextData)
{
draw();
boxstack->update(this);
+
+ (static_cast<PlayerLiveTV*>(player))->tellSubtitlesOSDVisible(false);
}
void VVideoLiveTV::showUnavailable()
boxstack->update(this, osd.getRegion());
Log::getInstance()->log("VVideoLiveTV", Log::DEBUG, "Timer Call 1 notkey 3.");
+ (static_cast<PlayerLiveTV*>(player))->tellSubtitlesOSDVisible(false);
Log::getInstance()->log("VVideoLiveTV", Log::DEBUG, "Timer Call 1 notkey end.");
}
}
// Draw the teletxt
VTeletextView *vtxv=player->getTeletextDecoder()->getTeletxtView();
if (vtxv==NULL) {
- vtxv= new VTeletextView((player)->getTeletextDecoder(),this);
+ vtxv= new VTeletextView((player)->getTeletextDecoder(),this,NULL);
(player)->getTeletextDecoder()->registerTeletextView(vtxv);
exists=false;
}
void VVideoRec::doBar(int action)
{
+ clearOSD(); // remove dvbsubtitles
+ player->tellSubtitlesOSDVisible(true);
barShowing = true;
rectangle(barRegion, barBlue);
barVasHold = false;
rectangle(barRegion, transparent);
boxstack->update(this, &barRegion);
+ player->tellSubtitlesOSDVisible(false);
}
void VVideoRec::doSummary()
{
+ clearOSD(); // remove dvbsubtitles
+ player->tellSubtitlesOSDVisible(true);
vsummary = new VInfo();
vsummary->setTitleText(myRec->getProgName());
vsummary->setBorderOn(1);
vsummary = NULL;
draw();
BoxStack::getInstance()->update(this);
+ player->tellSubtitlesOSDVisible(false);
}
}