diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-12-05 15:27:02 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-12-05 15:27:02 +0100 |
commit | 3dfe9b2e9e61f3f47c10df499634a8b706b7e487 (patch) | |
tree | 8f4d09be9039d3473cee70bf170cd0ae73b47d38 | |
parent | f9f050878f153fdad242cd20aaca49b8a44fe7f3 (diff) |
mxfdemux: Add function to get the essence track wrapping
-rw-r--r-- | gst/mxf/mxfaes-bwf.c | 40 | ||||
-rw-r--r-- | gst/mxf/mxfalaw.c | 37 | ||||
-rw-r--r-- | gst/mxf/mxfd10.c | 7 | ||||
-rw-r--r-- | gst/mxf/mxfdv-dif.c | 36 | ||||
-rw-r--r-- | gst/mxf/mxfessence.h | 7 | ||||
-rw-r--r-- | gst/mxf/mxfjpeg2000.c | 39 | ||||
-rw-r--r-- | gst/mxf/mxfmpeg.c | 39 | ||||
-rw-r--r-- | gst/mxf/mxfup.c | 37 | ||||
-rw-r--r-- | gst/mxf/mxfvc3.c | 39 |
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 }; |