summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <llandwerlin@gmail.com>2016-11-04 00:54:12 +0000
committerLionel Landwerlin <llandwerlin@gmail.com>2016-11-04 00:54:22 +0000
commitb4ff502a31bc09dea60f1d02ae2a19eb45924039 (patch)
treee320aab59fdf4b5b490debcdf494298a543fb119
parent21698256a1b6466cd92f7d222ed8c08b51bb481e (diff)
downloadclutter-gst-b4ff502a31bc09dea60f1d02ae2a19eb45924039.tar.gz
player: fix segfault when sink emits a NULL frame
https://bugzilla.gnome.org/show_bug.cgi?id=773810
-rw-r--r--clutter-gst/clutter-gst-player.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/clutter-gst/clutter-gst-player.c b/clutter-gst/clutter-gst-player.c
index 6dc9823..c106ac5 100644
--- a/clutter-gst/clutter-gst-player.c
+++ b/clutter-gst/clutter-gst-player.c
@@ -43,6 +43,8 @@
#include "config.h"
#endif
+#include <string.h>
+
#include "clutter-gst-enum-types.h"
#include "clutter-gst-marshal.h"
#include "clutter-gst-player.h"
@@ -388,19 +390,18 @@ clutter_gst_player_update_frame (ClutterGstPlayer *player,
ClutterGstFrame *new_frame)
{
ClutterGstFrame *old_frame = *frame;
+ ClutterGstVideoResolution old_res = { 0, }, new_res = { 0, };
*frame = g_boxed_copy (CLUTTER_GST_TYPE_FRAME, new_frame);
- if (old_frame == NULL ||
- new_frame->resolution.width != old_frame->resolution.width ||
- new_frame->resolution.height != old_frame->resolution.height ||
- new_frame->resolution.par_n != old_frame->resolution.par_n ||
- new_frame->resolution.par_d != old_frame->resolution.par_d)
- {
- g_signal_emit (player, signals[SIZE_CHANGE], 0,
- new_frame->resolution.width,
- new_frame->resolution.height);
- }
+ if (old_frame)
+ old_res = old_frame->resolution;
+ if (new_frame)
+ new_res = new_frame->resolution;
+
+ if (memcmp(&old_res, &new_res, sizeof(old_res)) != 0)
+ g_signal_emit (player, signals[SIZE_CHANGE], 0,
+ new_res.width, new_res.height);
if (old_frame)
g_boxed_free (CLUTTER_GST_TYPE_FRAME, old_frame);