comparison libmpdemux/demux_ts.c @ 32609:3ca30fb56837

Fix several memleaks in TS demuxer. Fixes bug 1280.
author reimar
date Sat, 11 Dec 2010 23:15:48 +0000
parents 75c7654261d0
children 2e5c286a464a
comparison
equal deleted inserted replaced
32608:75c7654261d0 32609:3ca30fb56837
1111 { 1111 {
1112 free(priv->pmt[i].section.buffer); 1112 free(priv->pmt[i].section.buffer);
1113 free(priv->pmt[i].es); 1113 free(priv->pmt[i].es);
1114 } 1114 }
1115 free(priv->pmt); 1115 free(priv->pmt);
1116 }
1117 for (i = 0; i < NB_PID_MAX; i++)
1118 {
1119 free(priv->ts.pids[i]);
1120 priv->ts.pids[i] = NULL;
1121 }
1122 for (i = 0; i < 3; i++)
1123 {
1124 if (priv->fifo[i].pack)
1125 free_demux_packet(priv->fifo[i].pack);
1126 priv->fifo[i].pack = NULL;
1116 } 1127 }
1117 free(priv); 1128 free(priv);
1118 } 1129 }
1119 demuxer->priv=NULL; 1130 demuxer->priv=NULL;
1120 } 1131 }
2676 2687
2677 static int fill_packet(demuxer_t *demuxer, demux_stream_t *ds, demux_packet_t **dp, int *dp_offset, TS_stream_info *si) 2688 static int fill_packet(demuxer_t *demuxer, demux_stream_t *ds, demux_packet_t **dp, int *dp_offset, TS_stream_info *si)
2678 { 2689 {
2679 int ret = 0; 2690 int ret = 0;
2680 2691
2681 if((*dp != NULL) && (*dp_offset > 0)) 2692 if(*dp && *dp_offset <= 0)
2693 {
2694 free_demux_packet(*dp);
2695 *dp = NULL;
2696 }
2697 if(*dp)
2682 { 2698 {
2683 ret = *dp_offset; 2699 ret = *dp_offset;
2684 resize_demux_packet(*dp, ret); //shrinked to the right size 2700 resize_demux_packet(*dp, ret); //shrinked to the right size
2685 ds_add_packet(ds, *dp); 2701 ds_add_packet(ds, *dp);
2686 mp_msg(MSGT_DEMUX, MSGL_DBG2, "ADDED %d bytes to %s fifo, PTS=%.3f\n", ret, (ds == demuxer->audio ? "audio" : (ds == demuxer->video ? "video" : "sub")), (*dp)->pts); 2702 mp_msg(MSGT_DEMUX, MSGL_DBG2, "ADDED %d bytes to %s fifo, PTS=%.3f\n", ret, (ds == demuxer->audio ? "audio" : (ds == demuxer->video ? "video" : "sub")), (*dp)->pts);