Hmm. De ondertiteling voldoet m.i. gewoon aan de specs . Er wordt ook niet aangegeven dat ze maar zo kort moeten blijven staan.
Het gaat wel wat anders - zolang de titel moeten blijven staan worden er Page Composition Segmenten verstuurd, waarin de regions waarin de titels staan aktief zijn.
Pas als de title weg moet, wordt er een PCS zonder aktieve regions verstuurd.
Enigma - en kennelijk vele andere ontvangers - kunnen deze variant niet aan. Ik weet ook niet waarom voor deze variant is gekozen.
De enigma datstructuur is prima geschikt voor deze variant. Aan elk Page object, hangen twee linked lists. Eén voor de details van alle regions die tijdens de epoch mogelijk gebruikt gaan worden (regions), één list voor de regions die zichtbaar moeten zijn totdat een volgende komt (page_regions).
Die tweede list wordt in de code niet goed aangepast. Als er een PCS komt waarin regions worden gedefinieerd worden die aan de lijst toegevoegd. Omdat de PCS in de huidige variant elke 500 ms komen, groeit die lijst door.
Wat er - in mijn optiek - in elk geval moet gebeuren is de tweede lijst (page_regions) bij elke PCS (onafhankelijk van de page_state) leeghalen.
Zie hieronder een suggestie voor een verandering in methode subtitle_process_segment (vanaf regel 260 in subtitle.cpp).
Of dat genoeg is weet ik niet.
Ik ben bezig (met hulp van WanWizard) een omgeving op te zetten. met lokale code. Dat laatste lukt nog niet.
// 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;
delete page->page_regions;
page->page_regions = p;
}
while (page->regions)
{
subtitle_region *p = page->regions->next;
while(page->regions->objects)
{
subtitle_region_object *ob = page->regions->objects->next;
delete page->regions->objects;
page->regions->objects = ob;
}
delete page->regions;
page->regions = p;
}
}
dit:
// for every type of PCS clear page_region list
while (page->page_regions)
{
subtitle_page_region *p = page->page_regions->next;
delete page->page_regions;
page->page_regions = p;
}
page->page_regions=0;
// when acquisition point or mode change: remove all displayed pages.
if ((page_state == 1) || (page_state == 2))
{
while (page->regions)
{
subtitle_region *p = page->regions->next;
while(page->regions->objects)
{
subtitle_region_object *ob = page->regions->objects->next;
delete page->regions->objects;
page->regions->objects = ob;
}
delete page->regions;
page->regions = p;
}
}