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;