slomo gst-plugins-bad: gst-plugins-bad/ gst-plugins-bad/gst/mxf/
[email protected] Sun, 30 Nov 2008 09:42:44 -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 Nov 30 2008 17:42:44 UTC
Log message:
* gst/mxf/mxfalaw.c: (mxf_is_alaw_essence_track):
* gst/mxf/mxfalaw.h:
* gst/mxf/mxfdemux.c:
(gst_mxf_demux_handle_header_metadata_update_streams):
* gst/mxf/mxfjpeg2000.c: (mxf_is_jpeg2000_essence_track):
* gst/mxf/mxfjpeg2000.h:
* gst/mxf/mxfmpeg.c: (mxf_is_mpeg_essence_track),
(mxf_mpeg_es_create_caps), (mxf_mpeg_create_caps):
* gst/mxf/mxfmpeg.h:
Some random cleanup.
Modified files:
. : ChangeLog
gst/mxf : mxfalaw.c mxfalaw.h mxfdemux.c mxfjpeg2000.c
mxfjpeg2000.h mxfmpeg.c mxfmpeg.h
Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3769&r2=1.3770
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.c.diff?r1=1.1&r2=1.2
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.h.diff?r1=1.1&r2=1.2
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c.diff?r1=1.18&r2=1.19
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfjpeg2000.c.diff?r1=1.2&r2=1.3
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfjpeg2000.h.diff?r1=1.1&r2=1.2
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.c.diff?r1=1.6&r2=1.7
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.h.diff?r1=1.3&r2=1.4
====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3769
retrieving revision 1.3770
diff -u -d -r1.3769 -r1.3770
--- ChangeLog 30 Nov 2008 17:26:53 -0000 1.3769
+++ ChangeLog 30 Nov 2008 17:42:28 -0000 1.3770
@@ -1,5 +1,18 @@
2008-11-30 Sebastian Dröge <[email protected] >
+ * gst/mxf/mxfalaw.c: (mxf_is_alaw_essence_track):
+ * gst/mxf/mxfalaw.h:
+ * gst/mxf/mxfdemux.c:
+ (gst_mxf_demux_handle_header_metadata_update_streams):
+ * gst/mxf/mxfjpeg2000.c: (mxf_is_jpeg2000_essence_track):
+ * gst/mxf/mxfjpeg2000.h:
+ * gst/mxf/mxfmpeg.c: (mxf_is_mpeg_essence_track),
+ (mxf_mpeg_es_create_caps), (mxf_mpeg_create_caps):
+ * gst/mxf/mxfmpeg.h:
+ Some random cleanup.
+
+2008-11-30 Sebastian Dröge <[email protected] >
* gst/mxf/mxfdemux.c: (gst_mxf_demux_remove_pads),
(gst_mxf_demux_reset), (gst_mxf_demux_find_package),
(gst_mxf_demux_choose_package),
Index: mxfalaw.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- mxfalaw.c 28 Nov 2008 18:13:30 -0000 1.1
+++ mxfalaw.c 30 Nov 2008 17:42:29 -0000 1.2
@@ -34,7 +34,7 @@
#define GST_CAT_DEFAULT mxf_debug
gboolean
-mxf_is_alaw_audio_essence_track (const MXFMetadataTrack * track)
+mxf_is_alaw_essence_track (const MXFMetadataTrack * track)
{
guint i;
@@ -99,8 +99,8 @@
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->descriptor[i];
f = track->descriptor[i];
break;
- } else if (((MXFMetadataGenericDescriptor *) track->
- descriptor[i])->is_file_descriptor
+ } else if (((MXFMetadataGenericDescriptor *) track->descriptor[i])->
+ is_file_descriptor
&& ((MXFMetadataGenericDescriptor *) track->descriptor[i])->type !=
MXF_METADATA_MULTIPLE_DESCRIPTOR) {
Index: mxfalaw.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.h,v
--- mxfalaw.h 28 Nov 2008 18:13:30 -0000 1.1
+++ mxfalaw.h 30 Nov 2008 17:42:30 -0000 1.2
@@ -28,7 +28,7 @@
#include "mxfparse.h"
-gboolean mxf_is_alaw_audio_essence_track (const MXFMetadataTrack *track);
+gboolean mxf_is_alaw_essence_track (const MXFMetadataTrack *track);
GstCaps *
mxf_alaw_create_caps (MXFMetadataGenericPackage *package, MXFMetadataTrack *track, GstTagList **tags, MXFEssenceElementHandler *handler, gpointer *mapping_data);
Index: mxfdemux.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- mxfdemux.c 30 Nov 2008 17:26:54 -0000 1.18
+++ mxfdemux.c 30 Nov 2008 17:42:30 -0000 1.19
@@ -1305,9 +1305,8 @@
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;
}
@@ -1865,15 +1864,15 @@
switch (track_type) {
case MXF_METADATA_TRACK_PICTURE_ESSENCE:
- if (mxf_is_mpeg_video_essence_track (source_track))
+ if (mxf_is_mpeg_essence_track (source_track))
caps =
- mxf_mpeg_video_create_caps (source_package, source_track,
+ mxf_mpeg_create_caps (source_package, source_track,
&pad->tags, &pad->handle_essence_element, &pad->mapping_data);
else if (mxf_is_dv_dif_essence_track (source_track))
mxf_dv_dif_create_caps (source_package, source_track,
- else if (mxf_is_jpeg2000_video_essence_track (source_track))
+ else if (mxf_is_jpeg2000_essence_track (source_track))
mxf_jpeg2000_create_caps (source_package, source_track,
@@ -1887,10 +1886,14 @@
- else if (mxf_is_alaw_audio_essence_track (source_track))
+ else if (mxf_is_alaw_essence_track (source_track))
mxf_alaw_create_caps (source_package, source_track,
+ else if (mxf_is_mpeg_essence_track (source_track))
+ caps =
+ &pad->tags, &pad->handle_essence_element, &pad->mapping_data);
break;
case MXF_METADATA_TRACK_DATA_ESSENCE:
if (mxf_is_dv_dif_essence_track (source_track))
Index: mxfjpeg2000.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfjpeg2000.c,v
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mxfjpeg2000.c 30 Nov 2008 14:12:04 -0000 1.2
+++ mxfjpeg2000.c 30 Nov 2008 17:42:30 -0000 1.3
@@ -38,7 +38,7 @@
-mxf_is_jpeg2000_video_essence_track (const MXFMetadataTrack * track)
+mxf_is_jpeg2000_essence_track (const MXFMetadataTrack * track)
@@ -106,8 +106,8 @@
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->descriptor[i];
Index: mxfjpeg2000.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfjpeg2000.h,v
--- mxfjpeg2000.h 29 Nov 2008 20:25:06 -0000 1.1
+++ mxfjpeg2000.h 30 Nov 2008 17:42:30 -0000 1.2
-gboolean mxf_is_jpeg2000_video_essence_track (const MXFMetadataTrack *track);
+gboolean mxf_is_jpeg2000_essence_track (const MXFMetadataTrack *track);
mxf_jpeg2000_create_caps (MXFMetadataGenericPackage *package, MXFMetadataTrack *track, GstTagList **tags, MXFEssenceElementHandler *handler, gpointer *mapping_data);
Index: mxfmpeg.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- mxfmpeg.c 30 Nov 2008 14:12:04 -0000 1.6
+++ mxfmpeg.c 30 Nov 2008 17:42:30 -0000 1.7
@@ -24,6 +24,7 @@
/* TODO:
* - Handle PES streams
* - Fix TS/PS demuxers to forward timestamps
+ * - Handle sound/data somehow
*/
#ifdef HAVE_CONFIG_H
@@ -195,7 +196,7 @@
}
-mxf_is_mpeg_video_essence_track (const MXFMetadataTrack * track)
+mxf_is_mpeg_essence_track (const MXFMetadataTrack * track)
@@ -243,14 +244,84 @@
0x01, 0x00, 0x00
};
+static GstCaps *
+mxf_mpeg_es_create_caps (MXFMetadataGenericPackage * package,
+ MXFMetadataTrack * track, GstTagList ** tags,
+ MXFEssenceElementHandler * handler, gpointer * mapping_data,
+ MXFMetadataFileDescriptor * f,
+ MXFMetadataGenericPictureEssenceDescriptor * p,
+ MXFMetadataGenericSoundEssenceDescriptor * s,
+ MXFMetadataMPEGVideoDescriptor * d)
+{
+ GstCaps *caps = NULL;
+ /* SMPTE RP224 */
+ if (!p || mxf_ul_is_zero (&p->picture_essence_coding)) {
+ GST_WARNING
+ ("No picture essence descriptor or no picture essence coding defined");
+ caps =
+ gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 2,
+ "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
+ } else if (p->picture_essence_coding.u[0] != 0x06
+ || p->picture_essence_coding.u[1] != 0x0e
+ || p->picture_essence_coding.u[2] != 0x2b
+ || p->picture_essence_coding.u[3] != 0x34
+ || p->picture_essence_coding.u[4] != 0x04
+ || p->picture_essence_coding.u[5] != 0x01
+ || p->picture_essence_coding.u[6] != 0x01
+ || p->picture_essence_coding.u[8] != 0x04
+ || p->picture_essence_coding.u[9] != 0x01
+ || p->picture_essence_coding.u[10] != 0x02
+ || p->picture_essence_coding.u[11] != 0x02
+ || p->picture_essence_coding.u[12] != 0x01) {
+ GST_ERROR ("No MPEG picture essence coding");
+ caps = NULL;
+ } else if (p->picture_essence_coding.u[13] >= 0x01 &&
+ p->picture_essence_coding.u[13] <= 0x08) {
+ caps = gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 2,
+ } else if (p->picture_essence_coding.u[13] == 0x10) {
+ caps = gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 1,
+ } else if (p->picture_essence_coding.u[13] == 0x20) {
+ MXFLocalTag *local_tag =
+ (((MXFMetadataGenericDescriptor *) f)->other_tags) ?
+ g_hash_table_lookup (((MXFMetadataGenericDescriptor *)
+ f)->other_tags, &sony_mpeg4_extradata) : NULL;
+ caps = gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 4,
+ if (local_tag) {
+ GstBuffer *codec_data = NULL;
+ codec_data = gst_buffer_new_and_alloc (local_tag->size);
+ memcpy (GST_BUFFER_DATA (codec_data), local_tag->data, local_tag->size);
+ gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, codec_data,
+ NULL);
+ gst_buffer_unref (codec_data);
+ }
+ } else {
+ GST_ERROR ("Unsupported MPEG picture essence coding 0x%02x",
+ p->picture_essence_coding.u[13]);
+ }
+ if (caps)
+ *handler = mxf_mpeg_video_handle_essence_element;
+ return caps;
+}
-mxf_mpeg_video_create_caps (MXFMetadataGenericPackage * package,
+mxf_mpeg_create_caps (MXFMetadataGenericPackage * package,
MXFMetadataTrack * track, GstTagList ** tags,
MXFEssenceElementHandler * handler, gpointer * mapping_data)
MXFMetadataMPEGVideoDescriptor *d = NULL;
MXFMetadataFileDescriptor *f = NULL;
MXFMetadataGenericPictureEssenceDescriptor *p = NULL;
+ MXFMetadataGenericSoundEssenceDescriptor *s = NULL;
GstCaps *caps = NULL;
@@ -277,6 +348,11 @@
} else if (((MXFMetadataGenericDescriptor *) track->descriptor[i])->type ==
+ MXF_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR) {
+ f = track->descriptor[i];
+ s = (MXFMetadataGenericSoundEssenceDescriptor *) track->descriptor[i];
+ break;
+ } else if (((MXFMetadataGenericDescriptor *) track->descriptor[i])->type ==
MXF_METADATA_FILE_DESCRIPTOR) {
}
@@ -287,62 +363,13 @@
return NULL;
}
- *handler = mxf_mpeg_video_handle_essence_element;
/* SMPTE 381M 7 */
if (f->essence_container.u[13] == 0x04) {
GST_DEBUG ("Found MPEG ES stream");
- /* SMPTE RP224 */
- if (!p || mxf_ul_is_zero (&p->picture_essence_coding)) {
- GST_WARNING
- ("No picture essence descriptor or no picture essence coding defined");
- caps =
- gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 2,
- "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
- } else if (p->picture_essence_coding.u[0] != 0x06
- || p->picture_essence_coding.u[1] != 0x0e
- || p->picture_essence_coding.u[2] != 0x2b
- || p->picture_essence_coding.u[3] != 0x34
- || p->picture_essence_coding.u[4] != 0x04
- || p->picture_essence_coding.u[5] != 0x01
- || p->picture_essence_coding.u[6] != 0x01
- || p->picture_essence_coding.u[8] != 0x04
- || p->picture_essence_coding.u[9] != 0x01
- || p->picture_essence_coding.u[10] != 0x02
- || p->picture_essence_coding.u[11] != 0x02
- || p->picture_essence_coding.u[12] != 0x01) {
- GST_ERROR ("No MPEG picture essence coding");
- caps = NULL;
- } else if (p->picture_essence_coding.u[13] >= 0x01 &&
- p->picture_essence_coding.u[13] <= 0x08) {
- caps = gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 2,
- } else if (p->picture_essence_coding.u[13] == 0x10) {
- caps = gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 1,
- } else if (p->picture_essence_coding.u[13] == 0x20) {
- MXFLocalTag *local_tag =
- (((MXFMetadataGenericDescriptor *) f)->
- other_tags) ? g_hash_table_lookup (((MXFMetadataGenericDescriptor *)
- f)->other_tags, &sony_mpeg4_extradata) : NULL;
-
- caps = gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 4,
- if (local_tag) {
- GstBuffer *codec_data = NULL;
- codec_data = gst_buffer_new_and_alloc (local_tag->size);
- memcpy (GST_BUFFER_DATA (codec_data), local_tag->data, local_tag->size);
- gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, codec_data,
- NULL);
- gst_buffer_unref (codec_data);
- }
- } else {
- GST_ERROR ("Unsupported MPEG picture essence coding 0x%02x",
- p->picture_essence_coding.u[13]);
- }
+ mxf_mpeg_es_create_caps (package, track, tags, handler, mapping_data, f,
+ p, s, d);
} else if (f->essence_container.u[13] == 0x07) {
GST_ERROR ("MPEG PES streams not supported yet");
@@ -354,7 +381,6 @@
} else if (f->essence_container.u[13] == 0x09) {
GST_DEBUG ("Found MPEG TS stream");
caps = gst_caps_new_simple ("video/mpegts", NULL);
if (p)
Index: mxfmpeg.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.h,v
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mxfmpeg.h 25 Nov 2008 09:38:26 -0000 1.3
+++ mxfmpeg.h 30 Nov 2008 17:42:30 -0000 1.4
@@ -52,9 +52,9 @@
gboolean mxf_metadata_mpeg_video_descriptor_handle_tag (MXFMetadataGenericDescriptor *descriptor, const MXFPrimerPack *primer, guint16 tag, const guint8 *tag_data, guint16 tag_size);
void mxf_metadata_mpeg_video_descriptor_reset (MXFMetadataMPEGVideoDescriptor *descriptor);
-gboolean mxf_is_mpeg_video_essence_track (const MXFMetadataTrack *track);
+gboolean mxf_is_mpeg_essence_track (const MXFMetadataTrack *track);
-mxf_mpeg_video_create_caps (MXFMetadataGenericPackage *package, MXFMetadataTrack *track, GstTagList **tags, MXFEssenceElementHandler *handler, gpointer *mapping_data);
+mxf_mpeg_create_caps (MXFMetadataGenericPackage *package, MXFMetadataTrack *track, GstTagList **tags, MXFEssenceElementHandler *handler, gpointer *mapping_data);
#endif /* __MXF_MPEG_H__ */
-------------------------------------------------------------------------
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