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 };