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

[email protected]
Newsgroups gmane.comp.video.gstreamer.cvs
Message-ID <[email protected]>
CVS Root:       /cvs/gstreamer
Module:         gst-plugins-bad
Changes by:     slomo
Date:           Tue Nov 25 2008  10:26:25 UTC

Log message:
* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
(gst_mxf_demux_handle_metadata_generic_descriptor),
(gst_mxf_demux_handle_metadata_file_descriptor),
(gst_mxf_demux_handle_metadata_multiple_descriptor),
(gst_mxf_demux_handle_metadata_generic_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor),
(gst_mxf_demux_handle_metadata_mpeg_video_descriptor),
(gst_mxf_demux_handle_metadata_generic_sound_essence_descriptor),
(gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor),
(gst_mxf_demux_handle_header_metadata_resolve_references),
(gst_mxf_demux_handle_metadata):
* gst/mxf/mxfdemux.h:
* gst/mxf/mxfparse.c:
(mxf_metadata_rgba_picture_essence_descriptor_handle_tag),
(mxf_metadata_rgba_picture_essence_descriptor_reset):
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.h:
Add initial parsing of RGBA descriptors.
Don't initialize descriptor GArray with zeroes.

Modified files:
    .               : ChangeLog
    gst/mxf         : mxfdemux.c mxfdemux.h mxfparse.c mxfparse.h
                      mxftypes.h

Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3739&r2=1.3740
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c.diff?r1=1.7&r2=1.8
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.h.diff?r1=1.1&r2=1.2
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.c.diff?r1=1.5&r2=1.6
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.h.diff?r1=1.3&r2=1.4
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxftypes.h.diff?r1=1.1&r2=1.2

====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3739
retrieving revision 1.3740
diff -u -d -r1.3739 -r1.3740
--- ChangeLog	25 Nov 2008 09:38:23 -0000	1.3739
+++ ChangeLog	25 Nov 2008 10:26:09 -0000	1.3740
@@ -1,5 +1,29 @@
 2008-11-25  Sebastian Dröge  <[email protected]>
 
+	* gst/mxf/mxfdemux.c: (gst_mxf_demux_reset_metadata),
+	(gst_mxf_demux_handle_metadata_generic_descriptor),
+	(gst_mxf_demux_handle_metadata_file_descriptor),
+	(gst_mxf_demux_handle_metadata_multiple_descriptor),
+	(gst_mxf_demux_handle_metadata_generic_picture_essence_descriptor),
+	(gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor),
+	(gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor),
+	(gst_mxf_demux_handle_metadata_mpeg_video_descriptor),
+	(gst_mxf_demux_handle_metadata_generic_sound_essence_descriptor),
+	(gst_mxf_demux_handle_metadata_wave_audio_essence_descriptor),
+	(gst_mxf_demux_handle_header_metadata_resolve_references),
+	(gst_mxf_demux_handle_metadata):
+	* gst/mxf/mxfdemux.h:
+	* gst/mxf/mxfparse.c:
+	(mxf_metadata_rgba_picture_essence_descriptor_handle_tag),
+	(mxf_metadata_rgba_picture_essence_descriptor_reset):
+	* gst/mxf/mxfparse.h:
+	* gst/mxf/mxftypes.h:
+	Add initial parsing of RGBA descriptors.
+
+	Don't initialize descriptor GArray with zeroes.
+2008-11-25  Sebastian Dröge  <[email protected]>
 	* gst/mxf/mxfaes-bwf.c:
 	(mxf_metadata_wave_audio_essence_descriptor_handle_tag):
 	* gst/mxf/mxfaes-bwf.h:
Index: mxfdemux.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- mxfdemux.c	25 Nov 2008 09:38:26 -0000	1.7
+++ mxfdemux.c	25 Nov 2008 10:26:11 -0000	1.8
@@ -289,6 +289,15 @@
     demux->cdci_picture_essence_descriptor = NULL;
   }
