Check for EOS on all pads after adjusting the essence track durations
This commit is contained in:
parent
ebd8b8dbaf
commit
93a2b5c9ea
@ -632,11 +632,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->
|
MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->content_storage->
|
||||||
content_storage->packages[i])) {
|
packages[i])) {
|
||||||
ret =
|
ret =
|
||||||
MXF_METADATA_GENERIC_PACKAGE (demux->preface->
|
MXF_METADATA_GENERIC_PACKAGE (demux->preface->content_storage->
|
||||||
content_storage->packages[i]);
|
packages[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1280,8 +1280,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->
|
MXF_METADATA_SOURCE_CLIP (sequence->structural_components[pad->
|
||||||
structural_components[pad->current_component_index]);
|
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;
|
||||||
@ -1289,8 +1289,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->
|
|| !MXF_METADATA_GENERIC_PACKAGE (pad->current_component->
|
||||||
current_component->source_package)->tracks) {
|
source_package)->tracks) {
|
||||||
GST_ERROR_OBJECT (demux, "Invalid component");
|
GST_ERROR_OBJECT (demux, "Invalid component");
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
@ -2272,6 +2272,17 @@ from_index:
|
|||||||
}
|
}
|
||||||
/* For the searched track this is really our position */
|
/* For the searched track this is really our position */
|
||||||
etrack->duration = etrack->position;
|
etrack->duration = etrack->position;
|
||||||
|
|
||||||
|
for (i = 0; i < demux->src->len; i++) {
|
||||||
|
GstMXFDemuxPad *p = g_ptr_array_index (demux->src, i);
|
||||||
|
|
||||||
|
if (!p->eos
|
||||||
|
&& p->current_essence_track_position >=
|
||||||
|
p->current_essence_track->duration) {
|
||||||
|
p->eos = TRUE;
|
||||||
|
gst_pad_push_event (GST_PAD_CAST (p), gst_event_new_eos ());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
||||||
@ -2334,6 +2345,18 @@ gst_mxf_demux_pull_and_handle_klv_packet (GstMXFDemux * demux)
|
|||||||
t->duration = t->position;
|
t->duration = t->position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < demux->src->len; i++) {
|
||||||
|
GstMXFDemuxPad *p = g_ptr_array_index (demux->src, i);
|
||||||
|
|
||||||
|
if (!p->eos
|
||||||
|
&& p->current_essence_track_position >=
|
||||||
|
p->current_essence_track->duration) {
|
||||||
|
p->eos = TRUE;
|
||||||
|
gst_pad_push_event (GST_PAD_CAST (p), gst_event_new_eos ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while ((p = gst_mxf_demux_get_earliest_pad (demux))) {
|
while ((p = gst_mxf_demux_get_earliest_pad (demux))) {
|
||||||
guint64 offset;
|
guint64 offset;
|
||||||
gint64 position;
|
gint64 position;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user