pango: only map video buffer memory if actually needed
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Mon, 2 Jul 2012 17:54:55 +0000 (18:54 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Mon, 2 Jul 2012 18:23:47 +0000 (19:23 +0100)
No need to map the video buffer if we're just going to attach
the meta; but if we map, we should do so in READWRITE mode.

ext/pango/gstbasetextoverlay.c

index cbf0e0d..f9fe980 100644 (file)
@@ -1592,9 +1592,21 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay,
   gint xpos, ypos;
   GstVideoFrame frame;
 
+  if (overlay->composition == NULL)
+    goto done;
+
   video_frame = gst_buffer_make_writable (video_frame);
 
-  if (!gst_video_frame_map (&frame, &overlay->info, video_frame, GST_MAP_WRITE))
+  if (overlay->attach_compo_to_buffer) {
+    GST_DEBUG_OBJECT (overlay, "Attaching text overlay image to video buffer");
+    gst_video_buffer_set_overlay_composition (video_frame,
+        overlay->composition);
+    /* FIXME: emulate shaded background box if want_shading=true */
+    goto done;
+  }
+
+  if (!gst_video_frame_map (&frame, &overlay->info, video_frame,
+          GST_MAP_READWRITE))
     goto invalid_frame;
 
   gst_base_text_overlay_get_pos (overlay, &xpos, &ypos);
@@ -1660,18 +1672,12 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay,
     }
   }
 
-  if (overlay->composition) {
-    if (overlay->attach_compo_to_buffer) {
-      GST_DEBUG_OBJECT (overlay, "Attaching text to the buffer");
-      gst_video_buffer_set_overlay_composition (video_frame,
-          overlay->composition);
-    } else {
-      gst_video_overlay_composition_blend (overlay->composition, &frame);
-    }
-  }
+  gst_video_overlay_composition_blend (overlay->composition, &frame);
 
   gst_video_frame_unmap (&frame);
 
+done:
+
   return gst_pad_push (overlay->srcpad, video_frame);
 
   /* ERRORS */