Implement parsing of DMS1 (SMPTE S380M)

This commit is contained in:
Sebastian Dröge 2009-01-22 11:37:22 +01:00
parent 1b49a094fe
commit cd80f534f5
12 changed files with 7261 additions and 187 deletions

View file

@ -31,6 +31,7 @@
#include "mxfd10.h"
#include "mxfup.h"
#include "mxfvc3.h"
#include "mxfdms1.h"
GST_DEBUG_CATEGORY (mxf_debug);
#define GST_CAT_DEFAULT mxf_debug
@ -47,6 +48,7 @@ plugin_init (GstPlugin * plugin)
mxf_d10_init ();
mxf_up_init ();
mxf_vc3_init ();
mxf_dms1_initialize ();
if (!gst_element_register (plugin, "mxfdemux", GST_RANK_PRIMARY,
GST_TYPE_MXF_DEMUX))

View file

@ -100,10 +100,10 @@ mxf_alaw_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
if (!track->parent.descriptor[i])
continue;
if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent.
descriptor[i];
if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->
parent.descriptor[i];
break;
}
}

View file

@ -173,15 +173,15 @@ mxf_d10_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
if (!track->parent.descriptor[i])
continue;
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->
parent.descriptor[i];
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent.
descriptor[i];
break;
} else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->
parent.descriptor[i];
} else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent.
descriptor[i];
break;
}
}

View file

