[vlc-commits] mux: mp4: simplify mp4_stream_t [de]init
Francois Cartegnie
git at videolan.org
Fri Dec 21 11:08:57 CET 2018
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Dec 20 15:21:01 2018 +0100| [fda3d161faa8cc9883be4590a9fc34c4592d6ee9] | committer: Francois Cartegnie
mux: mp4: simplify mp4_stream_t [de]init
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fda3d161faa8cc9883be4590a9fc34c4592d6ee9
---
modules/mux/mp4/mp4.c | 99 ++++++++++++++++++++++++---------------------------
1 file changed, 46 insertions(+), 53 deletions(-)
diff --git a/modules/mux/mp4/mp4.c b/modules/mux/mp4/mp4.c
index ca9af19ad1..506dc3c226 100644
--- a/modules/mux/mp4/mp4.c
+++ b/modules/mux/mp4/mp4.c
@@ -175,6 +175,45 @@ typedef struct
uint32_t i_mfhd_sequence;
} sout_mux_sys_t;
+static void mp4_stream_Delete(mp4_stream_t *p_stream)
+{
+ /* mp4 frag */
+ if (p_stream->p_held_entry)
+ {
+ block_Release(p_stream->p_held_entry->p_block);
+ free(p_stream->p_held_entry);
+ }
+ while(p_stream->read.p_first)
+ {
+ mp4_fragentry_t *p_next = p_stream->read.p_first->p_next;
+ block_Release(p_stream->read.p_first->p_block);
+ free(p_stream->read.p_first);
+ p_stream->read.p_first = p_next;
+ }
+ while(p_stream->towrite.p_first)
+ {
+ mp4_fragentry_t *p_next = p_stream->towrite.p_first->p_next;
+ block_Release(p_stream->towrite.p_first->p_block);
+ free(p_stream->towrite.p_first);
+ p_stream->towrite.p_first = p_next;
+ }
+ free(p_stream->p_indexentries);
+
+ free(p_stream);
+}
+
+static mp4_stream_t *mp4_stream_New(void)
+{
+ mp4_stream_t *p_stream = calloc(1, sizeof(*p_stream));
+ if(p_stream)
+ {
+ p_stream->i_first_dts = VLC_TICK_INVALID;
+ p_stream->i_last_dts = VLC_TICK_INVALID;
+ p_stream->i_last_pts = VLC_TICK_INVALID;
+ }
+ return p_stream;
+}
+
static void box_send(sout_mux_t *p_mux, bo_t *box);
static block_t *ConvertSUBT(block_t *);
@@ -382,7 +421,7 @@ static void Close(vlc_object_t *p_this)
cleanup:
/* Clean-up */
for (unsigned int i_trak = 0; i_trak < p_sys->i_nb_streams; i_trak++)
- free(p_sys->pp_streams[i_trak]);
+ mp4_stream_Delete(p_sys->pp_streams[i_trak]);
TAB_CLEAN(p_sys->i_nb_streams, p_sys->pp_streams);
mp4mux_Delete(p_sys->muxh);
free(p_sys);
@@ -431,8 +470,7 @@ static int AddStream(sout_mux_t *p_mux, sout_input_t *p_input)
return VLC_EGENERIC;
}
- p_stream = malloc(sizeof(mp4_stream_t));
- if(!p_stream)
+ if(!(p_stream = mp4_stream_New()))
return VLC_ENOMEM;
uint32_t i_track_timescale = CLOCK_FREQ;
@@ -483,23 +521,6 @@ static int AddStream(sout_mux_t *p_mux, sout_input_t *p_input)
}
p_stream->p_fmt = p_input->p_fmt;
- p_stream->i_length_neg = 0;
- p_stream->i_last_dts = VLC_TICK_INVALID;
- p_stream->i_last_pts = VLC_TICK_INVALID;
-
- p_stream->b_hasiframes = false;
-
- p_stream->i_current_run = 0;
- p_stream->read.p_first = NULL;
- p_stream->read.p_last = NULL;
- p_stream->towrite.p_first = NULL;
- p_stream->towrite.p_last = NULL;
- p_stream->p_held_entry = NULL;
- p_stream->i_last_iframe_time = 0;
- p_stream->i_written_duration = 0;
- p_stream->p_indexentries = NULL;
- p_stream->i_indexentriesmax = 0;
- p_stream->i_indexentries = 0;
p_input->p_sys = p_stream;
@@ -1345,38 +1366,6 @@ static void LengthLocalFixup(sout_mux_t *p_mux, const mp4_stream_t *p_stream, bl
}
}
-static void CleanupFrag(sout_mux_sys_t *p_sys)
-{
- for (unsigned int i = 0; i < p_sys->i_nb_streams; i++)
- {
- mp4_stream_t *p_stream = p_sys->pp_streams[i];
- if (p_stream->p_held_entry)
- {
- block_Release(p_stream->p_held_entry->p_block);
- free(p_stream->p_held_entry);
- }
- while(p_stream->read.p_first)
- {
- mp4_fragentry_t *p_next = p_stream->read.p_first->p_next;
- block_Release(p_stream->read.p_first->p_block);
- free(p_stream->read.p_first);
- p_stream->read.p_first = p_next;
- }
- while(p_stream->towrite.p_first)
- {
- mp4_fragentry_t *p_next = p_stream->towrite.p_first->p_next;
- block_Release(p_stream->towrite.p_first->p_block);
- free(p_stream->towrite.p_first);
- p_stream->towrite.p_first = p_next;
- }
- free(p_stream->p_indexentries);
- free(p_stream);
- }
- TAB_CLEAN(p_sys->i_nb_streams, p_sys->pp_streams);
- mp4mux_Delete(p_sys->muxh);
- free(p_sys);
-}
-
static void CloseFrag(vlc_object_t *p_this)
{
sout_mux_t *p_mux = (sout_mux_t *) p_this;
@@ -1419,7 +1408,11 @@ static void CloseFrag(vlc_object_t *p_this)
}
}
- CleanupFrag(p_sys);
+ for (unsigned int i = 0; i < p_sys->i_nb_streams; i++)
+ mp4_stream_Delete(p_sys->pp_streams[i]);
+ TAB_CLEAN(p_sys->i_nb_streams, p_sys->pp_streams);
+ mp4mux_Delete(p_sys->muxh);
+ free(p_sys);
}
static int MuxFrag(sout_mux_t *p_mux)
More information about the vlc-commits
mailing list