summaryrefslogtreecommitdiff
path: root/gst/dvdspu
diff options
context:
space:
mode:
authorArnaud Vrac <avrac@freebox.fr>2013-08-30 22:08:01 +0200
committerJan Schmidt <jan@centricular.com>2015-09-26 23:18:38 +1000
commit46aaaa6c309b8a8f6e218142fd5944f5d24f095c (patch)
tree0ae208cc0f9b80f55b306c376129dee5810f8ef4 /gst/dvdspu
parenta41e7c5bec8512e1addf1548153401ec0e036727 (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.c11
-rw-r--r--gst/dvdspu/gstspu-vobsub.h1
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 */