Hi Julian,

A small API change you'll need to know about.
GUI_SEND_KAA_VO_OSD_INVALIDATE_RECT now takes an array of rectangles,
where the last rectangle has a 0 width for a sentinel.  So now you just
send one invalidation each time you call evas_render().  This prevents a
possible flicker if the vo thread displays a frame while multiple
regions are getting updated to the OSD in another thread.

So your osd_render() function will look something like ...

        Evas_Rectangle *r; // array of rectangles
        Evas_List *updates, *p;
        int i;
        
        updates = evas_render_updates(evas);
        r = malloc(sizeof(Evas_Rectangle) * (evas_list_count(updates)+1));
        for (i = 0, p = updates; p; p = p->next, i++)
           memcpy(&r[i], p->data, sizeof(Evas_Rectangle));
        r[i].w = 0;  // sentinel
        xine_gui_send_vo_data(stream, GUI_SEND_KAA_VO_OSD_INVALIDATE_RECT, 
(void *)r);
        free(r);

(Not actually compiled or tested, but you get the idea.)

Cheers,
Jason.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to