Mercurial > libavcodec.hg
comparison mp3lameaudio.c @ 2091:02a4fd7c606c libavcodec
flush audio encoder buffers at the end
fix vorbis in nut again
author | michael |
---|---|
date | Tue, 22 Jun 2004 21:14:01 +0000 |
parents | 81a1a5be13aa |
children | e25782262d7d |
comparison
equal
deleted
inserted
replaced
2090:869805505b30 | 2091:02a4fd7c606c |
---|---|
134 Mp3AudioContext *s = avctx->priv_data; | 134 Mp3AudioContext *s = avctx->priv_data; |
135 int len, i; | 135 int len, i; |
136 int lame_result; | 136 int lame_result; |
137 | 137 |
138 /* lame 3.91 dies on '1-channel interleaved' data */ | 138 /* lame 3.91 dies on '1-channel interleaved' data */ |
139 if (s->stereo) { | 139 |
140 if(data){ | |
141 if (s->stereo) { | |
140 lame_result = lame_encode_buffer_interleaved( | 142 lame_result = lame_encode_buffer_interleaved( |
141 s->gfp, | 143 s->gfp, |
142 data, | 144 data, |
143 avctx->frame_size, | 145 avctx->frame_size, |
144 s->buffer + s->buffer_index, | 146 s->buffer + s->buffer_index, |
145 BUFFER_SIZE - s->buffer_index | 147 BUFFER_SIZE - s->buffer_index |
146 ); | 148 ); |
147 } else { | 149 } else { |
148 lame_result = lame_encode_buffer( | 150 lame_result = lame_encode_buffer( |
149 s->gfp, | 151 s->gfp, |
150 data, | 152 data, |
151 data, | 153 data, |
152 avctx->frame_size, | 154 avctx->frame_size, |
153 s->buffer + s->buffer_index, | 155 s->buffer + s->buffer_index, |
154 BUFFER_SIZE - s->buffer_index | 156 BUFFER_SIZE - s->buffer_index |
155 ); | 157 ); |
158 } | |
159 }else{ | |
160 lame_result= lame_encode_flush( | |
161 s->gfp, | |
162 s->buffer + s->buffer_index, | |
163 BUFFER_SIZE - s->buffer_index | |
164 ); | |
156 } | 165 } |
157 | 166 |
158 if(lame_result==-1) { | 167 if(lame_result==-1) { |
159 /* output buffer too small */ | 168 /* output buffer too small */ |
160 av_log(avctx, AV_LOG_ERROR, "lame: output buffer too small (buffer index: %d, free bytes: %d)\n", s->buffer_index, BUFFER_SIZE - s->buffer_index); | 169 av_log(avctx, AV_LOG_ERROR, "lame: output buffer too small (buffer index: %d, free bytes: %d)\n", s->buffer_index, BUFFER_SIZE - s->buffer_index); |
172 memcpy(frame, s->buffer, len); | 181 memcpy(frame, s->buffer, len); |
173 s->buffer_index -= len; | 182 s->buffer_index -= len; |
174 | 183 |
175 memmove(s->buffer, s->buffer+len, s->buffer_index); | 184 memmove(s->buffer, s->buffer+len, s->buffer_index); |
176 //FIXME fix the audio codec API, so we dont need the memcpy() | 185 //FIXME fix the audio codec API, so we dont need the memcpy() |
177 //FIXME fix the audio codec API, so we can output multiple packets if we have them | |
178 /*for(i=0; i<len; i++){ | 186 /*for(i=0; i<len; i++){ |
179 av_log(avctx, AV_LOG_DEBUG, "%2X ", frame[i]); | 187 av_log(avctx, AV_LOG_DEBUG, "%2X ", frame[i]); |
180 }*/ | 188 }*/ |
181 return len; | 189 return len; |
182 }else | 190 }else |
199 CODEC_TYPE_AUDIO, | 207 CODEC_TYPE_AUDIO, |
200 CODEC_ID_MP3, | 208 CODEC_ID_MP3, |
201 sizeof(Mp3AudioContext), | 209 sizeof(Mp3AudioContext), |
202 MP3lame_encode_init, | 210 MP3lame_encode_init, |
203 MP3lame_encode_frame, | 211 MP3lame_encode_frame, |
204 MP3lame_encode_close | 212 MP3lame_encode_close, |
205 }; | 213 .capabilities= CODEC_CAP_DELAY, |
214 }; |