+  if (demux->rgba_picture_essence_descriptor) {
+    for (i = 0; i < demux->rgba_picture_essence_descriptor->len; i++)
+      mxf_metadata_rgba_picture_essence_descriptor_reset (&g_array_index
+          (demux->rgba_picture_essence_descriptor,
+              MXFMetadataRGBAPictureEssenceDescriptor, i));
+    g_array_free (demux->rgba_picture_essence_descriptor, TRUE);
+    demux->rgba_picture_essence_descriptor = NULL;
+  }
   if (demux->mpeg_video_descriptor) {
     for (i = 0; i < demux->mpeg_video_descriptor->len; i++)
       mxf_metadata_mpeg_video_descriptor_reset (&g_array_index
@@ -722,7 +731,7 @@
   if (!demux->generic_descriptor)
     demux->generic_descriptor =
-        g_array_new (FALSE, TRUE, sizeof (MXFMetadataGenericDescriptor));
+        g_array_new (FALSE, FALSE, sizeof (MXFMetadataGenericDescriptor));
   g_array_append_val (demux->generic_descriptor, descriptor);
@@ -754,7 +763,7 @@
   if (!demux->file_descriptor)
     demux->file_descriptor =
-        g_array_new (FALSE, TRUE, sizeof (MXFMetadataFileDescriptor));
+        g_array_new (FALSE, FALSE, sizeof (MXFMetadataFileDescriptor));
   g_array_append_val (demux->file_descriptor, descriptor);
@@ -787,7 +796,7 @@
   if (!demux->multiple_descriptor)
     demux->multiple_descriptor =
-        g_array_new (FALSE, TRUE, sizeof (MXFMetadataMultipleDescriptor));
+        g_array_new (FALSE, FALSE, sizeof (MXFMetadataMultipleDescriptor));
   g_array_append_val (demux->multiple_descriptor, descriptor);
@@ -821,7 +830,7 @@
   if (!demux->generic_picture_essence_descriptor)
     demux->generic_picture_essence_descriptor =
-        g_array_new (FALSE, TRUE,
+        g_array_new (FALSE, FALSE,
         sizeof (MXFMetadataGenericPictureEssenceDescriptor));
   g_array_append_val (demux->generic_picture_essence_descriptor, descriptor);
@@ -856,7 +865,7 @@
   if (!demux->cdci_picture_essence_descriptor)
     demux->cdci_picture_essence_descriptor =
         sizeof (MXFMetadataCDCIPictureEssenceDescriptor));
   g_array_append_val (demux->cdci_picture_essence_descriptor, descriptor);
@@ -865,6 +874,41 @@
 }
 static GstFlowReturn
+gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor (GstMXFDemux *
+    demux, const MXFUL * key, guint16 type, GstBuffer * buffer)
+{
+  MXFMetadataRGBAPictureEssenceDescriptor descriptor;
+  memset (&descriptor, 0, sizeof (descriptor));
+  GST_DEBUG_OBJECT (demux,
+      "Handling metadata RGBA picture essence descriptor of size %u"
+      " at offset %" G_GUINT64_FORMAT " with type 0x%04d",
+      GST_BUFFER_SIZE (buffer), demux->offset, type);
+  if (!mxf_metadata_descriptor_parse (key,
+          (MXFMetadataGenericDescriptor *) & descriptor, &demux->primer,
+          type, GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer),
+          (MXFMetadataDescriptorHandleTag)
+          mxf_metadata_rgba_picture_essence_descriptor_handle_tag,
+          (MXFMetadataDescriptorReset)
+          mxf_metadata_rgba_picture_essence_descriptor_reset)) {
+    GST_ERROR_OBJECT (demux,
+        "Parsing metadata RGBA picture essence descriptor failed");
+    return GST_FLOW_ERROR;
+  if (!demux->rgba_picture_essence_descriptor)
+    demux->rgba_picture_essence_descriptor =
+        sizeof (MXFMetadataRGBAPictureEssenceDescriptor));
+  g_array_append_val (demux->rgba_picture_essence_descriptor, descriptor);
+  return GST_FLOW_OK;
+}
+static GstFlowReturn
 gst_mxf_demux_handle_metadata_mpeg_video_descriptor (GstMXFDemux * demux,
     const MXFUL * key, guint16 type, GstBuffer * buffer)
 {
@@ -890,7 +934,7 @@
   if (!demux->mpeg_video_descriptor)
     demux->mpeg_video_descriptor =
-        g_array_new (FALSE, TRUE, sizeof (MXFMetadataMPEGVideoDescriptor));
+        g_array_new (FALSE, FALSE, sizeof (MXFMetadataMPEGVideoDescriptor));
   g_array_append_val (demux->mpeg_video_descriptor, descriptor);
@@ -924,7 +968,7 @@
   if (!demux->generic_sound_essence_descriptor)
     demux->generic_sound_essence_descriptor =
         sizeof (MXFMetadataGenericSoundEssenceDescriptor));
   g_array_append_val (demux->generic_sound_essence_descriptor, descriptor);
