diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-12-09 16:31:19 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-12-09 16:33:39 +0200 |
commit | b504672fc460089b09d6f406c3fdf618153902dd (patch) | |
tree | b5fe1e8418dacd9fc933b55a09334d434fb6067d /gst | |
parent | 6d367d6b48d22c51af268fa0258a5bc111de9763 (diff) | |
download | gstreamer-plugins-bad-b504672fc460089b09d6f406c3fdf618153902dd.tar.gz |
mxfdemux: Collect all index table segments after finding the random index pack
That way we always have the index table information available, especially the
keyframe-ness of all buffers.
Diffstat (limited to 'gst')
-rw-r--r-- | gst/mxf/mxfdemux.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c index 741956fa3..b72ed64b7 100644 --- a/gst/mxf/mxfdemux.c +++ b/gst/mxf/mxfdemux.c @@ -78,6 +78,8 @@ static GstFlowReturn gst_mxf_demux_handle_index_table_segment (GstMXFDemux * demux, const MXFUL * key, GstBuffer * buffer, guint64 offset); +static void collect_index_table_segments (GstMXFDemux * demux); + GType gst_mxf_demux_pad_get_type (void); G_DEFINE_TYPE (GstMXFDemuxPad, gst_mxf_demux_pad, GST_TYPE_PAD); @@ -2191,6 +2193,7 @@ gst_mxf_demux_pull_random_index_pack (GstMXFDemux * demux) guint64 old_offset = demux->offset; MXFUL key; GstMapInfo map; + GstFlowReturn flow_ret; if (!gst_pad_peer_query_duration (demux->sinkpad, fmt, &filesize) || fmt != GST_FORMAT_BYTES || filesize == -1) { @@ -2244,9 +2247,14 @@ gst_mxf_demux_pull_random_index_pack (GstMXFDemux * demux) return; } - gst_mxf_demux_handle_random_index_pack (demux, &key, buffer); + flow_ret = gst_mxf_demux_handle_random_index_pack (demux, &key, buffer); gst_buffer_unref (buffer); demux->offset = old_offset; + + if (flow_ret == GST_FLOW_OK && !demux->index_table_segments_collected) { + collect_index_table_segments (demux); + demux->index_table_segments_collected = TRUE; + } } static void @@ -2486,6 +2494,11 @@ gst_mxf_demux_handle_klv_packet (GstMXFDemux * demux, const MXFUL * key, buffer, peek); } else if (mxf_is_random_index_pack (key)) { ret = gst_mxf_demux_handle_random_index_pack (demux, key, buffer); + + if (ret == GST_FLOW_OK && !demux->index_table_segments_collected) { + collect_index_table_segments (demux); + demux->index_table_segments_collected = TRUE; + } } else if (mxf_is_index_table_segment (key)) { ret = gst_mxf_demux_handle_index_table_segment (demux, key, buffer, |