slomo gst-plugins-bad: gst-plugins-bad/ gst-plugins-bad/gst/mxf/
[email protected] Fri, 19 Dec 2008 02:06:38 -0800 (PST)
| Newsgroups | gmane.comp.video.gstreamer.cvs |
|---|---|
| Message-ID | <[email protected]> |
CVS Root: /cvs/gstreamer
Module: gst-plugins-bad
Changes by: slomo
Date: Fri Dec 19 2008 10:06:38 UTC
Log message:
* gst/mxf/mxfaes-bwf.c: (mxf_bwf_create_caps),
(mxf_aes3_create_caps):
* gst/mxf/mxfalaw.c: (mxf_alaw_create_caps):
* gst/mxf/mxfd10.c: (mxf_d10_create_caps):
* gst/mxf/mxfdemux.c:
* gst/mxf/mxfmetadata.c: (mxf_metadata_source_package_resolve),
(mxf_metadata_generic_picture_essence_descriptor_set_caps),
(mxf_metadata_generic_sound_essence_descriptor_set_caps):
* gst/mxf/mxfmetadata.h:
* gst/mxf/mxfmpeg.c: (mxf_mpeg_es_create_caps):
Add mxf_metadata_generic_sound_essence_descriptor_set_caps() to
set rate and channels and use this for all sound essence.
Give some debug output when setting picture essence caps with
invalid descriptor values.
Fix height calculation from the frame layout a bit more and
add a TODO to check if it's really correct now or if it needs
more fixing (especially, does the framerate need adjustments?).
Modified files:
. : ChangeLog
gst/mxf : mxfaes-bwf.c mxfalaw.c mxfd10.c mxfdemux.c
mxfmetadata.c mxfmetadata.h mxfmpeg.c
Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3823&r2=1.3824
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.c.diff?r1=1.12&r2=1.13
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.c.diff?r1=1.6&r2=1.7
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfd10.c.diff?r1=1.5&r2=1.6
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c.diff?r1=1.41&r2=1.42
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfmetadata.c.diff?r1=1.3&r2=1.4
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfmetadata.h.diff?r1=1.2&r2=1.3
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.c.diff?r1=1.13&r2=1.14
====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3823
retrieving revision 1.3824
diff -u -d -r1.3823 -r1.3824
--- ChangeLog 18 Dec 2008 17:49:05 -0000 1.3823
+++ ChangeLog 19 Dec 2008 10:06:22 -0000 1.3824
@@ -1,3 +1,25 @@
+2008-12-19 Sebastian Dröge <[email protected]>
+
+ * gst/mxf/mxfaes-bwf.c: (mxf_bwf_create_caps),
+ (mxf_aes3_create_caps):
+ * gst/mxf/mxfalaw.c: (mxf_alaw_create_caps):
+ * gst/mxf/mxfd10.c: (mxf_d10_create_caps):
+ * gst/mxf/mxfdemux.c:
+ * gst/mxf/mxfmetadata.c: (mxf_metadata_source_package_resolve),
+ (mxf_metadata_generic_picture_essence_descriptor_set_caps),
+ (mxf_metadata_generic_sound_essence_descriptor_set_caps):
+ * gst/mxf/mxfmetadata.h:
+ * gst/mxf/mxfmpeg.c: (mxf_mpeg_es_create_caps):
+ Add mxf_metadata_generic_sound_essence_descriptor_set_caps() to
+ set rate and channels and use this for all sound essence.
+ Give some debug output when setting picture essence caps with
+ invalid descriptor values.
+ Fix height calculation from the frame layout a bit more and
+ add a TODO to check if it's really correct now or if it needs
+ more fixing (especially, does the framerate need adjustments?).
2008-12-18 Sebastian Dröge <[email protected]>
* gst/mxf/Makefile.am:
Index: mxfaes-bwf.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfaes-bwf.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- mxfaes-bwf.c 16 Dec 2008 12:30:32 -0000 1.12
+++ mxfaes-bwf.c 19 Dec 2008 10:06:23 -0000 1.13
@@ -664,14 +664,13 @@
descriptor->channel_count) / 8;
ret = gst_caps_new_simple ("audio/x-raw-int",
- "rate", G_TYPE_INT,
- (gint) (((gdouble) descriptor->audio_sampling_rate.n) /
- ((gdouble) descriptor->audio_sampling_rate.d) + 0.5), "channels",
- G_TYPE_INT, descriptor->channel_count, "signed", G_TYPE_BOOLEAN,
+ "signed", G_TYPE_BOOLEAN,
(block_align != 1), "endianness", G_TYPE_INT, G_LITTLE_ENDIAN, "depth",
G_TYPE_INT, (block_align / descriptor->channel_count) * 8, "width",
G_TYPE_INT, (block_align / descriptor->channel_count) * 8, NULL);
+ mxf_metadata_generic_sound_essence_descriptor_set_caps (descriptor, ret);
codec_name =
g_strdup_printf ("Uncompressed %u-bit little endian integer PCM audio",
(block_align / descriptor->channel_count) * 8);
@@ -695,14 +694,13 @@
(block_align != 1), "endianness", G_TYPE_INT, G_BIG_ENDIAN, "depth",
g_strdup_printf ("Uncompressed %u-bit big endian integer PCM audio",
@@ -715,10 +713,9 @@
GST_ERROR ("Invalid descriptor");
return NULL;
}
- ret = gst_caps_new_simple ("audio/x-alaw", "rate", G_TYPE_INT,
- ((gdouble) descriptor->audio_sampling_rate.d) + 0.5),
- "channels", G_TYPE_INT, descriptor->channel_count);
+ ret = gst_caps_new_simple ("audio/x-alaw", NULL);
codec_name = g_strdup ("A-law encoded audio");
} else {
GST_ERROR ("Unsupported sound essence compression: %s",
@@ -773,14 +770,13 @@
descriptor->channel_count) / 8;
ret = gst_caps_new_simple ("audio/x-raw-int",
- "rate", G_TYPE_INT,
- (gint) (((gdouble) descriptor->audio_sampling_rate.n) /
- ((gdouble) descriptor->audio_sampling_rate.d) + 0.5), "channels",
- G_TYPE_INT, descriptor->channel_count, "signed", G_TYPE_BOOLEAN,
+ "signed", G_TYPE_BOOLEAN,
(block_align != 1), "endianness", G_TYPE_INT, G_LITTLE_ENDIAN, "depth",
G_TYPE_INT, (block_align / descriptor->channel_count) * 8, "width",
G_TYPE_INT, (block_align / descriptor->channel_count) * 8, NULL);
+ mxf_metadata_generic_sound_essence_descriptor_set_caps (descriptor, ret);
codec_name =
g_strdup_printf ("Uncompressed %u-bit AES3 audio",
(block_align / descriptor->channel_count) * 8);
@@ -816,24 +812,24 @@
if (!track->parent.descriptor[i])
continue;
- if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
- descriptor[i])
+ if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i])
&& (track->parent.descriptor[i]->essence_container.u[14] == 0x01
|| track->parent.descriptor[i]->essence_container.u[14] == 0x02
|| track->parent.descriptor[i]->essence_container.u[14] == 0x08)) {
- s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent.
- descriptor[i];
+ s = (MXFMetadataGenericSoundEssenceDescriptor *) track->
+ parent.descriptor[i];
bwf = TRUE;
break;
} else
- if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
+ if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
&& (track->parent.descriptor[i]->essence_container.u[14] == 0x03
|| track->parent.descriptor[i]->essence_container.u[14] == 0x04
|| track->parent.descriptor[i]->essence_container.u[14] == 0x09)) {
bwf = FALSE;
Index: mxfalaw.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfalaw.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- mxfalaw.c 16 Dec 2008 12:30:32 -0000 1.6
+++ mxfalaw.c 19 Dec 2008 10:06:23 -0000 1.7
@@ -100,10 +100,10 @@
- descriptor[i])) {
+ parent.descriptor[i])) {
}
@@ -118,10 +118,8 @@
if (s && s->audio_sampling_rate.n != 0 && s->audio_sampling_rate.d != 0 &&
s->channel_count != 0) {
- caps = gst_caps_new_simple ("audio/x-alaw", "rate", G_TYPE_INT,
- (gint) (((gdouble) s->audio_sampling_rate.n) /
- ((gdouble) s->audio_sampling_rate.d) + 0.5),
- "channels", G_TYPE_INT, s->channel_count, NULL);
+ caps = gst_caps_new_simple ("audio/x-alaw", NULL);
+ mxf_metadata_generic_sound_essence_descriptor_set_caps (s, caps);
/* TODO: Handle channel layout somehow?
* Or is alaw limited to two channels? */
Index: mxfd10.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfd10.c,v
retrieving revision 1.5
diff -u -d -r1.5 -r1.6
--- mxfd10.c 16 Dec 2008 12:30:33 -0000 1.5
+++ mxfd10.c 19 Dec 2008 10:06:23 -0000 1.6
@@ -175,15 +175,15 @@
- if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
- parent.descriptor[i])) {
- p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent.
+ if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
+ descriptor[i])) {
+ p = (MXFMetadataGenericPictureEssenceDescriptor *) track->
- } else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
+ } else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
@@ -214,14 +214,13 @@
/* FIXME: set channel layout */
caps = gst_caps_new_simple ("audio/x-raw-int",
- ((gdouble) s->audio_sampling_rate.d) + 0.5), "channels",
- G_TYPE_INT, s->channel_count, "signed", G_TYPE_BOOLEAN,
(s->quantization_bits != 8), "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
"depth", G_TYPE_INT, s->quantization_bits, "width", G_TYPE_INT,
s->quantization_bits, NULL);
*handler = mxf_d10_sound_handle_essence_element;
data = g_new0 (MXFD10AudioMappingData, 1);
Index: mxfdemux.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfdemux.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- mxfdemux.c 17 Dec 2008 12:06:43 -0000 1.41
+++ mxfdemux.c 19 Dec 2008 10:06:23 -0000 1.42
@@ -54,6 +54,7 @@
* - Multichannel audio needs channel layouts, define them (SMPTE S320M?).
* - Correctly handle the different rectangles and aspect-ratio for video
* - Add support for non-standard MXF used by Avid (bug #561922).
+ * - Fix frame layout stuff, i.e. interlaced/progressive
*
* - Implement SMPTE D11 essence and the digital cinema/MXF specs
@@ -554,11 +555,11 @@
for (i = 0; i < demux->preface->content_storage->n_packages; i++) {
if (demux->preface->content_storage->packages[i] &&
- MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->content_storage->
- packages[i])) {
+ MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->
+ content_storage->packages[i])) {
ret =
- MXF_METADATA_GENERIC_PACKAGE (demux->preface->content_storage->
- packages[i]);
+ MXF_METADATA_GENERIC_PACKAGE (demux->preface->
+ content_storage->packages[i]);
Index: mxfmetadata.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfmetadata.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mxfmetadata.c 16 Dec 2008 08:21:28 -0000 1.3
+++ mxfmetadata.c 19 Dec 2008 10:06:23 -0000 1.4
@@ -1301,6 +1301,10 @@
+ /* TODO: Check if there is a EssenceContainerData for this source package
+ * and store this in the source package instance. Without
+ * EssenceContainerData this package must be external */
return ret;
}
@@ -2628,8 +2632,12 @@
g_return_if_fail (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (self));
g_return_if_fail (GST_IS_CAPS (caps));
- gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, f->sample_rate.n,
- f->sample_rate.d, NULL);
+ if (f->sample_rate.d == 0) {
+ GST_ERROR ("Invalid framerate");
+ } else {
+ gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, f->sample_rate.n,
+ f->sample_rate.d, NULL);
+ }
width = self->stored_width;
height = self->stored_height;
@@ -2640,17 +2648,22 @@
*
* See SMPTE 377M E2.2 and E1.2
*/
- if (self->frame_layout != 0)
+ if (self->frame_layout == 1 || self->frame_layout == 2
+ || self->frame_layout == 4)
height *= 2;
- if (width == 0 || height == 0)
+ if (width == 0 || height == 0) {
+ GST_ERROR ("Invalid width/height");
return;
gst_caps_set_simple (caps, "width", G_TYPE_INT, width, "height", G_TYPE_INT,
height, NULL);
- if (self->aspect_ratio.n == 0 || self->aspect_ratio.d == 0)
+ if (self->aspect_ratio.n == 0 || self->aspect_ratio.d == 0) {
+ GST_ERROR ("Invalid aspect ratio");
par_n = height * self->aspect_ratio.n;
par_d = width * self->aspect_ratio.d;
@@ -2761,6 +2774,29 @@
mxf_metadata_generic_sound_essence_descriptor_handle_tag;
+void mxf_metadata_generic_sound_essence_descriptor_set_caps
+ (MXFMetadataGenericSoundEssenceDescriptor * self, GstCaps * caps)
+{
+ g_return_if_fail (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (self));
+ g_return_if_fail (GST_IS_CAPS (caps));
+ if (self->audio_sampling_rate.n == 0 || self->audio_sampling_rate.d == 0) {
+ GST_ERROR ("Invalid audio sampling rate");
+ gst_caps_set_simple (caps,
+ "rate", G_TYPE_INT,
+ (gint) ((((gdouble) self->audio_sampling_rate.n) /
+ ((gdouble) self->audio_sampling_rate.d)) + 0.5), NULL);
+ if (self->channel_count == 0) {
+ GST_ERROR ("Invalid number of channels (0)");
+ gst_caps_set_simple (caps, "channels", G_TYPE_INT, self->channel_count,
+ NULL);
+}
G_DEFINE_TYPE (MXFMetadataCDCIPictureEssenceDescriptor,
mxf_metadata_cdci_picture_essence_descriptor,
MXF_TYPE_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR);
Index: mxfmetadata.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfmetadata.h,v
retrieving revision 1.2
diff -u -d -r1.2 -r1.3
--- mxfmetadata.h 16 Dec 2008 08:21:29 -0000 1.2
+++ mxfmetadata.h 19 Dec 2008 10:06:24 -0000 1.3
@@ -699,5 +699,6 @@
MXFMetadataTrackType mxf_metadata_track_identifier_parse (const MXFUL * track_identifier);
void mxf_metadata_generic_picture_essence_descriptor_set_caps (MXFMetadataGenericPictureEssenceDescriptor * self, GstCaps * caps);
+void mxf_metadata_generic_sound_essence_descriptor_set_caps (MXFMetadataGenericSoundEssenceDescriptor * self, GstCaps * caps);
#endif /* __MXF_METADATA_H__ */
Index: mxfmpeg.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mxf/mxfmpeg.c,v
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- mxfmpeg.c 16 Dec 2008 12:30:33 -0000 1.13
+++ mxfmpeg.c 19 Dec 2008 10:06:24 -0000 1.14
@@ -435,14 +435,7 @@
if (caps) {
- if (s->audio_sampling_rate.n != 0 && s->audio_sampling_rate.d != 0)
- gst_caps_set_simple (caps, "rate", G_TYPE_INT,
- (gint) (((gdouble) s->audio_sampling_rate.n) /
- ((gdouble) s->audio_sampling_rate.d) + 0.5), NULL);
- if (s->channel_count != 0)
- gst_caps_set_simple (caps, "channels", G_TYPE_INT, s->channel_count,
- NULL);
-
+ mxf_metadata_generic_sound_essence_descriptor_set_caps (s, caps);
*handler = mxf_mpeg_audio_handle_essence_element;
@@ -479,17 +472,17 @@
f = track->parent.descriptor[i];
------------------------------------------------------------------------------
_______________________________________________
gstreamer-cvs-verbose mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gstreamer-cvs-verbose