@@ -959,7 +1003,7 @@
   if (!demux->wave_audio_essence_descriptor)
     demux->wave_audio_essence_descriptor =
         sizeof (MXFMetadataWaveAudioEssenceDescriptor));
   g_array_append_val (demux->wave_audio_essence_descriptor, descriptor);
@@ -1033,6 +1077,13 @@
               MXFMetadataCDCIPictureEssenceDescriptor, i));
     }
+    for (i = 0; i < demux->rgba_picture_essence_descriptor->len; i++) {
+      g_ptr_array_add (demux->descriptor,
+          &g_array_index (demux->rgba_picture_essence_descriptor,
+    }
     for (i = 0; i < demux->mpeg_video_descriptor->len; i++) {
       g_ptr_array_add (demux->descriptor,
@@ -1173,8 +1224,9 @@
           MXFMetadataEssenceContainerData, i);
       for (j = 0; j < demux->content_storage.n_essence_container_data; j++) {
-        if (mxf_ul_is_equal (&demux->content_storage.
-                essence_container_data_uids[j], &data->instance_uid)) {
+        if (mxf_ul_is_equal (&demux->
+                content_storage.essence_container_data_uids[j],
+                &data->instance_uid)) {
           demux->content_storage.essence_container_data[j] = data;
           break;
         }
@@ -1827,7 +1879,6 @@
           gst_mxf_demux_handle_metadata_structural_component (demux,
           key, type, buffer);
       break;
-    case MXF_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR:
     case MXF_METADATA_GENERIC_DATA_ESSENCE_DESCRIPTOR:
       ret =
           gst_mxf_demux_handle_metadata_generic_descriptor (demux,
@@ -1848,6 +1899,11 @@
           gst_mxf_demux_handle_metadata_cdci_picture_essence_descriptor (demux,
+    case MXF_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR:
+      ret =
+          gst_mxf_demux_handle_metadata_rgba_picture_essence_descriptor (demux,
+          key, type, buffer);
+      break;
     case MXF_METADATA_MPEG_VIDEO_DESCRIPTOR:
           gst_mxf_demux_handle_metadata_mpeg_video_descriptor (demux,
Index: mxfdemux.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- mxfdemux.h	21 Nov 2008 10:27:14 -0000	1.1
+++ mxfdemux.h	25 Nov 2008 10:26:11 -0000	1.2
@@ -88,6 +88,7 @@
   GArray *generic_sound_essence_descriptor;
   GArray *generic_picture_essence_descriptor;
   GArray *cdci_picture_essence_descriptor;
+  GArray *rgba_picture_essence_descriptor;
   GArray *mpeg_video_descriptor;
   GArray *wave_audio_essence_descriptor;
   GArray *multiple_descriptor;
Index: mxfparse.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mxfparse.c	25 Nov 2008 09:38:26 -0000	1.5
+++ mxfparse.c	25 Nov 2008 10:26:11 -0000	1.6
@@ -2389,6 +2389,79 @@
 gboolean
+    mxf_metadata_rgba_picture_essence_descriptor_handle_tag
+    (MXFMetadataGenericDescriptor * d, const MXFPrimerPack * primer,
+    guint16 tag, const guint8 * tag_data, guint16 tag_size)
+  MXFMetadataRGBAPictureEssenceDescriptor *descriptor =
+      (MXFMetadataRGBAPictureEssenceDescriptor *) d;
+  gboolean ret = FALSE;
+  switch (tag) {
+    case 0x3406:
+      if (tag_size != 4)
+        goto error;
+      descriptor->component_max_ref = GST_READ_UINT32_BE (tag_data);
+      GST_DEBUG ("  component max ref = %u", descriptor->component_max_ref);
+    case 0x3407:
+      descriptor->component_min_ref = GST_READ_UINT32_BE (tag_data);
+      GST_DEBUG ("  component min ref = %u", descriptor->component_min_ref);
+    case 0x3408:
+      descriptor->alpha_max_ref = GST_READ_UINT32_BE (tag_data);
+      GST_DEBUG ("  alpha max ref = %u", descriptor->alpha_max_ref);
+    case 0x3409:
+      descriptor->alpha_min_ref = GST_READ_UINT32_BE (tag_data);
+      GST_DEBUG ("  alpha min ref = %u", descriptor->alpha_min_ref);
+    case 0x3405:
+      if (tag_size != 1)
+      descriptor->scanning_direction = GST_READ_UINT8 (tag_data);
+      GST_DEBUG ("  scanning direction = %u", descriptor->scanning_direction);
+    case 0x3401:
+    case 0x3403:
+    case 0x3404:
+      /* TODO: handle this */
+      GST_WARNING ("  tag 0x%04x not implemented yet", tag);
+    default:
+          mxf_metadata_generic_picture_essence_descriptor_handle_tag (d, primer,
+          tag, tag_data, tag_size);
+  return ret;
+error:
+  GST_ERROR ("Invalid RGBA picture essence descriptor tag 0x%04x of size %u",
+      tag, tag_size);
+  return TRUE;
+void mxf_metadata_rgba_picture_essence_descriptor_reset
+    (MXFMetadataRGBAPictureEssenceDescriptor * descriptor)
+  g_return_if_fail (descriptor != NULL);
+  mxf_metadata_generic_picture_essence_descriptor_reset (
+      (MXFMetadataGenericPictureEssenceDescriptor *) descriptor);
+  memset (descriptor, 0, sizeof (MXFMetadataRGBAPictureEssenceDescriptor));
+gboolean
 mxf_metadata_multiple_descriptor_handle_tag (MXFMetadataGenericDescriptor * d,
     const MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
     guint16 tag_size)
Index: mxfparse.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfparse.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mxfparse.h	25 Nov 2008 09:38:26 -0000	1.3
+++ mxfparse.h	25 Nov 2008 10:26:11 -0000	1.4
@@ -131,6 +131,10 @@
     const MXFPrimerPack *primer, guint16 tag, const guint8 *tag_data, guint16 tag_size);
 void mxf_metadata_cdci_picture_essence_descriptor_reset (MXFMetadataCDCIPictureEssenceDescriptor *descriptor);
+gboolean mxf_metadata_rgba_picture_essence_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
+    const MXFPrimerPack *primer, guint16 tag, const guint8 *tag_data, guint16 tag_size);
+void mxf_metadata_rgba_picture_essence_descriptor_reset (MXFMetadataRGBAPictureEssenceDescriptor *descriptor);
 gboolean mxf_metadata_multiple_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor,
 void mxf_metadata_multiple_descriptor_reset (MXFMetadataMultipleDescriptor *descriptor);
Index: mxftypes.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxftypes.h,v
--- mxftypes.h	21 Nov 2008 10:27:15 -0000	1.1
+++ mxftypes.h	25 Nov 2008 10:26:11 -0000	1.2
@@ -149,6 +149,7 @@
 typedef struct _MXFMetadataFileDescriptor MXFMetadataFileDescriptor;
 typedef struct _MXFMetadataGenericPictureEssenceDescriptor MXFMetadataGenericPictureEssenceDescriptor;
 typedef struct _MXFMetadataCDCIPictureEssenceDescriptor MXFMetadataCDCIPictureEssenceDescriptor;
+typedef struct _MXFMetadataRGBAPictureEssenceDescriptor MXFMetadataRGBAPictureEssenceDescriptor;
 typedef struct _MXFMetadataGenericSoundEssenceDescriptor MXFMetadataGenericSoundEssenceDescriptor;
 typedef struct _MXFMetadataMultipleDescriptor MXFMetadataMultipleDescriptor;
 typedef struct _MXFMetadataLocator MXFMetadataLocator;
@@ -422,6 +423,18 @@
   guint32 color_range;
 };
+struct _MXFMetadataRGBAPictureEssenceDescriptor {
+  MXFMetadataGenericPictureEssenceDescriptor parent;
+  guint32 component_max_ref;
+  guint32 component_min_ref;
+  guint32 alpha_max_ref;
+  guint32 alpha_min_ref;
+  guint8 scanning_direction;
+  /* TODO: pixel layout, palette & palette layout */
+};
 struct _MXFMetadataGenericSoundEssenceDescriptor {
   MXFMetadataFileDescriptor parent;

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/

_______________________________________________
gstreamer-cvs-verbose mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gstreamer-cvs-verbose
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.