mxfdemux: For material packages make sure that tracks resolve to source tracks
This commit is contained in:
parent
8dc9f2ea4d
commit
658066d085
@ -1114,6 +1114,7 @@ mxf_metadata_material_package_resolve (MXFMetadataBase * m,
|
|||||||
(mxf_metadata_material_package_parent_class)->resolve (m, metadata);
|
(mxf_metadata_material_package_parent_class)->resolve (m, metadata);
|
||||||
MXFMetadataGenericPackage *self = MXF_METADATA_GENERIC_PACKAGE (m);
|
MXFMetadataGenericPackage *self = MXF_METADATA_GENERIC_PACKAGE (m);
|
||||||
guint i;
|
guint i;
|
||||||
|
guint ntracks = 0;
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return ret;
|
return ret;
|
||||||
@ -1133,6 +1134,8 @@ mxf_metadata_material_package_resolve (MXFMetadataBase * m,
|
|||||||
|
|
||||||
for (j = 0; j < sequence->n_structural_components; j++) {
|
for (j = 0; j < sequence->n_structural_components; j++) {
|
||||||
MXFMetadataSourceClip *sc;
|
MXFMetadataSourceClip *sc;
|
||||||
|
MXFMetadataTimelineTrack *st = NULL;
|
||||||
|
guint k;
|
||||||
|
|
||||||
if (!sequence->structural_components[j]
|
if (!sequence->structural_components[j]
|
||||||
|| !MXF_IS_METADATA_SOURCE_CLIP (sequence->structural_components[j]))
|
|| !MXF_IS_METADATA_SOURCE_CLIP (sequence->structural_components[j]))
|
||||||
@ -1140,9 +1143,48 @@ mxf_metadata_material_package_resolve (MXFMetadataBase * m,
|
|||||||
|
|
||||||
sc = MXF_METADATA_SOURCE_CLIP (sequence->structural_components[j]);
|
sc = MXF_METADATA_SOURCE_CLIP (sequence->structural_components[j]);
|
||||||
|
|
||||||
if (sc->source_package)
|
if (!sc->source_package) {
|
||||||
sc->source_package->top_level = TRUE;
|
GST_ERROR ("Material package track %u without resolved source package",
|
||||||
|
i);
|
||||||
|
track = NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sc->source_package->top_level = TRUE;
|
||||||
|
for (k = 0; k < sc->source_package->parent.n_tracks; k++) {
|
||||||
|
MXFMetadataTimelineTrack *tmp;
|
||||||
|
|
||||||
|
if (!sc->source_package->parent.tracks[k] ||
|
||||||
|
!MXF_IS_METADATA_TIMELINE_TRACK (sc->source_package->
|
||||||
|
parent.tracks[k]))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
tmp =
|
||||||
|
MXF_METADATA_TIMELINE_TRACK (sc->source_package->parent.tracks[k]);
|
||||||
|
if (tmp->parent.track_id == sc->source_track_id) {
|
||||||
|
st = tmp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!st) {
|
||||||
|
GST_ERROR ("Material package track %u without resolved source track",
|
||||||
|
i);
|
||||||
|
track = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (track)
|
||||||
|
ntracks++;
|
||||||
|
else
|
||||||
|
self->tracks[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ntracks == 0) {
|
||||||
|
GST_ERROR ("No tracks could be resolved");
|
||||||
|
return FALSE;
|
||||||
|
} else if (ntracks != self->n_tracks) {
|
||||||
|
GST_WARNING ("Not all tracks could be resolved");
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user