Changeset 206:c57fd131ee04 in roaraudio
- Timestamp:
- 07/21/08 01:29:53 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/codecfilter_vorbis.c
r205 r206 24 24 *inst = (CODECFILTER_USERDATA_T) self; 25 25 26 return -1; 26 ((struct roar_stream*)info)->info.codec = ROAR_CODEC_DEFAULT; 27 28 return 0; 27 29 } 28 30 … … 36 38 37 39 free(inst); 38 return -1;40 return 0; 39 41 } 40 42 … … 42 44 struct codecfilter_vorbis_inst * self = (struct codecfilter_vorbis_inst *) inst; 43 45 long r; 46 long todo = len; 47 long done = 0; 44 48 45 if ( !self->opened == 2 ) { 49 // printf("cf_vorbis_read(inst=%p, buf=%p, len=%i) = ?\n", inst, buf, len); 50 51 self->opened++; 52 if ( self->opened == 16 ) { 53 //printf("cf_vorbis_read(*): opening...\n"); 46 54 if ( ov_open(self->in, &(self->vf), NULL, 0) < 0 ) { 47 55 free((void*)self); 48 return -1;56 return 0; 49 57 } 50 58 } 51 self->opened++;52 59 53 r = ov_read(&(self->vf), buf, len, 0, 2, 1, &(self->current_section)); 60 if ( self->opened < 16 ) { 61 return -1; 62 } 54 63 55 if ( r == 0 ) { 64 while (todo) { 65 r = ov_read(&(self->vf), buf+done, todo, 0, 2, 1, &(self->current_section)); 66 if ( r < 1 ) { 67 break; 68 } else { 69 todo -= r; 70 done += r; 71 } 72 } 73 74 //printf("ov_read(*) = %i\n", done); 75 76 if ( done == 0 ) { 56 77 // do some EOF handling... 57 return -1; 58 } else if ( r < 0 ) { 59 return -1; // error in stream 78 return 0; 60 79 } else { 61 return r;80 return len; 62 81 } 63 82 }
Note: See TracChangeset
for help on using the changeset viewer.