rendered paste bodyvoid osd_render(Evas *evas, xine_stream_t *stream){ pthread_mutex_lock(&osd_lock); if(!stream) { pthread_mutex_unlock(&osd_lock); return; } Evas_Rectangle *r; Evas_List *updates, *p; // Render the canvas (to the buffer) and fetch a list of regions that // were updated. updates = evas_render_updates(evas); r = malloc(sizeof(Evas_Rectangle) * (evas_list_count(updates)+1)); int i; for (i = 0, p = updates; p; p = p->next, i++) { memcpy(&r[i], p->data, sizeof(Evas_Rectangle)); printf("render: %dx%d+%d+%d\n", r[i].w, r[i].h, r[i].x, r[i].y); // Iterate through each region and tell the OSD these are invalid // and must be updated. /*Evas_Rectangle *r = p->data; if(stream && r) xine_gui_send_vo_data(stream, GUI_SEND_KAA_VO_OSD_INVALIDATE_RECT, (void *)r);*/ } r[i].w = 0; // sentinel xine_gui_send_vo_data(stream, GUI_SEND_KAA_VO_OSD_INVALIDATE_RECT, (void *)r); free(r); evas_render_updates_free(updates); pthread_mutex_unlock(&osd_lock);}void osd_invalidate(Evas *evas, xine_stream_t *stream){ pthread_mutex_lock(&osd_lock); if(!stream) { pthread_mutex_unlock(&osd_lock); return; } Evas_Rectangle *r; r = malloc(sizeof(Evas_Rectangle) * 2); evas_output_size_get(evas, &(r[0].w), &(r[0].h)); printf("destroy: %dx%d\n", r[0].w, r[0].h); evas_damage_rectangle_add(evas, 0, 0, r[0].w, r[0].h); evas_render(evas); r[0].x = r[0].y = 0; r[1].w = 0; //r.w = 720; //r.h = 576; xine_gui_send_vo_data(stream, GUI_SEND_KAA_VO_OSD_INVALIDATE_RECT, (void *)r); pthread_mutex_unlock(&osd_lock);}