+struct subpicture_updater_sys_t
+{
+ vlc_epg_t *p_epg;
+};
+
+static int OSDEpgValidate( subpicture_t *p_subpic,
+ bool has_src_changed, const video_format_t *p_fmt_src,
+ bool has_dst_changed, const video_format_t *p_fmt_dst,
+ mtime_t i_ts )
+{
+ VLC_UNUSED(p_subpic); VLC_UNUSED(i_ts); VLC_UNUSED(p_fmt_src);
+ VLC_UNUSED(has_dst_changed); VLC_UNUSED(p_fmt_dst);
+
+ if( !has_src_changed && !has_dst_changed)
+ return VLC_SUCCESS;
+ return VLC_EGENERIC;
+}
+
+static void OSDEpgUpdate( subpicture_t *p_subpic,
+ const video_format_t *p_fmt_src,
+ const video_format_t *p_fmt_dst,
+ mtime_t i_ts )
+{
+ subpicture_updater_sys_t *p_sys = p_subpic->updater.p_sys;
+ VLC_UNUSED(p_fmt_dst); VLC_UNUSED(i_ts);
+
+ p_subpic->i_original_picture_width = p_fmt_src->i_width;
+ p_subpic->i_original_picture_height = p_fmt_src->i_height;
+ p_subpic->p_region = vout_BuildOSDEpg( p_sys->p_epg,
+ p_fmt_src->i_x_offset,
+ p_fmt_src->i_y_offset,
+ p_fmt_src->i_visible_width,
+ p_fmt_src->i_visible_height );
+}
+
+static void OSDEpgDestroy( subpicture_t *p_subpic )
+{
+ subpicture_updater_sys_t *p_sys = p_subpic->updater.p_sys;
+
+ vlc_epg_Delete( p_sys->p_epg );
+ free( p_sys );
+}