aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/dvb/subtitle.cpp67
-rw-r--r--lib/gui/esubtitle.cpp4
-rw-r--r--lib/service/servicedvb.cpp16
3 files changed, 54 insertions, 33 deletions
diff --git a/lib/dvb/subtitle.cpp b/lib/dvb/subtitle.cpp
index 60d48ff7..b0c90222 100644
--- a/lib/dvb/subtitle.cpp
+++ b/lib/dvb/subtitle.cpp
@@ -290,9 +290,9 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
return segment_length + 6;
if (page_id != m_composition_page_id && page_id != m_ancillary_page_id)
return segment_length + 6;
-// //eDebug("have %d bytes of segment data", segment_length);
+ //eDebug("have %d bytes of segment data", segment_length);
-// //eDebug("page_id %d, segtype %02x", page_id, segment_type);
+ //eDebug("page_id %d, segtype %02x", page_id, segment_type);
subtitle_page *page, **ppage;
@@ -345,19 +345,28 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
}
}
-// eDebug("page updated: old: %d, new: %d", page->page_version_number, page_version_number);
+ //eDebug("page updated: old: %d, new: %d", page->page_version_number, page_version_number);
// when acquisition point or mode change: remove all displayed pages.
if ((page_state == 1) || (page_state == 2))
{
while (page->page_regions)
{
subtitle_page_region *p = page->page_regions->next;
+ //eDebug("delete page_region %d", page->page_regions->region_id);
delete page->page_regions;
page->page_regions = p;
}
+ while (page->regions)
+ {
+ subtitle_region *p = page->regions->next;
+ //eDebug("delete region %d", page->regions->region_id);
+ delete page->regions;
+ page->regions = p;
+ }
+
}
-// eDebug("new page.. (%d)", page_state);
+ //eDebug("new page.. (%d)", page_state);
page->page_time_out = page_time_out;
@@ -371,6 +380,12 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
while (*r)
r = &(*r)->next;
+ if (processed_length == segment_length && !page->page_regions)
+ {
+ //eDebug("no regions in page.. clear screen!!");
+ subtitle_redraw(page->page_id);
+ }
+
while (processed_length < segment_length)
{
subtitle_page_region *pr;
@@ -428,6 +443,7 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
if (!region)
{
+ //eDebug("create region !!!!!!!!!!");
*pregion = region = new subtitle_region;
region->next = 0;
region->committed = false;
@@ -443,7 +459,7 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
}
if (region->region_buffer)
{
-// eDebug("no more need of region_buffer %p", &(*region->region_buffer));
+ //eDebug("no more need of region_buffer %p", &(*region->region_buffer));
region->region_buffer=0;
}
region->committed = false;
@@ -465,7 +481,7 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
processed_length += 2;
region->region_buffer = new gPixmap(eSize(region->region_width, region->region_height), 8);
-// eDebug("new region_buffer %p", &(*region->region_buffer));
+ //eDebug("new region_buffer %p", &(*region->region_buffer));
int region_level_of_compatibility, region_depth;
@@ -492,7 +508,7 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
if (region_fill_flag)
{
-// eDebug("region fill region_buffer %p", &(*region->region_buffer));
+ //eDebug("region fill region_buffer %p", &(*region->region_buffer));
if (region_depth == 1)
memset(region->region_buffer->surface->data, region_2bit_pixel_code, region->region_height * region->region_width);
else if (region_depth == 2)
@@ -669,7 +685,7 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
bottom_field_data_blocklength = *segment++ << 8;
bottom_field_data_blocklength |= *segment++;
- //eDebug("%d / %d bytes", top_field_data_blocklength, bottom_field_data_blocklength);
+ eDebug("%d / %d bytes", top_field_data_blocklength, bottom_field_data_blocklength);
processed_length += 4;
i = 0;
@@ -718,7 +734,7 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
}
case 0x80: // end of display set segment
{
-// eDebug("end of display set segment");
+ //eDebug("end of display set segment");
subtitle_redraw_all();
}
case 0xFF: // stuffing
@@ -732,9 +748,10 @@ int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
void eDVBSubtitleParser::subtitle_process_pes(__u8 *pkt, int len)
{
-// eDebug("subtitle_process_pes");
+ //eDebugNoNewLine("subtitle_process_pes");
if (!extract_pts(m_show_time, pkt))
{
+ //eDebug(" %lld", m_show_time);
pkt += 6; len -= 6;
// skip PES header
pkt++; len--;
@@ -766,11 +783,11 @@ void eDVBSubtitleParser::subtitle_process_pes(__u8 *pkt, int len)
pkt += l;
len -= l;
}
- // if (len && *pkt != 0xFF)
- // eDebug("strange data at the end");
+ if (len && *pkt != 0xFF)
+ eDebug("strange data at the end");
}
- else
- eDebug("dvb subtitle packet without PTS.. ignore!!");
+ //else
+ //eDebug("\ndvb subtitle packet without PTS.. ignore!!");
}
void eDVBSubtitleParser::subtitle_redraw_all()
@@ -784,36 +801,36 @@ void eDVBSubtitleParser::subtitle_redraw_all()
}
#else
subtitle_page *page = m_pages;
- //eDebug("----------- end of display set");
- //eDebug("active pages:");
+ eDebug("----------- end of display set");
+ eDebug("active pages:");
while (page)
{
- //eDebug(" page_id %02x", page->page_id);
- //eDebug(" page_version_number: %d", page->page_version_number);
- //eDebug(" active regions:");
+ eDebug(" page_id %02x", page->page_id);
+ eDebug(" page_version_number: %d", page->page_version_number);
+ eDebug(" active regions:");
{
subtitle_page_region *region = page->page_regions;
while (region)
{
- //eDebug(" region_id: %04x", region->region_id);
- //eDebug(" region_horizontal_address: %d", region->region_horizontal_address);
- //eDebug(" region_vertical_address: %d", region->region_vertical_address);
+ eDebug(" region_id: %04x", region->region_id);
+ eDebug(" region_horizontal_address: %d", region->region_horizontal_address);
+ eDebug(" region_vertical_address: %d", region->region_vertical_address);
region = region->next;
}
}
subtitle_redraw(page->page_id);
- //eDebug("defined regions:");
+ eDebug("defined regions:");
subtitle_region *region = page->regions;
while (region)
{
- //eDebug(" region_id %04x, version %d, %dx%d", region->region_id, region->region_version_number, region->region_width, region->region_height);
+ eDebug(" region_id %04x, version %d, %dx%d", region->region_id, region->region_version_number, region->region_width, region->region_height);
subtitle_region_object *object = region->region_objects;
while (object)
{
- //eDebug(" object %02x, type %d, %d:%d", object->object_id, object->object_type, object->object_horizontal_position, object->object_vertical_position);
+ eDebug(" object %02x, type %d, %d:%d", object->object_id, object->object_type, object->object_horizontal_position, object->object_vertical_position);
object = object->next;
}
region = region->next;
diff --git a/lib/gui/esubtitle.cpp b/lib/gui/esubtitle.cpp
index ab07a8bf..6e8d48e9 100644
--- a/lib/gui/esubtitle.cpp
+++ b/lib/gui/esubtitle.cpp
@@ -52,11 +52,15 @@ void eSubtitleWidget::setPage(const eDVBTeletextSubtitlePage &p)
void eSubtitleWidget::setPage(const eDVBSubtitlePage &p)
{
+// eDebug("setPage");
m_dvb_page = p;
invalidate(m_visible_region); // invalidate old visible regions
m_visible_region.rects.clear();
for (std::list<eDVBSubtitleRegion>::iterator it(m_dvb_page.m_regions.begin()); it != m_dvb_page.m_regions.end(); ++it)
+ {
+// eDebug("add %d %d %d %d", it->m_position.x(), it->m_position.y(), it->m_pixmap->size().width(), it->m_pixmap->size().height());
m_visible_region.rects.push_back(eRect(it->m_position, it->m_pixmap->size()));
+ }
m_dvb_page_ok = 1;
m_hide_subtitles_timer.start(7500, true);
invalidate(m_visible_region); // invalidate new regions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 9bc275e0..6b6e2e68 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -2810,26 +2810,26 @@ void eDVBServicePlay::checkSubtitleTiming()
int diff = show_time - pos;
if (diff < 0)
{
- eDebug("[late (%d ms)]", -diff / 90);
- diff = 0;
- }
- if (diff > 900000)
- {
- eDebug("[invalid]");
+// eDebug("[late (%d ms)]", -diff / 90);
diff = 0;
}
+// if (diff > 900000)
+// {
+// eDebug("[invalid]");
+// diff = 0;
+// }
if (!diff)
{
if (type == TELETEXT)
{
- eDebug("display teletext subtitle page");
+// eDebug("display teletext subtitle page");
m_subtitle_widget->setPage(page);
m_subtitle_pages.pop_front();
}
else
{
- eDebug("display dvb subtitle Page");
+// eDebug("display dvb subtitle Page %lld", show_time);
m_subtitle_widget->setPage(dvb_page);
m_dvb_subtitle_pages.pop_front();
}