From: Arnaud Vrac <avrac@freebox.fr>
Date: Tue, 19 Feb 2013 12:21:46 +0100
Subject: assrender: limit render size to 1280x720


diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c
--- a/ext/assrender/gstassrender.c
+++ b/ext/assrender/gstassrender.c
@@ -45,6 +45,9 @@
 
 #include <string.h>
 
+#define MAX_RENDER_WIDTH 1280
+#define MAX_RENDER_HEIGHT 720
+
 GST_DEBUG_CATEGORY_STATIC (gst_ass_render_debug);
 GST_DEBUG_CATEGORY_STATIC (gst_ass_render_lib_debug);
 #define GST_CAT_DEFAULT gst_ass_render_debug
@@ -556,9 +559,12 @@ gst_ass_render_setcaps_video (GstPad * pad, GstCaps * caps)
   gst_query_unref (query);
 
   render->attach_compo_to_buffer = attach;
+  render->ass_frame_width = MIN (MAX_RENDER_WIDTH, render->width);
+  render->ass_frame_height = MIN (MAX_RENDER_HEIGHT, render->height);
 
   g_mutex_lock (&render->ass_mutex);
-  ass_set_frame_size (render->ass_renderer, render->width, render->height);
+  ass_set_frame_size (render->ass_renderer,
+      render->ass_frame_width, render->ass_frame_height);
 
   dar = (((gdouble) par_n) * ((gdouble) render->width))
       / (((gdouble) par_d) * ((gdouble) render->height));
@@ -710,8 +716,8 @@ gst_ass_render_composite_overlay (GstAssRender * render, ASS_Image * images)
       max_y = image->dst_y + image->h;
   }
 
-  width = MIN (max_x - min_x, render->width);
-  height = MIN (max_y - min_y, render->height);
+  width = MIN (max_x - min_x, render->ass_frame_width);
+  height = MIN (max_y - min_y, render->ass_frame_height);
 
   GST_DEBUG_OBJECT (render, "render overlay rectangle %dx%d%+d%+d",
       width, height, min_x, min_y);
@@ -735,6 +741,15 @@ gst_ass_render_composite_overlay (GstAssRender * render, ASS_Image * images)
       -min_x, -min_y);
   gst_video_meta_unmap (vmeta, 0, &map);
 
+  min_x = gst_util_uint64_scale_int_round (min_x,
+      render->width, render->ass_frame_width);
+  min_y = gst_util_uint64_scale_int_round (min_y,
+      render->height, render->ass_frame_height);
+  width = gst_util_uint64_scale_int_round (width,
+      render->width, render->ass_frame_width);
+  height = gst_util_uint64_scale_int_round (height,
+      render->height, render->ass_frame_height);
+
   rectangle = gst_video_overlay_rectangle_new_raw (buffer, min_x, min_y,
       width, height, GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA);
 
diff --git a/ext/assrender/gstassrender.h b/ext/assrender/gstassrender.h
--- a/ext/assrender/gstassrender.h
+++ b/ext/assrender/gstassrender.h
@@ -71,6 +71,7 @@ struct _GstAssRender
   ASS_Library *ass_library;
   ASS_Renderer *ass_renderer;
   ASS_Track *ass_track;
+  gint ass_frame_width, ass_frame_height;
 
   gboolean renderer_init_ok, track_init_ok;
 
