Mercurial > mplayer.hg
comparison libmpdemux/demux_ogg.c @ 14666:91bbfcb66883
Memleak fixes. Based on patch by Timothy Lee (timothy lee at siriushk com).
author | reimar |
---|---|
date | Sun, 06 Feb 2005 10:30:10 +0000 |
parents | 7a3ada58992b |
children | 2c4e30f37773 |
comparison
equal
deleted
inserted
replaced
14665:e07e06c06932 | 14666:91bbfcb66883 |
---|---|
729 char *demux_ogg_sub_lang(demuxer_t *demuxer, int index) { | 729 char *demux_ogg_sub_lang(demuxer_t *demuxer, int index) { |
730 ogg_demuxer_t *ogg_d = (ogg_demuxer_t *)demuxer->priv; | 730 ogg_demuxer_t *ogg_d = (ogg_demuxer_t *)demuxer->priv; |
731 return (index < 0) ? NULL : (index >= ogg_d->n_text) ? NULL : ogg_d->text_langs[index]; | 731 return (index < 0) ? NULL : (index >= ogg_d->n_text) ? NULL : ogg_d->text_langs[index]; |
732 } | 732 } |
733 | 733 |
734 void demux_close_ogg(demuxer_t* demuxer); | |
735 | |
734 /// Open an ogg physical stream | 736 /// Open an ogg physical stream |
735 int demux_ogg_open(demuxer_t* demuxer) { | 737 int demux_ogg_open(demuxer_t* demuxer) { |
736 ogg_demuxer_t* ogg_d; | 738 ogg_demuxer_t* ogg_d; |
737 stream_t *s; | 739 stream_t *s; |
738 char* buf; | 740 char* buf; |
762 ogg_d->pos += ogg_d->last_size; | 764 ogg_d->pos += ogg_d->last_size; |
763 np = ogg_sync_pageseek(sync,page); | 765 np = ogg_sync_pageseek(sync,page); |
764 /// Error | 766 /// Error |
765 if(np < 0) { | 767 if(np < 0) { |
766 mp_msg(MSGT_DEMUX,MSGL_DBG2,"Ogg demuxer : Bad page sync\n"); | 768 mp_msg(MSGT_DEMUX,MSGL_DBG2,"Ogg demuxer : Bad page sync\n"); |
767 free(ogg_d); | 769 goto err_out; |
768 return 0; | |
769 } | 770 } |
770 /// Need some more data | 771 /// Need some more data |
771 if(np == 0) { | 772 if(np == 0) { |
772 int len; | 773 int len; |
773 buf = ogg_sync_buffer(sync,BLOCK_SIZE); | 774 buf = ogg_sync_buffer(sync,BLOCK_SIZE); |
774 len = stream_read(s,buf,BLOCK_SIZE); | 775 len = stream_read(s,buf,BLOCK_SIZE); |
775 if(len == 0 && s->eof) { | 776 if(len == 0 && s->eof) { |
776 free(ogg_d); | 777 goto err_out; |
777 return 0; | |
778 } | 778 } |
779 ogg_sync_wrote(sync,len); | 779 ogg_sync_wrote(sync,len); |
780 continue; | 780 continue; |
781 } | 781 } |
782 ogg_d->last_size = np; | 782 ogg_d->last_size = np; |
1055 } | 1055 } |
1056 ogg_d->num_sub++; | 1056 ogg_d->num_sub++; |
1057 } | 1057 } |
1058 | 1058 |
1059 if(!n_video && !n_audio) { | 1059 if(!n_video && !n_audio) { |
1060 free(ogg_d); | 1060 goto err_out; |
1061 return 0; | |
1062 } | 1061 } |
1063 | 1062 |
1064 /// Finish to setup the demuxer | 1063 /// Finish to setup the demuxer |
1065 demuxer->priv = ogg_d; | 1064 demuxer->priv = ogg_d; |
1066 | 1065 |
1093 } | 1092 } |
1094 | 1093 |
1095 mp_msg(MSGT_DEMUX,MSGL_V,"Ogg demuxer : found %d audio stream%s, %d video stream%s and %d text stream%s\n",n_audio,n_audio>1?"s":"",n_video,n_video>1?"s":"",ogg_d->n_text,ogg_d->n_text>1?"s":""); | 1094 mp_msg(MSGT_DEMUX,MSGL_V,"Ogg demuxer : found %d audio stream%s, %d video stream%s and %d text stream%s\n",n_audio,n_audio>1?"s":"",n_video,n_video>1?"s":"",ogg_d->n_text,ogg_d->n_text>1?"s":""); |
1096 | 1095 |
1097 return 1; | 1096 return 1; |
1097 | |
1098 err_out: | |
1099 demux_close_ogg(demuxer); | |
1100 return 0; | |
1098 } | 1101 } |
1099 | 1102 |
1100 | 1103 |
1101 int demux_ogg_fill_buffer(demuxer_t *d) { | 1104 int demux_ogg_fill_buffer(demuxer_t *d) { |
1102 ogg_demuxer_t* ogg_d; | 1105 ogg_demuxer_t* ogg_d; |