summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2012-12-05 15:27:02 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2012-12-05 15:27:02 +0100
commit3dfe9b2e9e61f3f47c10df499634a8b706b7e487 (patch)
tree8f4d09be9039d3473cee70bf170cd0ae73b47d38
parentf9f050878f153fdad242cd20aaca49b8a44fe7f3 (diff)
mxfdemux: Add function to get the essence track wrapping
-rw-r--r--gst/mxf/mxfaes-bwf.c40
-rw-r--r--gst/mxf/mxfalaw.c37
-rw-r--r--gst/mxf/mxfd10.c7
-rw-r--r--gst/mxf/mxfdv-dif.c36
-rw-r--r--gst/mxf/mxfessence.h7
-rw-r--r--gst/mxf/mxfjpeg2000.c39
-rw-r--r--gst/mxf/mxfmpeg.c39
-rw-r--r--gst/mxf/mxfup.c37
-rw-r--r--gst/mxf/mxfvc3.c39
9 files changed, 281 insertions, 0 deletions
diff --git a/gst/mxf/mxfaes-bwf.c b/gst/mxf/mxfaes-bwf.c
index d8862d75b..e2e351b50 100644
--- a/gst/mxf/mxfaes-bwf.c
+++ b/gst/mxf/mxfaes-bwf.c
@@ -1108,6 +1108,45 @@ mxf_is_aes_bwf_essence_track (const MXFMetadataTimelineTrack * track)
return FALSE;
}
+static MXFEssenceWrapping
+mxf_aes_bwf_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ guint i;
+
+ g_return_val_if_fail (track != NULL, MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING);
+
+ if (track->parent.descriptor == NULL) {
+ GST_ERROR ("No descriptor found for this track");
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ }
+
+ for (i = 0; i < track->parent.n_descriptor; i++) {
+ if (!track->parent.descriptor[i])
+ continue;
+ if (!MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i]))
+ continue;
+
+ switch (track->parent.descriptor[i]->essence_container.u[14]) {
+ case 0x01:
+ case 0x03:
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+ break;
+ case 0x02:
+ case 0x04:
+ return MXF_ESSENCE_WRAPPING_CLIP_WRAPPING;
+ break;
+ case 0x08:
+ case 0x09:
+ default:
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ break;
+ }
+ }
+
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+}
+
static GstFlowReturn
mxf_bwf_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
GstCaps * caps,
@@ -1390,6 +1429,7 @@ mxf_aes_bwf_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_aes_bwf_essence_handler = {
mxf_is_aes_bwf_essence_track,
+ mxf_aes_bwf_get_track_wrapping,
mxf_aes_bwf_create_caps
};
diff --git a/gst/mxf/mxfalaw.c b/gst/mxf/mxfalaw.c
index a71162841..a689b6e8a 100644
--- a/gst/mxf/mxfalaw.c
+++ b/gst/mxf/mxfalaw.c
@@ -80,6 +80,42 @@ mxf_alaw_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
return GST_FLOW_OK;
}
+static MXFEssenceWrapping
+mxf_alaw_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ guint i;
+
+ g_return_val_if_fail (track != NULL, MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING);
+
+ if (track->parent.descriptor == NULL) {
+ GST_ERROR ("No descriptor found for this track");
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ }
+
+ for (i = 0; i < track->parent.n_descriptor; i++) {
+ if (!track->parent.descriptor[i])
+ continue;
+
+ if (!MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
+ descriptor[i]))
+ continue;
+
+ switch (track->parent.descriptor[i]->essence_container.u[14]) {
+ case 0x01:
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+ break;
+ case 0x02:
+ return MXF_ESSENCE_WRAPPING_CLIP_WRAPPING;
+ break;
+ case 0x03:
+ default:
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ break;
+ }
+ }
+
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+}
static GstCaps *
mxf_alaw_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
@@ -136,6 +172,7 @@ mxf_alaw_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_alaw_essence_element_handler = {
mxf_is_alaw_essence_track,
+ mxf_alaw_get_track_wrapping,
mxf_alaw_create_caps
};
diff --git a/gst/mxf/mxfd10.c b/gst/mxf/mxfd10.c
index 71e818a48..cd0b071db 100644
--- a/gst/mxf/mxfd10.c
+++ b/gst/mxf/mxfd10.c
@@ -159,6 +159,12 @@ mxf_d10_sound_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
return GST_FLOW_OK;
}
+static MXFEssenceWrapping
+mxf_d10_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+}
+
static GstCaps *
mxf_d10_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
MXFEssenceElementHandleFunc * handler, gpointer * mapping_data)
@@ -250,6 +256,7 @@ mxf_d10_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_d10_essence_element_handler = {
mxf_is_d10_essence_track,
+ mxf_d10_get_track_wrapping,
mxf_d10_create_caps
};
diff --git a/gst/mxf/mxfdv-dif.c b/gst/mxf/mxfdv-dif.c
index a239958d5..97f4f8b2a 100644
--- a/gst/mxf/mxfdv-dif.c
+++ b/gst/mxf/mxfdv-dif.c
@@ -102,6 +102,41 @@ mxf_dv_dif_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
return GST_FLOW_OK;
}
+static MXFEssenceWrapping
+mxf_dv_dif_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ guint i;
+
+ g_return_val_if_fail (track != NULL, MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING);
+
+ if (track->parent.descriptor == NULL) {
+ GST_ERROR ("No descriptor found for this track");
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ }
+
+ for (i = 0; i < track->parent.n_descriptor; i++) {
+ if (!track->parent.descriptor[i])
+ continue;
+
+ if (!MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i]))
+ continue;
+
+ switch (track->parent.descriptor[i]->essence_container.u[15]) {
+ case 0x01:
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+ break;
+ case 0x02:
+ return MXF_ESSENCE_WRAPPING_CLIP_WRAPPING;
+ break;
+ default:
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ break;
+ }
+ }
+
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+}
static GstCaps *
mxf_dv_dif_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
@@ -151,6 +186,7 @@ mxf_dv_dif_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_dv_dif_essence_element_handler = {
mxf_is_dv_dif_essence_track,
+ mxf_dv_dif_get_track_wrapping,
mxf_dv_dif_create_caps
};
diff --git a/gst/mxf/mxfessence.h b/gst/mxf/mxfessence.h
index e5ee90c2a..0b3817c7f 100644
--- a/gst/mxf/mxfessence.h
+++ b/gst/mxf/mxfessence.h
@@ -26,10 +26,17 @@
#include "mxftypes.h"
#include "mxfmetadata.h"
+typedef enum {
+ MXF_ESSENCE_WRAPPING_FRAME_WRAPPING,
+ MXF_ESSENCE_WRAPPING_CLIP_WRAPPING,
+ MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING
+} MXFEssenceWrapping;
+
typedef GstFlowReturn (*MXFEssenceElementHandleFunc) (const MXFUL *key, GstBuffer *buffer, GstCaps *caps, MXFMetadataTimelineTrack *track, gpointer mapping_data, GstBuffer **outbuf);
typedef struct {
gboolean (*handles_track) (const MXFMetadataTimelineTrack *track);
+ MXFEssenceWrapping (*get_track_wrapping) (const MXFMetadataTimelineTrack *track);
GstCaps * (*create_caps) (MXFMetadataTimelineTrack *track, GstTagList **tags, MXFEssenceElementHandleFunc *handler, gpointer *mapping_data);
} MXFEssenceElementHandler;
diff --git a/gst/mxf/mxfjpeg2000.c b/gst/mxf/mxfjpeg2000.c
index e9e947b3e..792c3568b 100644
--- a/gst/mxf/mxfjpeg2000.c
+++ b/gst/mxf/mxfjpeg2000.c
@@ -85,6 +85,44 @@ mxf_jpeg2000_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
return GST_FLOW_OK;
}
+static MXFEssenceWrapping
+mxf_jpeg2000_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ guint i;
+
+ g_return_val_if_fail (track != NULL, MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING);
+
+ if (track->parent.descriptor == NULL) {
+ GST_ERROR ("No descriptor found for this track");
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ }
+
+ for (i = 0; i < track->parent.n_descriptor; i++) {
+ if (!track->parent.descriptor[i])
+ continue;
+
+ if (!MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i])
+ && !(MXF_IS_METADATA_FILE_DESCRIPTOR (track->parent.descriptor[i])
+ && !MXF_IS_METADATA_MULTIPLE_DESCRIPTOR (track->
+ parent.descriptor[i])))
+ continue;
+
+ switch (track->parent.descriptor[i]->essence_container.u[14]) {
+ case 0x01:
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+ break;
+ case 0x02:
+ return MXF_ESSENCE_WRAPPING_CLIP_WRAPPING;
+ break;
+ default:
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ break;
+ }
+ }
+
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+}
static GstCaps *
mxf_jpeg2000_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
@@ -201,6 +239,7 @@ mxf_jpeg2000_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_jpeg2000_essence_element_handler = {
mxf_is_jpeg2000_essence_track,
+ mxf_jpeg2000_get_track_wrapping,
mxf_jpeg2000_create_caps
};
diff --git a/gst/mxf/mxfmpeg.c b/gst/mxf/mxfmpeg.c
index dc48b9a30..a4a4eebfa 100644
--- a/gst/mxf/mxfmpeg.c
+++ b/gst/mxf/mxfmpeg.c
@@ -764,6 +764,44 @@ mxf_mpeg_es_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
return caps;
}
+static MXFEssenceWrapping
+mxf_mpeg_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ guint i;
+
+ g_return_val_if_fail (track != NULL, MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING);
+
+ if (track->parent.descriptor == NULL) {
+ GST_ERROR ("No descriptor found for this track");
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ }
+
+ for (i = 0; i < track->parent.n_descriptor; i++) {
+ if (!track->parent.descriptor[i])
+ continue;
+
+ if (!MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i])
+ && !MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i]))
+ continue;
+
+ switch (track->parent.descriptor[i]->essence_container.u[15]) {
+ case 0x01:
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+ break;
+ case 0x02:
+ return MXF_ESSENCE_WRAPPING_CLIP_WRAPPING;
+ break;
+ default:
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ break;
+ }
+ }
+
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+}
+
static GstCaps *
mxf_mpeg_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
MXFEssenceElementHandleFunc * handler, gpointer * mapping_data)
@@ -864,6 +902,7 @@ mxf_mpeg_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_mpeg_essence_element_handler = {
mxf_is_mpeg_essence_track,
+ mxf_mpeg_get_track_wrapping,
mxf_mpeg_create_caps
};
diff --git a/gst/mxf/mxfup.c b/gst/mxf/mxfup.c
index 7d0172584..0859129a3 100644
--- a/gst/mxf/mxfup.c
+++ b/gst/mxf/mxfup.c
@@ -190,6 +190,42 @@ mxf_up_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
return GST_FLOW_OK;
}
+static MXFEssenceWrapping
+mxf_up_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ guint i;
+
+ g_return_val_if_fail (track != NULL, MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING);
+
+ if (track->parent.descriptor == NULL) {
+ GST_ERROR ("No descriptor found for this track");
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ }
+
+ for (i = 0; i < track->parent.n_descriptor; i++) {
+ if (!track->parent.descriptor[i])
+ continue;
+
+ if (!MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i]))
+ continue;
+
+ switch (track->parent.descriptor[i]->essence_container.u[15]) {
+ case 0x01:
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+ break;
+ case 0x02:
+ return MXF_ESSENCE_WRAPPING_CLIP_WRAPPING;
+ break;
+ default:
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ break;
+ }
+ }
+
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+}
+
static GstCaps *
mxf_up_rgba_create_caps (MXFMetadataTimelineTrack * track,
MXFMetadataRGBAPictureEssenceDescriptor * d, GstTagList ** tags,
@@ -343,6 +379,7 @@ mxf_up_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_up_essence_element_handler = {
mxf_is_up_essence_track,
+ mxf_up_get_track_wrapping,
mxf_up_create_caps
};
diff --git a/gst/mxf/mxfvc3.c b/gst/mxf/mxfvc3.c
index e4136d17c..19ae9b800 100644
--- a/gst/mxf/mxfvc3.c
+++ b/gst/mxf/mxfvc3.c
@@ -97,6 +97,44 @@ mxf_vc3_handle_essence_element (const MXFUL * key, GstBuffer * buffer,
return GST_FLOW_OK;
}
+static MXFEssenceWrapping
+mxf_vc3_get_track_wrapping (const MXFMetadataTimelineTrack * track)
+{
+ guint i;
+
+ g_return_val_if_fail (track != NULL, MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING);
+
+ if (track->parent.descriptor == NULL) {
+ GST_ERROR ("No descriptor found for this track");
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ }
+
+ for (i = 0; i < track->parent.n_descriptor; i++) {
+ if (!track->parent.descriptor[i])
+ continue;
+
+ if (!MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[i])
+ && !(MXF_IS_METADATA_FILE_DESCRIPTOR (track->parent.descriptor[i])
+ && !MXF_IS_METADATA_MULTIPLE_DESCRIPTOR (track->
+ parent.descriptor[i])))
+ continue;
+
+ switch (track->parent.descriptor[i]->essence_container.u[15]) {
+ case 0x01:
+ return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
+ break;
+ case 0x02:
+ return MXF_ESSENCE_WRAPPING_CLIP_WRAPPING;
+ break;
+ default:
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+ break;
+ }
+ }
+
+ return MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING;
+}
static GstCaps *
mxf_vc3_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
@@ -154,6 +192,7 @@ mxf_vc3_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
static const MXFEssenceElementHandler mxf_vc3_essence_element_handler = {
mxf_is_vc3_essence_track,
+ mxf_vc3_get_track_wrapping,
mxf_vc3_create_caps
};