summaryrefslogtreecommitdiffstats
path: root/demuxer.c
diff options
context:
space:
mode:
Diffstat (limited to 'demuxer.c')
-rw-r--r--demuxer.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/demuxer.c b/demuxer.c
index d8588d4cca..33e2c9a04e 100644
--- a/demuxer.c
+++ b/demuxer.c
@@ -21,6 +21,11 @@
#include "codec-cfg.h"
#include "stheader.h"
+void free_demuxer_stream(demux_stream_t *ds){
+ ds_free_packs(ds);
+ free(ds);
+}
+
demux_stream_t* new_demuxer_stream(struct demuxer_st *demuxer,int id){
demux_stream_t* ds=malloc(sizeof(demux_stream_t));
ds->buffer_pos=ds->buffer_size=0;
@@ -74,6 +79,13 @@ sh_audio_t* new_sh_audio(demuxer_t *demuxer,int id){
return demuxer->a_streams[id];
}
+void free_sh_audio(sh_audio_t* sh){
+ if(sh->a_in_buffer) free(sh->a_in_buffer);
+ if(sh->a_buffer) free(sh->a_buffer);
+ if(sh->wf) free(sh->wf);
+ free(sh);
+}
+
sh_video_t* new_sh_video(demuxer_t *demuxer,int id){
if(demuxer->v_streams[id]){
mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_VideoStreamRedefined,id);
@@ -85,6 +97,27 @@ sh_video_t* new_sh_video(demuxer_t *demuxer,int id){
return demuxer->v_streams[id];
}
+void free_sh_video(sh_video_t* sh){
+// if(sh->our_out_buffer) free(sh->our_out_buffer);
+// if(sh->bih) free(sh->bih);
+ free(sh);
+}
+
+void free_demuxer(demuxer_t *demuxer){
+ int i;
+ // free streams:
+ for(i=0;i<256;i++){
+ if(demuxer->a_streams[i]) free_sh_audio(demuxer->a_streams[i]);
+ if(demuxer->v_streams[i]) free_sh_video(demuxer->v_streams[i]);
+ }
+ //if(sh_audio) free_sh_audio(sh_audio);
+ //if(sh_video) free_sh_video(sh_video);
+ // free demuxers:
+ free_demuxer_stream(demuxer->audio);
+ free_demuxer_stream(demuxer->video);
+ free(demuxer);
+}
+
void ds_add_packet(demux_stream_t *ds,demux_packet_t* dp){
// demux_packet_t* dp=new_demux_packet(len);
@@ -481,8 +514,6 @@ switch(file_format){
return demuxer;
}
-
-
int demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags);
int demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,int flags);
int demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,int flags);