diff options
author | Arnaud Vrac <avrac@freebox.fr> | 2013-08-30 22:08:01 +0200 |
---|---|---|
committer | Jan Schmidt <jan@centricular.com> | 2015-09-26 23:18:38 +1000 |
commit | 46aaaa6c309b8a8f6e218142fd5944f5d24f095c (patch) | |
tree | 0ae208cc0f9b80f55b306c376129dee5810f8ef4 /gst/dvdspu | |
parent | a41e7c5bec8512e1addf1548153401ec0e036727 (diff) |
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
Diffstat (limited to 'gst/dvdspu')
-rw-r--r-- | gst/dvdspu/gstspu-vobsub.c | 11 | ||||
-rw-r--r-- | gst/dvdspu/gstspu-vobsub.h | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/gst/dvdspu/gstspu-vobsub.c b/gst/dvdspu/gstspu-vobsub.c index 4f4ccbfe4..19e8c0027 100644 --- a/gst/dvdspu/gstspu-vobsub.c +++ b/gst/dvdspu/gstspu-vobsub.c @@ -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 diff --git a/gst/dvdspu/gstspu-vobsub.h b/gst/dvdspu/gstspu-vobsub.h index 0c8d0f10c..147d6fb4b 100644 --- a/gst/dvdspu/gstspu-vobsub.h +++ b/gst/dvdspu/gstspu-vobsub.h @@ -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 */ |