aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-07-26 15:34:59 +0200
committerghost <andreas.monzner@multimedia-labs.de>2009-07-26 15:34:59 +0200
commit5f86d0acf1899cc89ae37ae4c906b4a2d3f9cff5 (patch)
tree53edea26b0d176d9e18c3ccb04de9a051e679bb4 /lib
parent5c098e9eadf42ec0e333c5d5c954ee408d9127e4 (diff)
downloadenigma2-5f86d0acf1899cc89ae37ae4c906b4a2d3f9cff5.tar.gz
enigma2-5f86d0acf1899cc89ae37ae4c906b4a2d3f9cff5.zip
subtitle.cpp/h: small fixes
Diffstat (limited to 'lib')
-rw-r--r--lib/dvb/subtitle.cpp22
-rw-r--r--lib/dvb/subtitle.h1
2 files changed, 17 insertions, 6 deletions
diff --git a/lib/dvb/subtitle.cpp b/lib/dvb/subtitle.cpp
index 3787ab1b..2fe093eb 100644
--- a/lib/dvb/subtitle.cpp
+++ b/lib/dvb/subtitle.cpp
@@ -747,6 +747,7 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
{
//eDebug("end of display set segment");
subtitle_redraw_all();
+ m_seen_eod = true;
}
case 0xFF: // stuffing
break;
@@ -786,6 +787,8 @@ void eDVBSubtitleParser::subtitle_process_pes(__u8 *pkt, int len)
return;
}
+ m_seen_eod = false;
+
while (len && *pkt == 0x0F)
{
int l = subtitle_process_segment(pkt);
@@ -794,11 +797,15 @@ void eDVBSubtitleParser::subtitle_process_pes(__u8 *pkt, int len)
pkt += l;
len -= l;
}
+
if (len && *pkt != 0xFF)
eDebug("strange data at the end");
+
+ if (!m_seen_eod)
+ subtitle_redraw_all();
}
else
- eDebug("\ndvb subtitle packet without PTS.. ignore!!");
+ eDebug("");
}
void eDVBSubtitleParser::subtitle_redraw_all()
@@ -972,7 +979,8 @@ void eDVBSubtitleParser::subtitle_redraw(int page_id)
{
case subtitle_region::bpp2:
// eDebug("2BPP");
- entries = clut->entries_2bit;
+ if (clut)
+ entries = clut->entries_2bit;
memset(palette, 0, 4*sizeof(gRGB));
palette[0].a = 0xFF;
palette[2].r = palette[2].g = palette[2].b = 0xFF;
@@ -980,7 +988,8 @@ void eDVBSubtitleParser::subtitle_redraw(int page_id)
break;
case subtitle_region::bpp4:
// eDebug("4BPP");
- entries = clut->entries_4bit;
+ if (clut)
+ entries = clut->entries_4bit;
memset(palette, 0, 16*sizeof(gRGB));
for (int i=0; i < 16; ++i)
{
@@ -1008,8 +1017,9 @@ void eDVBSubtitleParser::subtitle_redraw(int page_id)
break;
case subtitle_region::bpp8:
// eDebug("8BPP");
- entries = clut->entries_8bit;
- memset(palette, 0, 16*sizeof(gRGB));
+ if (clut)
+ entries = clut->entries_8bit;
+ memset(palette, 0, 256*sizeof(gRGB));
for (int i=0; i < 256; ++i)
{
switch (i & 17)
@@ -1072,7 +1082,7 @@ void eDVBSubtitleParser::subtitle_redraw(int page_id)
break;
}
- if (clut)
+ if (entries)
{
for (int i=0; i<clut_size; ++i)
{
diff --git a/lib/dvb/subtitle.h b/lib/dvb/subtitle.h
index 09d6cd47..6b52c90d 100644
--- a/lib/dvb/subtitle.h
+++ b/lib/dvb/subtitle.h
@@ -118,6 +118,7 @@ class eDVBSubtitleParser
pts_t m_show_time;
Signal1<void,const eDVBSubtitlePage&> m_new_subtitle_page;
int m_composition_page_id, m_ancillary_page_id;
+ bool m_seen_eod;
public:
eDVBSubtitleParser(iDVBDemux *demux);
virtual ~eDVBSubtitleParser();