projects
/
vuplus_dvbapp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
subtitle.cpp: return correct size of consumed bytes
[vuplus_dvbapp]
/
lib
/
dvb
/
subtitle.cpp
diff --git
a/lib/dvb/subtitle.cpp
b/lib/dvb/subtitle.cpp
index
7ae49db
..
3787ab1
100644
(file)
--- a/
lib/dvb/subtitle.cpp
+++ b/
lib/dvb/subtitle.cpp
@@
-81,7
+81,7
@@
void eDVBSubtitleParser::subtitle_process_line(subtitle_page *page, int object_i
}
// //eDebug("inserting %d bytes (into region %d)", len, region->region_id);
// eDebug("put data to region_buffer %p", &(*region->region_buffer));
}
// //eDebug("inserting %d bytes (into region %d)", len, region->region_id);
// eDebug("put data to region_buffer %p", &(*region->region_buffer));
- memcpy((__u8*)region->region_buffer->surface->data + region->region_
width
* y + x, data, len);
+ memcpy((__u8*)region->region_buffer->surface->data + region->region_
buffer->surface->stride
* y + x, data, len);
}
object = object->next;
}
}
object = object->next;
}
@@
-243,17
+243,17
@@
int eDVBSubtitleParser::subtitle_process_pixel_data(subtitle_page *page, int obj
bitstream_init(&bit, data, 4);
for ( int i=0; i < 4; ++i )
bitstream_get(&bit);
bitstream_init(&bit, data, 4);
for ( int i=0; i < 4; ++i )
bitstream_get(&bit);
-
break
;
+
return 2 + 1
;
case 0x21: // ignore 2 -> 8bit map table
bitstream_init(&bit, data, 8);
for ( int i=0; i < 4; ++i )
bitstream_get(&bit);
case 0x21: // ignore 2 -> 8bit map table
bitstream_init(&bit, data, 8);
for ( int i=0; i < 4; ++i )
bitstream_get(&bit);
-
break
;
+
return 4 + 1
;
case 0x22: // ignore 4 -> 8bit map table
bitstream_init(&bit, data, 8);
for ( int i=0; i < 16; ++i )
bitstream_get(&bit);
case 0x22: // ignore 4 -> 8bit map table
bitstream_init(&bit, data, 8);
for ( int i=0; i < 16; ++i )
bitstream_get(&bit);
-
break
;
+
return 16 + 1
;
case 0xF0:
subtitle_process_line(page, object_id, *linenr, line, *linep);
/* {
case 0xF0:
subtitle_process_line(page, object_id, *linenr, line, *linep);
/* {
@@
-345,6
+345,8
@@
int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
}
}
}
}
+ page->state = page_state;
+
//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))
//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))
@@
-360,6
+362,13
@@
int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
{
subtitle_region *p = page->regions->next;
//eDebug("delete region %d", page->regions->region_id);
{
subtitle_region *p = page->regions->next;
//eDebug("delete region %d", page->regions->region_id);
+ while(page->regions->region_objects)
+ {
+ //eDebug("delete region object");
+ subtitle_region_object *ob = page->regions->region_objects->next;
+ delete page->regions->region_objects;
+ page->regions->region_objects = ob;
+ }
delete page->regions;
page->regions = p;
}
delete page->regions;
page->regions = p;
}
@@
-451,6
+460,7
@@
int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
else if (region->region_version_number != region_version_number)
{
subtitle_region_object *objects = region->region_objects;
else if (region->region_version_number != region_version_number)
{
subtitle_region_object *objects = region->region_objects;
+ //eDebug("unequal version %p %p", objects, objects?objects->next:objects);
while (objects)
{
subtitle_region_object *n = objects->next;
while (objects)
{
subtitle_region_object *n = objects->next;
@@
-480,7
+490,8
@@
int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment)
region->region_height |= *segment++;
processed_length += 2;
region->region_height |= *segment++;
processed_length += 2;
- region->region_buffer = new gPixmap(eSize(region->region_width, region->region_height), 8);
+ region->region_buffer = new gPixmap(eSize(region->region_width, region->region_height), 8, 1);
+ memset(region->region_buffer->surface->data, 0, region->region_height * region->region_buffer->surface->stride);
//eDebug("new region_buffer %p", &(*region->region_buffer));
int region_level_of_compatibility, region_depth;
//eDebug("new region_buffer %p", &(*region->region_buffer));
int region_level_of_compatibility, region_depth;
@@
-796,7
+807,8
@@
void eDVBSubtitleParser::subtitle_redraw_all()
subtitle_page *page = m_pages;
while(page)
{
subtitle_page *page = m_pages;
while(page)
{
- subtitle_redraw(page->page_id);
+ if (page->state != 0)
+ subtitle_redraw(page->page_id);
page = page->next;
}
#else
page = page->next;
}
#else