mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
mpegtsbase: Refactor code to cope with g_hash_table_foreach_remove()
This commit is contained in:
parent
6abe2134bf
commit
0c80f63c5b
1 changed files with 28 additions and 13 deletions
|
@ -477,21 +477,30 @@ mpegts_base_free_program (MpegTSBaseProgram * program)
|
||||||
|
|
||||||
/* FIXME : This is being called by tsdemux::find_timestamps()
|
/* FIXME : This is being called by tsdemux::find_timestamps()
|
||||||
* We need to avoid re-entrant code like that */
|
* We need to avoid re-entrant code like that */
|
||||||
|
static gboolean
|
||||||
|
mpegts_base_stop_program (MpegTSBase * base, MpegTSBaseProgram * program)
|
||||||
|
{
|
||||||
|
MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (base, "program_number : %d", program->program_number);
|
||||||
|
|
||||||
|
if (klass->program_stopped)
|
||||||
|
klass->program_stopped (base, program);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mpegts_base_remove_program (MpegTSBase * base, gint program_number)
|
mpegts_base_remove_program (MpegTSBase * base, gint program_number)
|
||||||
{
|
{
|
||||||
MpegTSBaseProgram *program;
|
MpegTSBaseProgram *program;
|
||||||
MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (base, "program_number : %d", program_number);
|
|
||||||
|
|
||||||
if (klass->program_stopped) {
|
|
||||||
program =
|
program =
|
||||||
(MpegTSBaseProgram *) g_hash_table_lookup (base->programs,
|
(MpegTSBaseProgram *) g_hash_table_lookup (base->programs,
|
||||||
GINT_TO_POINTER (program_number));
|
GINT_TO_POINTER (program_number));
|
||||||
if (program)
|
if (program)
|
||||||
klass->program_stopped (base, program);
|
mpegts_base_stop_program (base, program);
|
||||||
}
|
|
||||||
g_hash_table_remove (base->programs, GINT_TO_POINTER (program_number));
|
g_hash_table_remove (base->programs, GINT_TO_POINTER (program_number));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1137,20 +1146,26 @@ mpegts_base_get_tags_from_eit (MpegTSBase * base, GstStructure * eit_info)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
remove_each_program (gpointer key, MpegTSBaseProgram * program,
|
remove_each_program (gpointer key, MpegTSBaseProgram * program,
|
||||||
MpegTSBase * base)
|
MpegTSBase * base)
|
||||||
{
|
{
|
||||||
/* First deactivate it */
|
/* First deactivate it */
|
||||||
mpegts_base_deactivate_program (base, program);
|
mpegts_base_deactivate_program (base, program);
|
||||||
/* Then remove it */
|
|
||||||
mpegts_base_remove_program (base, program->program_number);
|
/* Then stop it */
|
||||||
|
mpegts_base_stop_program (base, program);
|
||||||
|
|
||||||
|
/* And tell _foreach_remove() to remove it */
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_mpegts_base_handle_eos (MpegTSBase * base)
|
gst_mpegts_base_handle_eos (MpegTSBase * base)
|
||||||
{
|
{
|
||||||
g_hash_table_foreach (base->programs, (GHFunc) remove_each_program, base);
|
g_hash_table_foreach_remove (base->programs, (GHRFunc) remove_each_program,
|
||||||
|
base);
|
||||||
|
|
||||||
/* finally remove */
|
/* finally remove */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue