mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
Set essence track positions to 0 if we're at the start partition
This commit is contained in:
parent
91b35975b5
commit
556e3c46e4
1 changed files with 28 additions and 9 deletions
|
@ -610,11 +610,11 @@ gst_mxf_demux_choose_package (GstMXFDemux * demux)
|
||||||
|
|
||||||
for (i = 0; i < demux->preface->content_storage->n_packages; i++) {
|
for (i = 0; i < demux->preface->content_storage->n_packages; i++) {
|
||||||
if (demux->preface->content_storage->packages[i] &&
|
if (demux->preface->content_storage->packages[i] &&
|
||||||
MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->content_storage->
|
MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->
|
||||||
packages[i])) {
|
content_storage->packages[i])) {
|
||||||
ret =
|
ret =
|
||||||
MXF_METADATA_GENERIC_PACKAGE (demux->preface->content_storage->
|
MXF_METADATA_GENERIC_PACKAGE (demux->preface->
|
||||||
packages[i]);
|
content_storage->packages[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1258,8 +1258,8 @@ gst_mxf_demux_pad_next_component (GstMXFDemux * demux, GstMXFDemuxPad * pad)
|
||||||
pad->current_component_index);
|
pad->current_component_index);
|
||||||
|
|
||||||
pad->current_component =
|
pad->current_component =
|
||||||
MXF_METADATA_SOURCE_CLIP (sequence->structural_components[pad->
|
MXF_METADATA_SOURCE_CLIP (sequence->
|
||||||
current_component_index]);
|
structural_components[pad->current_component_index]);
|
||||||
if (pad->current_component == NULL) {
|
if (pad->current_component == NULL) {
|
||||||
GST_ERROR_OBJECT (demux, "No such structural component");
|
GST_ERROR_OBJECT (demux, "No such structural component");
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
|
@ -1267,8 +1267,8 @@ gst_mxf_demux_pad_next_component (GstMXFDemux * demux, GstMXFDemuxPad * pad)
|
||||||
|
|
||||||
if (!pad->current_component->source_package
|
if (!pad->current_component->source_package
|
||||||
|| !pad->current_component->source_package->top_level
|
|| !pad->current_component->source_package->top_level
|
||||||
|| !MXF_METADATA_GENERIC_PACKAGE (pad->current_component->
|
|| !MXF_METADATA_GENERIC_PACKAGE (pad->
|
||||||
source_package)->tracks) {
|
current_component->source_package)->tracks) {
|
||||||
GST_ERROR_OBJECT (demux, "Invalid component");
|
GST_ERROR_OBJECT (demux, "Invalid component");
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1368,7 +1368,6 @@ gst_mxf_demux_handle_generic_container_essence_element (GstMXFDemux * demux,
|
||||||
demux->offset - demux->current_partition->partition.this_partition -
|
demux->offset - demux->current_partition->partition.this_partition -
|
||||||
demux->run_in;
|
demux->run_in;
|
||||||
|
|
||||||
|
|
||||||
if (!demux->current_package) {
|
if (!demux->current_package) {
|
||||||
GST_ERROR_OBJECT (demux, "No package selected yet");
|
GST_ERROR_OBJECT (demux, "No package selected yet");
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
|
@ -2043,6 +2042,26 @@ gst_mxf_demux_handle_klv_packet (GstMXFDemux * demux, const MXFUL * key,
|
||||||
mxf_ul_to_string (key, key_str));
|
mxf_ul_to_string (key, key_str));
|
||||||
} else if (mxf_is_partition_pack (key)) {
|
} else if (mxf_is_partition_pack (key)) {
|
||||||
ret = gst_mxf_demux_handle_partition_pack (demux, key, buffer);
|
ret = gst_mxf_demux_handle_partition_pack (demux, key, buffer);
|
||||||
|
|
||||||
|
/* If this partition contains the start of an essence container
|
||||||
|
* set the positions of all essence streams to 0
|
||||||
|
*/
|
||||||
|
if (ret == GST_FLOW_OK && demux->current_partition
|
||||||
|
&& demux->current_partition->partition.body_sid != 0
|
||||||
|
&& demux->current_partition->partition.body_offset == 0
|
||||||
|
&& demux->essence_tracks) {
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
for (i = 0; i < demux->essence_tracks->len; i++) {
|
||||||
|
GstMXFDemuxEssenceTrack *etrack =
|
||||||
|
&g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
|
||||||
|
|
||||||
|
if (etrack->body_sid != demux->current_partition->partition.body_sid)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
etrack->position = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (mxf_is_primer_pack (key)) {
|
} else if (mxf_is_primer_pack (key)) {
|
||||||
ret = gst_mxf_demux_handle_primer_pack (demux, key, buffer);
|
ret = gst_mxf_demux_handle_primer_pack (demux, key, buffer);
|
||||||
} else if (mxf_is_metadata (key)) {
|
} else if (mxf_is_metadata (key)) {
|
||||||
|
|
Loading…
Reference in a new issue