diff options
Diffstat (limited to 'ext/sdl')
-rw-r--r-- | ext/sdl/sdlvideosink.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/ext/sdl/sdlvideosink.c b/ext/sdl/sdlvideosink.c index 672e63b4..af49e66c 100644 --- a/ext/sdl/sdlvideosink.c +++ b/ext/sdl/sdlvideosink.c @@ -224,7 +224,7 @@ gst_sdlvideosink_create (GstSDLVideoSink *sdlvideosink) /* create a SDL window of the size requested by the user */ sdlvideosink->screen = SDL_SetVideoMode(sdlvideosink->window_width, - sdlvideosink->window_height, 0, SDL_SWSURFACE); + sdlvideosink->window_height, 0, SDL_SWSURFACE | SDL_RESIZABLE); if ( sdlvideosink->screen == NULL) { gst_element_error(GST_ELEMENT(sdlvideosink), @@ -323,6 +323,7 @@ gst_sdlvideosink_chain (GstPad *pad, GstBuffer *buf) { GstSDLVideoSink *sdlvideosink; GstClockTimeDiff jitter; + SDL_Event event; g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_PAD (pad)); @@ -332,6 +333,19 @@ gst_sdlvideosink_chain (GstPad *pad, GstBuffer *buf) GST_DEBUG (0,"videosink: clock wait: %llu\n", GST_BUFFER_TIMESTAMP(buf)); + while (SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_VIDEORESIZE: + /* create a SDL window of the size requested by the user */ + sdlvideosink->window_width = event.resize.w; + sdlvideosink->window_height = event.resize.h; + gst_sdlvideosink_create(sdlvideosink); + break; + } + } + jitter = gst_clock_current_diff(sdlvideosink->clock, GST_BUFFER_TIMESTAMP (buf)); if (jitter > 500000 || jitter < -500000) @@ -407,9 +421,13 @@ gst_sdlvideosink_set_property (GObject *object, guint prop_id, const GValue *val { case ARG_WIDTH: sdlvideosink->window_width = g_value_get_int(value); + if (sdlvideosink->yuv_overlay) + gst_sdlvideosink_create(sdlvideosink); break; case ARG_HEIGHT: sdlvideosink->window_height = g_value_get_int(value); + if (sdlvideosink->yuv_overlay) + gst_sdlvideosink_create(sdlvideosink); break; case ARG_XID: sdlvideosink->window_id = g_value_get_int(value); @@ -476,9 +494,9 @@ gst_sdlvideosink_change_state (GstElement *element) GST_FLAG_SET (sdlvideosink, GST_SDLVIDEOSINK_OPEN); break; case GST_STATE_READY_TO_NULL: - if (sdlvideosink->yuv_overlay) + /*if (sdlvideosink->yuv_overlay) SDL_FreeYUVOverlay(sdlvideosink->yuv_overlay); - sdlvideosink->yuv_overlay = NULL; + sdlvideosink->yuv_overlay = NULL;*/ SDL_Quit(); GST_FLAG_UNSET (sdlvideosink, GST_SDLVIDEOSINK_OPEN); break; |