slomo gst-plugins-bad: gst-plugins-bad/ gst-plugins-bad/gst/mxf/

[email protected] Sun, 7 Dec 2008 10:39:55 -0800 (PST)
Newsgroups gmane.comp.video.gstreamer.cvs
Message-ID <[email protected]>
CVS Root:       /cvs/gstreamer
Module:         gst-plugins-bad
Changes by:     slomo
Date:           Sun Dec 07 2008  18:39:55 UTC

Log message:
* gst/mxf/mxfup.c: (mxf_up_handle_essence_element),
(mxf_up_rgba_create_caps):
Handle the image start and end offsets, otherwise we output
too large image buffers.

Modified files:
    .               : ChangeLog
    gst/mxf         : mxfup.c

Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3796&r2=1.3797
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfup.c.diff?r1=1.1&r2=1.2

====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3796
retrieving revision 1.3797
diff -u -d -r1.3796 -r1.3797
--- ChangeLog	7 Dec 2008 17:57:12 -0000	1.3796
+++ ChangeLog	7 Dec 2008 18:39:38 -0000	1.3797
@@ -1,5 +1,12 @@
 2008-12-07  Sebastian Dröge  <[email protected]>
 
+	* gst/mxf/mxfup.c: (mxf_up_handle_essence_element),
+	(mxf_up_rgba_create_caps):
+	Handle the image start and end offsets, otherwise we output
+	too large image buffers.
+
+2008-12-07  Sebastian Dröge  <[email protected]>
 	* gst/mxf/mxfmpeg.c: (mxf_mpeg_es_create_caps):
 	Set codec name tags for the MPEG audio essence.
Index: mxfup.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfup.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- mxfup.c	7 Dec 2008 17:16:28 -0000	1.1
+++ mxfup.c	7 Dec 2008 18:39:41 -0000	1.2
@@ -24,6 +24,8 @@
 /* TODO: 
  *   - Handle CDCI essence
  *   - Correctly transform for the GStreamer strides
+ *   - Handle all the dimensions and other properties in the picture
+ *     essence descriptors correctly according to S377M Annex E
  */
 #ifdef HAVE_CONFIG_H
@@ -40,6 +42,12 @@
 GST_DEBUG_CATEGORY_EXTERN (mxf_debug);
 #define GST_CAT_DEFAULT mxf_debug
+typedef struct
+{
+  guint32 image_start_offset;
+  guint32 image_end_offset;
+} MXFUPMappingData;
 gboolean
 mxf_is_up_essence_track (const MXFMetadataTrack * track)
 {
@@ -68,7 +76,7 @@
     MXFMetadataTrack * track, MXFMetadataStructuralComponent * component,
     gpointer mapping_data, GstBuffer ** outbuf)
-  *outbuf = buffer;
+  MXFUPMappingData *data = mapping_data;
   /* SMPTE 384M 7.1 */
   if (key->u[12] != 0x15 || (key->u[14] != 0x01 && key->u[14] != 0x02
@@ -77,6 +85,26 @@
     return GST_FLOW_ERROR;
   }
+  if (!data || (data->image_start_offset == 0 && data->image_end_offset == 0)) {
+    *outbuf = buffer;
+  } else {
+    if (data->image_start_offset + data->image_end_offset
+        > GST_BUFFER_SIZE (buffer)) {
+      gst_buffer_unref (buffer);
+      GST_ERROR ("Invalid buffer size");
+      return GST_FLOW_ERROR;
+    } else {
+      *outbuf =
+          gst_buffer_create_sub (buffer, data->image_start_offset,
+          GST_BUFFER_SIZE (buffer) - data->image_end_offset -
+          data->image_start_offset);
+      gst_buffer_copy_metadata (*outbuf, buffer,
+          GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS |
+          GST_BUFFER_COPY_CAPS);
+    }
+  }
   return GST_FLOW_OK;
 }
@@ -157,6 +185,17 @@
     return NULL;
+  if (caps) {
+    MXFUPMappingData *data = g_new0 (MXFUPMappingData, 1);
+    data->image_start_offset =
+        ((MXFMetadataGenericPictureEssenceDescriptor *) d)->image_start_offset;
+    data->image_end_offset =
+        ((MXFMetadataGenericPictureEssenceDescriptor *) d)->image_end_offset;
+    *mapping_data = data;
   return caps;

------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/

_______________________________________________
gstreamer-cvs-verbose mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gstreamer-cvs-verbose