}
// //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;
}
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);
- 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);
- break;
+ return 16 + 1;
case 0xF0:
subtitle_process_line(page, object_id, *linenr, line, *linep);
/* {
}
}
+ 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))
{
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;
}
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;
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;
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