mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
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.
This commit is contained in:
parent
6d367d6b48
commit
b504672fc4
1 changed files with 14 additions and 1 deletions
|
@ -78,6 +78,8 @@ static GstFlowReturn
|
||||||
gst_mxf_demux_handle_index_table_segment (GstMXFDemux * demux,
|
gst_mxf_demux_handle_index_table_segment (GstMXFDemux * demux,
|
||||||
const MXFUL * key, GstBuffer * buffer, guint64 offset);
|
const MXFUL * key, GstBuffer * buffer, guint64 offset);
|
||||||
|
|
||||||
|
static void collect_index_table_segments (GstMXFDemux * demux);
|
||||||
|
|
||||||
GType gst_mxf_demux_pad_get_type (void);
|
GType gst_mxf_demux_pad_get_type (void);
|
||||||
G_DEFINE_TYPE (GstMXFDemuxPad, gst_mxf_demux_pad, GST_TYPE_PAD);
|
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;
|
guint64 old_offset = demux->offset;
|
||||||
MXFUL key;
|
MXFUL key;
|
||||||
GstMapInfo map;
|
GstMapInfo map;
|
||||||
|
GstFlowReturn flow_ret;
|
||||||
|
|
||||||
if (!gst_pad_peer_query_duration (demux->sinkpad, fmt, &filesize) ||
|
if (!gst_pad_peer_query_duration (demux->sinkpad, fmt, &filesize) ||
|
||||||
fmt != GST_FORMAT_BYTES || filesize == -1) {
|
fmt != GST_FORMAT_BYTES || filesize == -1) {
|
||||||
|
@ -2244,9 +2247,14 @@ gst_mxf_demux_pull_random_index_pack (GstMXFDemux * demux)
|
||||||
return;
|
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);
|
gst_buffer_unref (buffer);
|
||||||
demux->offset = old_offset;
|
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
|
static void
|
||||||
|
@ -2486,6 +2494,11 @@ gst_mxf_demux_handle_klv_packet (GstMXFDemux * demux, const MXFUL * key,
|
||||||
buffer, peek);
|
buffer, peek);
|
||||||
} else if (mxf_is_random_index_pack (key)) {
|
} else if (mxf_is_random_index_pack (key)) {
|
||||||
ret = gst_mxf_demux_handle_random_index_pack (demux, key, buffer);
|
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)) {
|
} else if (mxf_is_index_table_segment (key)) {
|
||||||
ret =
|
ret =
|
||||||
gst_mxf_demux_handle_index_table_segment (demux, key, buffer,
|
gst_mxf_demux_handle_index_table_segment (demux, key, buffer,
|
||||||
|
|
Loading…
Reference in a new issue