Check for EOS on all pads after adjusting the essence track durations

This commit is contained in:
Sebastian Dröge 2009-01-30 19:52:59 +01:00
parent ebd8b8dbaf
commit 93a2b5c9ea

View File

@ -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;