dvdspu: handle frame size event from upstream

An IDX file or codec_data normally contains the original frame size of
the video. Allow upstream to provide this information by sending a
custom event, which will allow scaling the overlay correctly.

https://bugzilla.gnome.org/show_bug.cgi?id=663750
This commit is contained in:
Arnaud Vrac 2013-08-30 22:08:01 +02:00 committed by Jan Schmidt
parent a41e7c5bec
commit 46aaaa6c30
2 changed files with 10 additions and 2 deletions

View file

@ -485,6 +485,11 @@ gstspu_vobsub_handle_dvd_event (GstDVDSpu * dvdspu, GstEvent * event)
if (was_forced != forced_only)
hl_change = TRUE;
}
} else if (strcmp (event_type, "dvd-set-frame-size") == 0) {
gst_structure_get_int (structure, "width", &state->vobsub.frame_w);
gst_structure_get_int (structure, "height", &state->vobsub.frame_h);
GST_INFO_OBJECT (dvdspu, "Frame size is now %dx%d",
state->vobsub.frame_w, state->vobsub.frame_h);
}
gst_event_unref (event);
@ -509,10 +514,12 @@ gstspu_vobsub_get_render_geometry (GstDVDSpu * dvdspu,
}
if (display_width)
*display_width = state->info.width;
*display_width = state->vobsub.frame_w > 0 ?
state->vobsub.frame_w : state->info.width;
if (display_height)
*display_height = state->info.height;
*display_height = state->vobsub.frame_h > 0 ?
state->vobsub.frame_h : state->info.height;
}
void

View file

@ -56,6 +56,7 @@ struct SpuVobsubState {
SpuRect disp_rect;
SpuRect hl_rect;
gint frame_w, frame_h;
guint32 current_clut[16]; /* Colour lookup table from incoming events */