@ -558,11 +558,11 @@ gst_mxf_demux_choose_package (GstMXFDemux * demux)
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]);
break;
}
}
@ -908,6 +908,7 @@ gst_mxf_demux_handle_descriptive_metadata (GstMXFDemux * demux,
guint32 type;
guint8 scheme;
GstFlowReturn ret = GST_FLOW_OK;
MXFDescriptiveMetadata *m = NULL;
scheme = GST_READ_UINT8 (key->u + 12);
type = GST_READ_UINT24_BE (key->u + 13);
@ -933,14 +934,23 @@ gst_mxf_demux_handle_descriptive_metadata (GstMXFDemux * demux,
return GST_FLOW_OK;
}
switch (type) {
default:
GST_WARNING_OBJECT (demux,
"Unknown or unhandled descriptive metadata of scheme 0x%02x and type 0x%06x",
scheme, type);
break;
m = mxf_descriptive_metadata_new (scheme, type, &demux->primer,
GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer));
if (!m) {
GST_WARNING_OBJECT (demux,
"Unknown or unhandled descriptive metadata of scheme 0x%02x and type 0x%06x",
scheme, type);
return GST_FLOW_OK;
}
if (!demux->metadata)
demux->metadata = g_ptr_array_new ();
g_ptr_array_add (demux->metadata, m);
return ret;
}
@ -975,8 +985,8 @@ gst_mxf_demux_pad_next_component (GstMXFDemux * demux, GstMXFDemuxPad * pad)
GST_DEBUG_OBJECT (demux, "Switching to component %u", pad->current_component);
pad->component =
MXF_METADATA_SOURCE_CLIP (sequence->structural_components[pad->
current_component]);
MXF_METADATA_SOURCE_CLIP (sequence->
structural_components[pad->current_component]);
if (pad->component == NULL) {
GST_ERROR_OBJECT (demux, "No such structural component");
return GST_FLOW_ERROR;
@ -984,8 +994,8 @@ gst_mxf_demux_pad_next_component (GstMXFDemux * demux, GstMXFDemuxPad * pad)
if (!pad->component->source_package
|| !pad->component->source_package->top_level
|| !MXF_METADATA_GENERIC_PACKAGE (pad->component->
source_package)->tracks) {
|| !MXF_METADATA_GENERIC_PACKAGE (pad->component->source_package)->
tracks) {
GST_ERROR_OBJECT (demux, "Invalid component");
return GST_FLOW_ERROR;
}

File diff suppressed because it is too large Load diff

View file

@ -17,11 +17,917 @@
* Boston, MA 02111-1307, USA.
*/
/* Implementation of SMPTE S380M - Descriptive Metadata Scheme-1 */
/* Implementation of SMPTE S380M - Descriptive Scheme-1 */
#ifndef __MXF_DMS1_H__
#define __MXF_DMS1_H__
#ifndef _MXF_DMS1_H_
#define _MXF_DMS1_H_
#include <gst/gst.h>
#include "mxfmetadata.h"
#define MXF_TYPE_DMS1 \
(mxf_dms1_get_type())
#define MXF_DMS1(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1, MXFDMS1))
#define MXF_IS_DMS1(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1))
typedef struct _MXFDMS1 MXFDMS1;
typedef MXFDescriptiveMetadataClass MXFDMS1Class;
GType mxf_dms1_get_type (void);
#endif /* __MXF_DMS1_H__ */
#define MXF_TYPE_DMS1_TEXT_LANGUAGE \
(mxf_dms1_text_language_get_type())
#define MXF_DMS1_TEXT_LANGUAGE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_TEXT_LANGUAGE, MXFDMS1TextLanguage))
#define MXF_IS_DMS1_TEXT_LANGUAGE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_TEXT_LANGUAGE))
typedef struct _MXFDMS1TextLanguage MXFDMS1TextLanguage;
typedef MXFDescriptiveMetadataClass MXFDMS1TextLanguageClass;
GType mxf_dms1_text_language_get_type (void);
#define MXF_TYPE_DMS1_THESAURUS \
(mxf_dms1_thesaurus_get_type())
#define MXF_DMS1_THESAURUS(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_THESAURUS, MXFDMS1Thesaurus))
#define MXF_IS_DMS1_THESAURUS(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_THESAURUS))
typedef struct _MXFDMS1Thesaurus MXFDMS1Thesaurus;
typedef MXFDescriptiveMetadataClass MXFDMS1ThesaurusClass;
GType mxf_dms1_thesaurus_get_type (void);
#define MXF_TYPE_DMS1_FRAMEWORK \
(mxf_dms1_framework_get_type())
#define MXF_DMS1_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_FRAMEWORK, MXFDMS1Framework))
#define MXF_IS_DMS1_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_FRAMEWORK))
typedef struct _MXFDMS1Framework MXFDMS1Framework;
typedef MXFDescriptiveMetadataClass MXFDMS1FrameworkClass;
GType mxf_dms1_framework_get_type (void);
#define MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK \
(mxf_dms1_production_clip_framework_get_type())
#define MXF_DMS1_PRODUCTION_CLIP_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK, MXFDMS1ProductionClipFramework))
#define MXF_IS_DMS1_PRODUCTION_CLIP_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK))
typedef struct _MXFDMS1ProductionClipFramework MXFDMS1ProductionClipFramework;
typedef MXFDescriptiveMetadataClass MXFDMS1ProductionClipFrameworkClass;
GType mxf_dms1_production_clip_framework_get_type (void);
#define MXF_TYPE_DMS1_PRODUCTION_FRAMEWORK \
(mxf_dms1_production_framework_get_type())
#define MXF_DMS1_PRODUCTION_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PRODUCTION_FRAMEWORK, MXFDMS1ProductionFramework))
#define MXF_IS_DMS1_PRODUCTION_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PRODUCTION_FRAMEWORK))
typedef struct _MXFDMS1ProductionFramework MXFDMS1ProductionFramework;
typedef MXFDescriptiveMetadataClass MXFDMS1ProductionFrameworkClass;
GType mxf_dms1_production_framework_get_type (void);
#define MXF_TYPE_DMS1_CLIP_FRAMEWORK \
(mxf_dms1_clip_framework_get_type())
#define MXF_DMS1_CLIP_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CLIP_FRAMEWORK, MXFDMS1ClipFramework))
#define MXF_IS_DMS1_CLIP_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CLIP_FRAMEWORK))
typedef struct _MXFDMS1ClipFramework MXFDMS1ClipFramework;
typedef MXFDescriptiveMetadataClass MXFDMS1ClipFrameworkClass;
GType mxf_dms1_clip_framework_get_type (void);
#define MXF_TYPE_DMS1_SCENE_FRAMEWORK \
(mxf_dms1_scene_framework_get_type())
#define MXF_DMS1_SCENE_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SCENE_FRAMEWORK, MXFDMS1SceneFramework))
#define MXF_IS_DMS1_SCENE_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SCENE_FRAMEWORK))
typedef struct _MXFDMS1SceneFramework MXFDMS1SceneFramework;
typedef MXFDescriptiveMetadataClass MXFDMS1SceneFrameworkClass;
GType mxf_dms1_scene_framework_get_type (void);
#define MXF_TYPE_DMS1_TITLES \
(mxf_dms1_titles_get_type())
#define MXF_DMS1_TITLES(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_TITLES, MXFDMS1Titles))
#define MXF_IS_DMS1_TITLES(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_TITLES))
typedef struct _MXFDMS1Titles MXFDMS1Titles;
typedef MXFDescriptiveMetadataClass MXFDMS1TitlesClass;
GType mxf_dms1_titles_get_type (void);
#define MXF_TYPE_DMS1_IDENTIFICATION \
(mxf_dms1_identification_get_type())
#define MXF_DMS1_IDENTIFICATION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_IDENTIFICATION, MXFDMS1Identification))
#define MXF_IS_DMS1_IDENTIFICATION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_IDENTIFICATION))
typedef struct _MXFDMS1Identification MXFDMS1Identification;
typedef MXFDescriptiveMetadataClass MXFDMS1IdentificationClass;
GType mxf_dms1_identification_get_type (void);
#define MXF_TYPE_DMS1_GROUP_RELATIONSHIP \
(mxf_dms1_group_relationship_get_type())
#define MXF_DMS1_GROUP_RELATIONSHIP(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_GROUP_RELATIONSHIP, MXFDMS1GroupRelationship))
#define MXF_IS_DMS1_GROUP_RELATIONSHIP(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_GROUP_RELATIONSHIP))
typedef struct _MXFDMS1GroupRelationship MXFDMS1GroupRelationship;
typedef MXFDescriptiveMetadataClass MXFDMS1GroupRelationshipClass;
GType mxf_dms1_group_relationship_get_type (void);
#define MXF_TYPE_DMS1_BRANDING \
(mxf_dms1_branding_get_type())
#define MXF_DMS1_BRANDING(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_BRANDING, MXFDMS1Branding))
#define MXF_IS_DMS1_BRANDING(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_BRANDING))
typedef struct _MXFDMS1Branding MXFDMS1Branding;
typedef MXFDescriptiveMetadataClass MXFDMS1BrandingClass;
GType mxf_dms1_branding_get_type (void);
#define MXF_TYPE_DMS1_EVENT \
(mxf_dms1_event_get_type())
#define MXF_DMS1_EVENT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_EVENT, MXFDMS1Event))
#define MXF_IS_DMS1_EVENT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_EVENT))
typedef struct _MXFDMS1Event MXFDMS1Event;
typedef MXFDescriptiveMetadataClass MXFDMS1EventClass;
GType mxf_dms1_event_get_type (void);
#define MXF_TYPE_DMS1_PUBLICATION \
(mxf_dms1_publication_get_type())
#define MXF_DMS1_PUBLICATION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PUBLICATION, MXFDMS1Publication))
#define MXF_IS_DMS1_PUBLICATION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PUBLICATION))
typedef struct _MXFDMS1Publication MXFDMS1Publication;
typedef MXFDescriptiveMetadataClass MXFDMS1PublicationClass;
GType mxf_dms1_publication_get_type (void);
#define MXF_TYPE_DMS1_AWARD \
(mxf_dms1_award_get_type())
#define MXF_DMS1_AWARD(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_AWARD, MXFDMS1Award))
#define MXF_IS_DMS1_AWARD(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_AWARD))
typedef struct _MXFDMS1Award MXFDMS1Award;
typedef MXFDescriptiveMetadataClass MXFDMS1AwardClass;
GType mxf_dms1_award_get_type (void);
#define MXF_TYPE_DMS1_CAPTIONS_DESCRIPTION \
(mxf_dms1_captions_description_get_type())
#define MXF_DMS1_CAPTIONS_DESCRIPTION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CAPTIONS_DESCRIPTION, MXFDMS1CaptionsDescription))
#define MXF_IS_DMS1_CAPTIONS_DESCRIPTION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CAPTIONS_DESCRIPTION))
typedef struct _MXFDMS1CaptionsDescription MXFDMS1CaptionsDescription;
typedef MXFDescriptiveMetadataClass MXFDMS1CaptionsDescriptionClass;
GType mxf_dms1_captions_description_get_type (void);
#define MXF_TYPE_DMS1_ANNOTATION \
(mxf_dms1_annotation_get_type())
#define MXF_DMS1_ANNOTATION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_ANNOTATION, MXFDMS1Annotation))
#define MXF_IS_DMS1_ANNOTATION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_ANNOTATION))
typedef struct _MXFDMS1Annotation MXFDMS1Annotation;
typedef MXFDescriptiveMetadataClass MXFDMS1AnnotationClass;
GType mxf_dms1_annotation_get_type (void);
#define MXF_TYPE_DMS1_SETTING_PERIOD \
(mxf_dms1_setting_period_get_type())
#define MXF_DMS1_SETTING_PERIOD(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SETTING_PERIOD, MXFDMS1SettingPeriod))
#define MXF_IS_DMS1_SETTING_PERIOD(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SETTING_PERIOD))
typedef struct _MXFDMS1SettingPeriod MXFDMS1SettingPeriod;
typedef MXFDescriptiveMetadataClass MXFDMS1SettingPeriodClass;
GType mxf_dms1_setting_period_get_type (void);
#define MXF_TYPE_DMS1_SCRIPTING \
(mxf_dms1_scripting_get_type())
#define MXF_DMS1_SCRIPTING(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SCRIPTING, MXFDMS1Scripting))
#define MXF_IS_DMS1_SCRIPTING(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SCRIPTING))
typedef struct _MXFDMS1Scripting MXFDMS1Scripting;
typedef MXFDescriptiveMetadataClass MXFDMS1ScriptingClass;
GType mxf_dms1_scripting_get_type (void);
#define MXF_TYPE_DMS1_CLASSIFICATION \
(mxf_dms1_classification_get_type())
#define MXF_DMS1_CLASSIFICATION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CLASSIFICATION, MXFDMS1Classification))
#define MXF_IS_DMS1_CLASSIFICATION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CLASSIFICATION))
typedef struct _MXFDMS1Classification MXFDMS1Classification;
typedef MXFDescriptiveMetadataClass MXFDMS1ClassificationClass;
GType mxf_dms1_classification_get_type (void);
#define MXF_TYPE_DMS1_SHOT \
(mxf_dms1_shot_get_type())
#define MXF_DMS1_SHOT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SHOT, MXFDMS1Shot))
#define MXF_IS_DMS1_SHOT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SHOT))
typedef struct _MXFDMS1Shot MXFDMS1Shot;
typedef MXFDescriptiveMetadataClass MXFDMS1ShotClass;
GType mxf_dms1_shot_get_type (void);
#define MXF_TYPE_DMS1_KEY_POINT \
(mxf_dms1_key_point_get_type())
#define MXF_DMS1_KEY_POINT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_KEY_POINT, MXFDMS1KeyPoint))
#define MXF_IS_DMS1_KEY_POINT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_KEY_POINT))
typedef struct _MXFDMS1KeyPoint MXFDMS1KeyPoint;
typedef MXFDescriptiveMetadataClass MXFDMS1KeyPointClass;
GType mxf_dms1_key_point_get_type (void);
#define MXF_TYPE_DMS1_PARTICIPANT \
(mxf_dms1_participant_get_type())
#define MXF_DMS1_PARTICIPANT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PARTICIPANT, MXFDMS1Participant))
#define MXF_IS_DMS1_PARTICIPANT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PARTICIPANT))
typedef struct _MXFDMS1Participant MXFDMS1Participant;
typedef MXFDescriptiveMetadataClass MXFDMS1ParticipantClass;
GType mxf_dms1_participant_get_type (void);
#define MXF_TYPE_DMS1_CONTACT \
(mxf_dms1_contact_get_type())
#define MXF_DMS1_CONTACT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CONTACT, MXFDMS1Contact))
#define MXF_IS_DMS1_CONTACT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CONTACT))
typedef struct _MXFDMS1Contact MXFDMS1Contact;
typedef MXFDescriptiveMetadataClass MXFDMS1ContactClass;
GType mxf_dms1_contact_get_type (void);
#define MXF_TYPE_DMS1_PERSON \
(mxf_dms1_person_get_type())
#define MXF_DMS1_PERSON(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PERSON, MXFDMS1Person))
#define MXF_IS_DMS1_PERSON(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PERSON))
typedef struct _MXFDMS1Person MXFDMS1Person;
typedef MXFDescriptiveMetadataClass MXFDMS1PersonClass;
GType mxf_dms1_person_get_type (void);
#define MXF_TYPE_DMS1_ORGANISATION \
(mxf_dms1_organisation_get_type())
#define MXF_DMS1_ORGANISATION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_ORGANISATION, MXFDMS1Organisation))
#define MXF_IS_DMS1_ORGANISATION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_ORGANISATION))
typedef struct _MXFDMS1Organisation MXFDMS1Organisation;
typedef MXFDescriptiveMetadataClass MXFDMS1OrganisationClass;
GType mxf_dms1_organisation_get_type (void);
#define MXF_TYPE_DMS1_LOCATION \
(mxf_dms1_location_get_type())
#define MXF_DMS1_LOCATION(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_LOCATION, MXFDMS1Location))
#define MXF_IS_DMS1_LOCATION(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_LOCATION))
typedef struct _MXFDMS1Location MXFDMS1Location;
typedef MXFDescriptiveMetadataClass MXFDMS1LocationClass;
GType mxf_dms1_location_get_type (void);
#define MXF_TYPE_DMS1_ADDRESS \
(mxf_dms1_address_get_type())
#define MXF_DMS1_ADDRESS(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_ADDRESS, MXFDMS1Address))
#define MXF_IS_DMS1_ADDRESS(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_ADDRESS))
typedef struct _MXFDMS1Address MXFDMS1Address;
typedef MXFDescriptiveMetadataClass MXFDMS1AddressClass;
GType mxf_dms1_address_get_type (void);
#define MXF_TYPE_DMS1_COMMUNICATIONS \
(mxf_dms1_communications_get_type())
#define MXF_DMS1_COMMUNICATIONS(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_COMMUNICATIONS, MXFDMS1Communications))
#define MXF_IS_DMS1_COMMUNICATIONS(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_COMMUNICATIONS))
typedef struct _MXFDMS1Communications MXFDMS1Communications;
typedef MXFDescriptiveMetadataClass MXFDMS1CommunicationsClass;
GType mxf_dms1_communications_get_type (void);
#define MXF_TYPE_DMS1_CONTRACT \
(mxf_dms1_contract_get_type())
#define MXF_DMS1_CONTRACT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CONTRACT, MXFDMS1Contract))
#define MXF_IS_DMS1_CONTRACT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CONTRACT))
typedef struct _MXFDMS1Contract MXFDMS1Contract;
typedef MXFDescriptiveMetadataClass MXFDMS1ContractClass;
GType mxf_dms1_contract_get_type (void);
#define MXF_TYPE_DMS1_RIGHTS \
(mxf_dms1_rights_get_type())
#define MXF_DMS1_RIGHTS(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_RIGHTS, MXFDMS1Rights))
#define MXF_IS_DMS1_RIGHTS(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_RIGHTS))
typedef struct _MXFDMS1Rights MXFDMS1Rights;
typedef MXFDescriptiveMetadataClass MXFDMS1RightsClass;
GType mxf_dms1_rights_get_type (void);
#define MXF_TYPE_DMS1_PICTURE_FORMAT \
(mxf_dms1_picture_format_get_type())
#define MXF_DMS1_PICTURE_FORMAT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PICTURE_FORMAT, MXFDMS1PictureFormat))
#define MXF_IS_DMS1_PICTURE_FORMAT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PICTURE_FORMAT))
typedef struct _MXFDMS1PictureFormat MXFDMS1PictureFormat;
typedef MXFDescriptiveMetadataClass MXFDMS1PictureFormatClass;
GType mxf_dms1_picture_format_get_type (void);
#define MXF_TYPE_DMS1_DEVICE_PARAMETERS \
(mxf_dms1_device_parameters_get_type())
#define MXF_DMS1_DEVICE_PARAMETERS(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_DEVICE_PARAMETERS, MXFDMS1DeviceParameters))
#define MXF_IS_DMS1_DEVICE_PARAMETERS(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_DEVICE_PARAMETERS))
typedef struct _MXFDMS1DeviceParameters MXFDMS1DeviceParameters;
typedef MXFDescriptiveMetadataClass MXFDMS1DeviceParametersClass;
GType mxf_dms1_device_parameters_get_type (void);
#define MXF_TYPE_DMS1_NAME_VALUE \
(mxf_dms1_name_value_get_type())
#define MXF_DMS1_NAME_VALUE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_NAME_VALUE, MXFDMS1NameValue))
#define MXF_IS_DMS1_NAME_VALUE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_NAME_VALUE))
typedef struct _MXFDMS1NameValue MXFDMS1NameValue;
typedef MXFDescriptiveMetadataClass MXFDMS1NameValueClass;
GType mxf_dms1_name_value_get_type (void);
#define MXF_TYPE_DMS1_PROCESSING \
(mxf_dms1_processing_get_type())
#define MXF_DMS1_PROCESSING(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PROCESSING, MXFDMS1Processing))
#define MXF_IS_DMS1_PROCESSING(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PROCESSING))
typedef struct _MXFDMS1Processing MXFDMS1Processing;
typedef MXFDescriptiveMetadataClass MXFDMS1ProcessingClass;
GType mxf_dms1_processing_get_type (void);
#define MXF_TYPE_DMS1_PROJECT \
(mxf_dms1_project_get_type())
#define MXF_DMS1_PROJECT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PROJECT, MXFDMS1Project))
#define MXF_IS_DMS1_PROJECT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PROJECT))
typedef struct _MXFDMS1Project MXFDMS1Project;
typedef MXFDescriptiveMetadataClass MXFDMS1ProjectClass;
GType mxf_dms1_project_get_type (void);
#define MXF_TYPE_DMS1_CONTACTS_LIST \
(mxf_dms1_contacts_list_get_type())
#define MXF_DMS1_CONTACTS_LIST(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CONTACTS_LIST, MXFDMS1ContactsList))
#define MXF_IS_DMS1_CONTACTS_LIST(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CONTACTS_LIST))
typedef struct _MXFDMS1ContactsList MXFDMS1ContactsList;
typedef MXFDescriptiveMetadataClass MXFDMS1ContactsListClass;
GType mxf_dms1_contacts_list_get_type (void);
#define MXF_TYPE_DMS1_CUE_WORDS \
(mxf_dms1_cue_words_get_type())
#define MXF_DMS1_CUE_WORDS(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CUE_WORDS, MXFDMS1CueWords))
#define MXF_IS_DMS1_CUE_WORDS(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CUE_WORDS))
typedef struct _MXFDMS1CueWords MXFDMS1CueWords;
typedef MXFDescriptiveMetadataClass MXFDMS1CueWordsClass;
GType mxf_dms1_cue_words_get_type (void);
struct _MXFDMS1 {
MXFDescriptiveMetadata parent;
};
struct _MXFDMS1TextLanguage {
MXFDMS1 parent;
gchar extended_text_language_code[13];
};
struct _MXFDMS1Thesaurus {
MXFDMS1TextLanguage parent;
gchar *thesaurus_name;
};
struct _MXFDMS1Framework {
MXFDMS1 parent;
gchar framework_extended_text_language_code[13];
gchar *framework_thesaurus_name;
gchar *framework_title;
gchar primary_extended_spoken_language_code[13];
gchar secondary_extended_spoken_language_code[13];
gchar original_extended_spoken_language_code[13];
guint32 n_metadata_server_locators;
MXFUL *metadata_server_locators_uids;
/* TODO */
guint32 n_titles_sets;
MXFUL *titles_sets_uids;
MXFDMS1Titles **titles_sets;
guint32 n_annotations_sets;
MXFUL *annotations_sets_uids;
MXFDMS1Annotation **annotations_sets;
guint32 n_participant_sets;
MXFUL *participant_sets_uids;
MXFDMS1Participant **participant_sets;
MXFUL contacts_list_set_uid;
MXFDMS1ContactsList *contacts_list_set;
guint32 n_location_sets;
MXFUL *location_sets_uids;
MXFDMS1Location **location_sets;
};
struct _MXFDMS1ProductionClipFramework {
MXFDMS1Framework parent;
MXFUL picture_format_set_uid;
MXFDMS1PictureFormat *picture_format;
guint32 n_captions_description_sets;
MXFUL *captions_description_sets_uids;
MXFDMS1CaptionsDescription **captions_description_sets;
guint32 n_contract_sets;
MXFUL *contract_sets_uids;
MXFDMS1Contract **contract_sets;
MXFUL project_set_uid;
MXFDMS1Project *project_set;
};
struct _MXFDMS1ProductionFramework {
MXFDMS1ProductionClipFramework parent;
gchar *integration_indication;
guint32 n_identification_sets;
MXFUL *identification_sets_uids;
MXFDMS1Identification **identification_sets;
guint32 n_group_relationship_sets;
MXFUL *group_relationship_sets_uids;
MXFDMS1GroupRelationship **group_relationship_sets;
guint32 n_branding_sets;
MXFUL *branding_sets_uids;
MXFDMS1Branding **branding_sets;
guint32 n_event_sets;
MXFUL *event_sets_uids;
MXFDMS1Event **event_sets;
guint32 n_award_sets;
MXFUL *award_sets_uids;
MXFDMS1Award **award_sets;
guint32 n_setting_period_sets;
MXFUL *setting_period_sets_uids;
MXFDMS1SettingPeriod **setting_period_sets;
};
struct _MXFDMS1ClipFramework {
MXFDMS1ProductionClipFramework parent;
gchar *clip_kind;
gchar clip_number[33];
guint8 extended_clip_id[64];
gboolean extended_clip_id_full;
MXFTimestamp clip_creation_date_and_time;
guint16 take_number;
gchar *slate_information;
guint32 n_scripting_sets;
MXFUL *scripting_sets_uids;
MXFDMS1Scripting **scripting_sets;
guint32 n_shot_sets;
MXFUL *shot_sets_uids;
MXFDMS1Shot **shot_sets;
guint32 n_device_parameters_sets;
MXFUL *device_parameters_sets_uids;
MXFDMS1DeviceParameters **device_parameters_sets;
MXFUL processing_set_uid;
MXFDMS1Processing *processing_set;
};
struct _MXFDMS1SceneFramework {
MXFDMS1Framework parent;
gchar scene_number[33];
guint32 n_setting_period_sets;
MXFUL *setting_period_sets_uids;
MXFDMS1SettingPeriod **setting_period_sets;
guint32 n_shot_scene_sets;
MXFUL *shot_scene_sets_uids;
MXFDMS1Shot **shot_scene_sets;
};
struct _MXFDMS1Titles {
MXFDMS1TextLanguage parent;
gchar *main_title;
gchar *secondary_title;
gchar *working_title;
gchar *original_title;
gchar *version_title;
};
struct _MXFDMS1Identification {
MXFDMS1Thesaurus parent;
gchar identifier_kind[33];
guint8 *identifier_value;
guint16 identifier_value_length;
MXFUL identification_locator;
gchar *identification_issuing_authority;
};
struct _MXFDMS1GroupRelationship {
MXFDMS1Thesaurus parent;
gchar *programming_group_kind;
gchar* programming_group_title;
gchar *group_synopsis;
guint32 numerical_position_in_sequence;
guint32 total_number_in_the_sequence;
guint16 episodic_start_number;
guint16 episodic_end_number;
};
struct _MXFDMS1Branding {
MXFDMS1TextLanguage parent;
gchar *brand_main_title;
gchar *brand_original_title;
};
struct _MXFDMS1Event {
MXFDMS1Thesaurus parent;
gchar *event_indication;
gchar event_start_date_and_time[33];
gchar event_end_date_and_time[33];
guint32 n_publication_sets;
MXFUL *publication_sets_uids;
MXFDMS1Publication **publication_sets;
guint32 n_annotation_sets;
MXFUL *annotation_sets_uids;
MXFDMS1Annotation **annotation_sets;
};
struct _MXFDMS1Publication {
MXFDMS1 parent;
gchar *publication_organisation_name;
gchar *publication_service_name;
gchar *publication_medium;
gchar *publication_region;
};
struct _MXFDMS1Award {
MXFDMS1Thesaurus parent;
gchar *festival;
gchar festival_date_and_time[33];
gchar *award_name;
gchar *award_classification;
gchar *nomination_category;
guint32 n_participant_sets;
MXFUL *participant_sets_uids;
MXFDMS1Participant **participant_sets;
};
struct _MXFDMS1CaptionsDescription {
MXFDMS1Thesaurus parent;
gchar extended_captions_language_code[13];
gchar *caption_kind;
};
struct _MXFDMS1Annotation {
MXFDMS1Thesaurus parent;
gchar *annotation_kind;
gchar *annotation_synopsis;
gchar *annotation_description;
gchar *related_material_description;
guint32 n_classification_sets;
MXFUL *classification_sets_uids;
MXFDMS1Classification **classification_sets;
MXFUL cue_words_set_uid;
MXFDMS1CueWords *cue_words_set;
guint32 n_related_material_locators;
MXFUL *related_material_locators;
/* TODO */
guint32 n_participant_sets;
MXFUL *participant_sets_uids;
MXFDMS1Participant **participant_sets;
};
struct _MXFDMS1SettingPeriod {
MXFDMS1Thesaurus parent;
MXFTimestamp setting_date_and_time;
gchar *time_period_keyword;
gchar *setting_period_description;
};
struct _MXFDMS1Scripting {
MXFDMS1Thesaurus parent;
gchar *scripting_kind;
gchar *scripting_text;
guint32 n_scripting_locators;
MXFUL *scripting_locators;
/* TODO */
};
struct _MXFDMS1Classification {
MXFDMS1Thesaurus parent;
gchar content_classification[128];
guint32 n_name_value_sets;
MXFUL *name_value_sets_uids;
MXFDMS1NameValue **name_value_sets;
};
struct _MXFDMS1Shot {
MXFDMS1TextLanguage parent;
gint64 shot_start_position;
gint64 shot_duration;
guint32 n_shot_track_ids;
guint32 *shot_track_ids;
gchar *shot_description;
gchar *shot_comment_kind;
gchar *shot_comment;
MXFUL cue_words_set_uid;
MXFDMS1CueWords *cue_words_set;
guint32 n_key_point_sets;
MXFUL *key_point_sets_uids;
MXFDMS1KeyPoint **key_point_sets;
};
struct _MXFDMS1KeyPoint {
MXFDMS1Thesaurus parent;
gchar *keypoint_kind;
gchar *keypoint_value;
gint64 keypoint_position;
};
struct _MXFDMS1Participant {
MXFDMS1Thesaurus parent;
MXFUL participant_uid;
gchar *contribution_status;
gchar *job_function;
gchar job_function_code[33];
gchar *role_or_identity_name;
guint32 n_person_sets;
MXFUL *person_sets_uids;
MXFDMS1Person **person_sets;
guint32 n_organisation_sets;
MXFUL *organisation_sets_uids;
MXFDMS1Organisation **organisation_sets;
};
struct _MXFDMS1Contact {
MXFDMS1Thesaurus parent;
MXFUL contact_uid;
guint32 n_name_value_sets;
MXFUL *name_value_sets_uids;
MXFDMS1NameValue **name_value_sets;
guint32 n_address_sets;
MXFUL *address_sets_uids;
MXFDMS1Address **address_sets;
};
struct _MXFDMS1Person {
MXFDMS1Contact parent;
gchar *family_name;
gchar *first_given_name;
gchar *other_given_names;
gchar *linking_name;
gchar *salutation;
gchar *name_suffix;
gchar *honours_qualifications;
gchar *former_family_name;
gchar *person_description;
gchar *alternate_name;
gchar *nationality;
gchar *citizenship;
guint32 n_organisation_sets;
MXFUL *organisation_sets_uids;
MXFDMS1Organisation **organisation_sets;
};
struct _MXFDMS1Organisation {
MXFDMS1Contact parent;
gchar *nature_of_organisation;
gchar *organisation_main_name;
gchar *organisation_code;
gchar *contact_department;
};
struct _MXFDMS1Location {
MXFDMS1Contact parent;
gchar *location_kind;
gchar *location_description;
};
struct _MXFDMS1Address {
MXFDMS1 parent;
gchar *room_or_suite_number;
gchar *room_or_suite_name;
gchar *building_name;
gchar *place_name;
gchar *street_number;
gchar *street_name;
gchar *postal_town;
gchar *city;
gchar *state_or_province_or_country;
gchar *postal_code;
gchar *country;
guint8 geographical_coordinate[12];
gchar *astronomical_body_name;
guint32 n_communications_sets;
MXFUL *communications_sets_uids;
MXFDMS1Communications **communications_sets;
guint32 n_name_value_sets;
MXFUL *name_value_sets_uids;
MXFDMS1NameValue **name_value_sets;
};
struct _MXFDMS1Communications {
MXFDMS1 parent;
gchar central_telephone_number[33];
gchar telephone_number[33];
gchar mobile_telephone_number[33];
gchar fax_number[33];
gchar *email_address;
gchar *web_page;
};
struct _MXFDMS1Contract {
MXFDMS1Thesaurus parent;
gchar supply_contract_number[33];
guint32 n_rights_sets;
MXFUL *rights_sets_uids;
MXFDMS1Rights **rights_sets;
guint32 n_participant_sets;
MXFUL *participant_sets_uids;
MXFDMS1Participant **participant_sets;
};
struct _MXFDMS1Rights {
MXFDMS1Thesaurus parent;
gchar *copyright_owner;
gchar *rights_holder;
gchar *rights_managment_authority;
gchar *region_or_area_of_ip_license;
gchar *intellectual_property_type;
gchar *right_condition;
gchar *right_remarks;
gchar *intellectual_property_right;
MXFTimestamp rights_start_date_and_time;
MXFTimestamp rights_stop_date_and_time;
guint16 maximum_number_of_usages;
};
struct _MXFDMS1PictureFormat {
MXFDMS1 parent;
MXFFraction viewport_aspect_ratio;
gchar perceived_display_format[33];
gchar *colour_descriptor;
};
struct _MXFDMS1DeviceParameters {
MXFDMS1Thesaurus parent;
gchar *device_type;
gchar device_designation[33];
gchar device_asset_number[33];
guint8 ieee_device_identifier[6];
gchar *manufacturer;
gchar *device_model;
gchar *device_serial_number;
gchar *device_usage_description;
guint32 n_name_value_sets;
MXFUL *name_value_sets_uids;
MXFDMS1NameValue **name_value_sets;
};
struct _MXFDMS1NameValue {
MXFDMS1 parent;
gchar *item_name;
gchar *item_value;
MXFUL smpte_universal_label_locator;
};
struct _MXFDMS1Processing {
MXFDMS1 parent;
gboolean quality_flag;
gchar *descriptive_comment;
gboolean logo_flag;
gchar *graphic_usage_type;
guint16 process_steps;
guint16 generation_copy_number;
guint16 generation_clone_number;
};
struct _MXFDMS1Project {
MXFDMS1 parent;
gchar project_number[33];
gchar *project_name_or_title;
};
struct _MXFDMS1ContactsList {
MXFDMS1 parent;
guint32 n_person_sets;
MXFUL *person_sets_uids;
MXFDMS1Person **person_sets;
guint32 n_organisation_sets;
MXFUL *organisation_sets_uids;
MXFDMS1Organisation **organisation_sets;
guint32 n_location_sets;
MXFUL *location_sets_uids;
MXFDMS1Location **location_sets;
};
struct _MXFDMS1CueWords {
MXFDMS1TextLanguage parent;
gchar *in_cue_words;
gchar *out_cue_words;
};
void mxf_dms1_initialize (void);
#endif /* _MXF_DMS1_H_ */

View file

@ -106,10 +106,10 @@ mxf_jpeg2000_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
if (!track->parent.descriptor[i])
continue;
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->
parent.descriptor[i];
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent.
descriptor[i];
f = track->parent.descriptor[i];
break;
} else if (MXF_IS_METADATA_FILE_DESCRIPTOR (track->parent.descriptor[i]) &&

View file

@ -114,10 +114,10 @@ mxf_metadata_base_resolve (MXFMetadataBase * self, MXFMetadataBase ** metadata)
if (self->resolved == MXF_METADATA_BASE_RESOLVE_STATE_SUCCESS)
return TRUE;
else if (self->resolved == MXF_METADATA_BASE_RESOLVE_STATE_FAILURE)
else if (self->resolved != MXF_METADATA_BASE_RESOLVE_STATE_NONE)
return FALSE;
self->resolved = TRUE;
self->resolved = MXF_METADATA_BASE_RESOLVE_STATE_RUNNING;;
klass = MXF_METADATA_BASE_GET_CLASS (self);
@ -151,6 +151,13 @@ mxf_metadata_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
GST_DEBUG (" instance uid = %s",
mxf_ul_to_string (&self->parent.instance_uid, str));
break;
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->parent.generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->parent.generation_uid, str));
break;
default:
ret =
MXF_METADATA_BASE_CLASS (mxf_metadata_parent_class)->handle_tag
@ -327,13 +334,6 @@ mxf_metadata_preface_handle_tag (MXFMetadataBase * metadata,
gboolean ret = TRUE;
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x3b02:
if (!mxf_timestamp_parse (&self->last_modified_date, tag_data, tag_size))
goto error;
@ -701,13 +701,6 @@ mxf_metadata_content_storage_handle_tag (MXFMetadataBase * metadata,
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x1901:{
guint32 len;
guint i;
@ -867,13 +860,6 @@ mxf_metadata_essence_container_data_handle_tag (MXFMetadataBase * metadata,
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x2701:
if (tag_size != 32)
goto error;
@ -996,13 +982,6 @@ mxf_metadata_generic_package_handle_tag (MXFMetadataBase * metadata,
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x4401:
if (tag_size != 32)
goto error;
@ -1401,13 +1380,6 @@ mxf_metadata_track_handle_tag (MXFMetadataBase * metadata,
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x4801:
if (tag_size != 4)
goto error;
@ -1702,13 +1674,6 @@ mxf_metadata_sequence_handle_tag (MXFMetadataBase * metadata,
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x0201:
if (tag_size != 16)
goto error;
@ -1837,13 +1802,6 @@ mxf_metadata_structural_component_handle_tag (MXFMetadataBase * metadata,
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x0201:
if (tag_size != 16)
goto error;
@ -2249,10 +2207,10 @@ mxf_metadata_dm_segment_resolve (MXFMetadataBase * m,
while (*p) {
current = *p;
/* TODO: if (MXF_IS_DM_FRAMEWORK (current) && */
if (mxf_ul_is_equal (&current->instance_uid, &self->dm_framework_uid)) {
if (MXF_IS_DESCRIPTIVE_METADATA_FRAMEWORK (current)
&& mxf_ul_is_equal (&current->instance_uid, &self->dm_framework_uid)) {
if (mxf_metadata_base_resolve (current, metadata)) {
self->dm_framework = current;
self->dm_framework = MXF_DESCRIPTIVE_METADATA_FRAMEWORK (current);
}
break;
}
@ -2318,13 +2276,6 @@ mxf_metadata_generic_descriptor_handle_tag (MXFMetadataBase * metadata,
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
case 0x2f01:{
guint32 len;
guint i;
@ -2681,8 +2632,8 @@ mxf_metadata_generic_picture_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
(mxf_metadata_generic_picture_essence_descriptor_parent_class)->
handle_tag (metadata, primer, tag, tag_data, tag_size);
(mxf_metadata_generic_picture_essence_descriptor_parent_class)->handle_tag
(metadata, primer, tag, tag_data, tag_size);
break;
}
@ -2835,8 +2786,8 @@ mxf_metadata_generic_sound_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
(mxf_metadata_generic_sound_essence_descriptor_parent_class)->
handle_tag (metadata, primer, tag, tag_data, tag_size);
(mxf_metadata_generic_sound_essence_descriptor_parent_class)->handle_tag
(metadata, primer, tag, tag_data, tag_size);
break;
}
@ -2970,8 +2921,8 @@ mxf_metadata_cdci_picture_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
(mxf_metadata_cdci_picture_essence_descriptor_parent_class)->
handle_tag (metadata, primer, tag, tag_data, tag_size);
(mxf_metadata_cdci_picture_essence_descriptor_parent_class)->handle_tag
(metadata, primer, tag, tag_data, tag_size);
break;
}
@ -3096,8 +3047,8 @@ mxf_metadata_rgba_picture_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
(mxf_metadata_rgba_picture_essence_descriptor_parent_class)->
handle_tag (metadata, primer, tag, tag_data, tag_size);
(mxf_metadata_rgba_picture_essence_descriptor_parent_class)->handle_tag
(metadata, primer, tag, tag_data, tag_size);
break;
}
@ -3160,8 +3111,8 @@ mxf_metadata_generic_data_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
(mxf_metadata_generic_data_essence_descriptor_parent_class)->
handle_tag (metadata, primer, tag, tag_data, tag_size);
(mxf_metadata_generic_data_essence_descriptor_parent_class)->handle_tag
(metadata, primer, tag, tag_data, tag_size);
break;
}
@ -3331,41 +3282,6 @@ mxf_metadata_multiple_descriptor_class_init (MXFMetadataMultipleDescriptorClass
G_DEFINE_ABSTRACT_TYPE (MXFMetadataLocator, mxf_metadata_locator,
MXF_TYPE_METADATA);
static gboolean
mxf_metadata_locator_handle_tag (MXFMetadataBase * metadata,
MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
guint tag_size)
{
MXFMetadataLocator *self = MXF_METADATA_LOCATOR (metadata);
gboolean ret = TRUE;
#ifndef GST_DISABLE_GST_DEBUG
gchar str[48];
#endif
switch (tag) {
case 0x0102:
if (tag_size != 16)
goto error;
memcpy (&self->generation_uid, tag_data, 16);
GST_DEBUG (" generation uid = %s",
mxf_ul_to_string (&self->generation_uid, str));
break;
default:
ret =
MXF_METADATA_BASE_CLASS
(mxf_metadata_locator_parent_class)->handle_tag (metadata,
primer, tag, tag_data, tag_size);
break;
}
return ret;
error:
GST_ERROR ("Invalid locator local tag 0x%04x of size %u", tag, tag_size);
return FALSE;
}
static void
mxf_metadata_locator_init (MXFMetadataLocator * self)
{
@ -3374,9 +3290,6 @@ mxf_metadata_locator_init (MXFMetadataLocator * self)
static void
mxf_metadata_locator_class_init (MXFMetadataLocatorClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
metadata_base_class->handle_tag = mxf_metadata_locator_handle_tag;
}
G_DEFINE_TYPE (MXFMetadataTextLocator, mxf_metadata_text_locator,
@ -3487,3 +3400,125 @@ mxf_metadata_network_locator_class_init (MXFMetadataNetworkLocatorClass * klass)
miniobject_class->finalize = mxf_metadata_network_locator_finalize;
metadata_base_class->handle_tag = mxf_metadata_network_locator_handle_tag;
}
G_DEFINE_ABSTRACT_TYPE (MXFDescriptiveMetadata, mxf_descriptive_metadata,
MXF_TYPE_METADATA_BASE);
static void
mxf_descriptive_metadata_init (MXFDescriptiveMetadata * self)
{
}
static void
mxf_descriptive_metadata_class_init (MXFDescriptiveMetadataClass * klass)
{
}
typedef struct
{
guint8 scheme;
GSList *sets;
} _MXFDescriptiveMetadataScheme;
static GSList *_dm_schemes = NULL;
void
mxf_descriptive_metadata_register (guint8 scheme, GSList * sets)
{
_MXFDescriptiveMetadataScheme *s =
g_slice_new (_MXFDescriptiveMetadataScheme);
s->scheme = scheme;
s->sets = sets;
_dm_schemes = g_slist_prepend (_dm_schemes, s);
}
MXFDescriptiveMetadata *
mxf_descriptive_metadata_new (guint8 scheme, guint32 type,
MXFPrimerPack * primer, const guint8 * data, guint size)
{
GSList *l;
GType t = G_TYPE_INVALID;
_MXFDescriptiveMetadataScheme *s = NULL;
MXFDescriptiveMetadata *ret = NULL;
g_return_val_if_fail (type != 0, NULL);
g_return_val_if_fail (primer != NULL, NULL);
for (l = _dm_schemes; l; l = l->next) {
_MXFDescriptiveMetadataScheme *data = l->data;
if (data->scheme == scheme) {
s = data;
break;
}
}
if (s == NULL) {
GST_WARNING ("Descriptive metadata scheme 0x%02x not supported", scheme);
return NULL;
}
for (l = s->sets; l; l = l->next) {
MXFDescriptiveMetadataSet *set = l->data;
if (set->id == type) {
t = set->type;
break;
} else if (set->id == 0x000000) {
t = set->type;
}
}
if (t == G_TYPE_INVALID) {
GST_WARNING
("No handler for type 0x%06x of descriptive metadata scheme 0x%02x found",
type, scheme);
return NULL;
}
ret = (MXFDescriptiveMetadata *) g_type_create_instance (t);
if (!mxf_metadata_base_parse (MXF_METADATA_BASE (ret), primer, data, size)) {
GST_ERROR ("Parsing metadata failed");
gst_mini_object_unref ((GstMiniObject *) ret);
return NULL;
}
ret->type = type;
return ret;
}
/* TODO: Remove this once we depend on GLib 2.14 */
#if GLIB_CHECK_VERSION (2, 14, 0)
#define __gst_once_init_enter(val) (g_once_init_enter (val))
#define __gst_once_init_leave(val,newval) (g_once_init_leave (val, newval))
#endif
GType
mxf_descriptive_metadata_framework_get_type (void)
{
static volatile gsize type = 0;
if (__gst_once_init_enter (&type)) {
GType _type = 0;
static const GTypeInfo info = {
sizeof (MXFDescriptiveMetadataFrameworkInterface),
NULL, /* base_init */
NULL, /* base_finalize */
NULL, /* class_init */
NULL, /* class_finalize */
NULL, /* class_data */
0, /* instance_size */
0, /* n_preallocs */
NULL /* instance_init */
};
_type = g_type_register_static (G_TYPE_INTERFACE,
"MXFDescriptiveMetadataFrameworkInterface", &info, 0);
g_type_interface_add_prerequisite (_type, MXF_TYPE_DESCRIPTIVE_METADATA);
__gst_once_init_leave (&type, (gsize) _type);
}
return (GType) type;
}

View file

@ -333,16 +333,45 @@ typedef struct _MXFMetadataTextLocator MXFMetadataTextLocator;
typedef MXFMetadataBaseClass MXFMetadataTextLocatorClass;
GType mxf_metadata_text_locator_get_type (void);
#define MXF_TYPE_DESCRIPTIVE_METADATA \
(mxf_descriptive_metadata_get_type())
#define MXF_DESCRIPTIVE_METADATA(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DESCRIPTIVE_METADATA,MXFDescriptiveMetadata))
#define MXF_IS_DESCRIPTIVE_METADATA(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DESCRIPTIVE_METADATA))
#define MXF_DESCRIPTIVE_METADATA_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), MXF_TYPE_DESCRIPTIVE_METADATA, MXFDescriptiveMetadataClass))
#define MXF_DESCRIPTIVE_METADATA_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),MXF_TYPE_DESCRIPTIVE_METADATA,MXFDescriptiveMetadataClass))
typedef struct _MXFDescriptiveMetadata MXFDescriptiveMetadata;
typedef struct _MXFDescriptiveMetadataClass MXFDescriptiveMetadataClass;
GType mxf_descriptive_metadata_get_type (void);
#define MXF_TYPE_DESCRIPTIVE_METADATA_FRAMEWORK \
(mxf_descriptive_metadata_framework_get_type ())
#define MXF_DESCRIPTIVE_METADATA_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), MXF_TYPE_DESCRIPTIVE_METADATA_FRAMEWORK, MXFDescriptiveMetadataFramework))
#define MXF_IS_DESCRIPTIVE_METADATA_FRAMEWORK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), MXF_TYPE_DESCRIPTIVE_METADATA_FRAMEWORK))
#define MXF_DESCRIPTIVE_METADATA_FRAMEWORK_GET_INTERFACE(inst) \
(G_TYPE_INSTANCE_GET_INTERFACE ((inst), MXF_TYPE_DESCRIPTIVE_METADATA_FRAMEWORK, MXFDescriptiveMetadataFrameworkInterface))
typedef struct _MXFDescriptiveMetadataFramework MXFDescriptiveMetadataFramework; /* dummy object */
typedef struct _MXFDescriptiveMetadataFrameworkInterface MXFDescriptiveMetadataFrameworkInterface;
GType mxf_descriptive_metadata_framework_get_type (void);
typedef enum {
MXF_METADATA_BASE_RESOLVE_STATE_NONE = 0,
MXF_METADATA_BASE_RESOLVE_STATE_SUCCESS,
MXF_METADATA_BASE_RESOLVE_STATE_FAILURE
MXF_METADATA_BASE_RESOLVE_STATE_FAILURE,
MXF_METADATA_BASE_RESOLVE_STATE_RUNNING
} MXFMetadataBaseResolveState;
struct _MXFMetadataBase {
GstMiniObject parent;
MXFUL instance_uid;
MXFUL generation_uid;
MXFMetadataBaseResolveState resolved;
@ -365,8 +394,6 @@ struct _MXFMetadata {
struct _MXFMetadataPreface {
MXFMetadata parent;
MXFUL generation_uid;
MXFTimestamp last_modified_date;
guint16 version;
@ -415,8 +442,6 @@ struct _MXFMetadataIdentification {
struct _MXFMetadataContentStorage {
MXFMetadata parent;
MXFUL generation_uid;
guint32 n_packages;
MXFUL *packages_uids;
MXFMetadataGenericPackage **packages;
@ -429,8 +454,6 @@ struct _MXFMetadataContentStorage {
struct _MXFMetadataEssenceContainerData {
MXFMetadata parent;
MXFUL generation_uid;
MXFUMID linked_package_uid;
MXFMetadataSourcePackage *linked_package;
@ -441,8 +464,6 @@ struct _MXFMetadataEssenceContainerData {
struct _MXFMetadataGenericPackage {
MXFMetadata parent;
MXFUL generation_uid;
MXFUMID package_uid;
gchar *name;
@ -486,8 +507,6 @@ typedef enum {
struct _MXFMetadataTrack {
MXFMetadata parent;
MXFUL generation_uid;
guint32 track_id;
guint32 track_number;
@ -519,8 +538,6 @@ struct _MXFMetadataEventTrack {
struct _MXFMetadataSequence {
MXFMetadata parent;
MXFUL generation_uid;
MXFUL data_definition;
gint64 duration;
@ -533,8 +550,6 @@ struct _MXFMetadataSequence {
struct _MXFMetadataStructuralComponent {
MXFMetadata parent;
MXFUL generation_uid;
MXFUL data_definition;
gint64 duration;
};
@ -574,14 +589,12 @@ struct _MXFMetadataDMSegment {
guint32 *track_ids;
MXFUL dm_framework_uid;
MXFMetadataBase *dm_framework;
MXFDescriptiveMetadataFramework *dm_framework;
};
struct _MXFMetadataGenericDescriptor {
MXFMetadata parent;
MXFUL generation_uid;
guint32 n_locators;
MXFUL *locators_uids;
MXFMetadataLocator **locators;
@ -698,8 +711,6 @@ struct _MXFMetadataMultipleDescriptor {
struct _MXFMetadataLocator {
MXFMetadata parent;
MXFUL generation_uid;
};
struct _MXFMetadataNetworkLocator {
@ -714,6 +725,25 @@ struct _MXFMetadataTextLocator {
gchar *locator_name;
};
typedef struct {
guint32 id;
GType type;
} MXFDescriptiveMetadataSet;
struct _MXFDescriptiveMetadata {
MXFMetadataBase parent;
guint32 type;
};
struct _MXFDescriptiveMetadataClass {
MXFMetadataBase parent;
};
struct _MXFDescriptiveMetadataFrameworkInterface {
GTypeInterface parent;
};
gboolean mxf_metadata_base_parse (MXFMetadataBase *self, MXFPrimerPack *primer, const guint8 *data, guint size);
gboolean mxf_metadata_base_resolve (MXFMetadataBase *self, MXFMetadataBase **metadata);
@ -726,4 +756,7 @@ MXFMetadataTrackType mxf_metadata_track_identifier_parse (const MXFUL * track_id
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);
void mxf_descriptive_metadata_register (guint8 scheme, GSList *sets);
MXFDescriptiveMetadata * mxf_descriptive_metadata_new (guint8 scheme, guint32 type, MXFPrimerPack * primer, const guint8 * data, guint size);
#endif /* __MXF_METADATA_H__ */

View file

@ -478,17 +478,17 @@ mxf_mpeg_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
if (!track->parent.descriptor[i])
continue;
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
f = track->parent.descriptor[i];
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->
parent.descriptor[i];
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent.
descriptor[i];
break;
} else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
} else if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
f = track->parent.descriptor[i];
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->
parent.descriptor[i];
s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent.
descriptor[i];
break;
}
}

View file

@ -222,19 +222,19 @@ mxf_up_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
if (!track->parent.descriptor[i])
continue;
if (MXF_IS_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->
parent.descriptor[i];
r = (MXFMetadataRGBAPictureEssenceDescriptor *) track->
parent.descriptor[i];
break;
} else if (MXF_IS_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
if (MXF_IS_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->
parent.descriptor[i];
c = (MXFMetadataCDCIPictureEssenceDescriptor *) track->
parent.descriptor[i];
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent.
descriptor[i];
r = (MXFMetadataRGBAPictureEssenceDescriptor *) track->parent.
descriptor[i];
break;
} else if (MXF_IS_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent.
descriptor[i];
c = (MXFMetadataCDCIPictureEssenceDescriptor *) track->parent.
descriptor[i];
}
}

View file

@ -100,10 +100,10 @@ mxf_vc3_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
if (!track->parent.descriptor[i])
continue;
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
parent.descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->parent.
descriptor[i];
if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
descriptor[i])) {
p = (MXFMetadataGenericPictureEssenceDescriptor *) track->
parent.descriptor[i];
f = track->parent.descriptor[i];
break;
} else if (MXF_IS_METADATA_FILE_DESCRIPTOR (track->parent.descriptor[i]) &&