status_t MP3Encoder::Flush() { if (m_cookie == 0) return B_OK; if (m_bufAvail > 0) { memset(m_buffer+m_bufAvail, 0, m_chunkSize-m_bufAvail); status_t err = EncodeBuffer(m_buffer, m_chunkSize); if (err < B_OK) return err; } return WriteChunk(m_buffer, mp3_encode(m_cookie, NULL, 0, m_buffer), m_LastEncodeInfo); }
status_t MP3Encoder::EncodeBuffer( const char *src, int32 src_length) { assert(src_length == 1152*m_format.channel_count*2); char * output = (char *)alloca(src_length); /* assume each packet will shrink, which is safe for the blade codec */ int outputSize = mp3_encode(m_cookie, src, src_length, output); if (outputSize > 0) { m_LastEncodeInfo->flags |= B_MEDIA_KEY_FRAME; return WriteChunk(output, outputSize, m_LastEncodeInfo); } return B_OK; }
int convert_to_mp3(JNIEnv* env, jobject obj, jstring ifile, jstring ofile) { const char *fi = 0, *fo = 0; int fd, fd_out; if(!ifile || !ofile) { log_err("convert_to_mp3: invalid arguments"); return 0; } fi = (*env)->GetStringUTFChars(env,ifile,NULL); fo = (*env)->GetStringUTFChars(env,ofile,NULL); if(!fi || !fo || !*fi || !*fo) { (*env)->ReleaseStringUTFChars(env,ifile,fi); (*env)->ReleaseStringUTFChars(env,ofile,fo); log_err("convert_to_mp3: invalid arguments"); return 0; } fd = open(fi, O_RDONLY); fd_out = open(fo,O_CREAT|O_TRUNC|O_WRONLY); if(fd < 0 || fd_out < 0) { if(fd >= 0) { log_err("cannot open output file"); close(fd); } if(fd_out >= 0) { log_err("cannot open input file"); close(fd_out); unlink(fo); } (*env)->ReleaseStringUTFChars(env,ifile,fi); (*env)->ReleaseStringUTFChars(env,ofile,fo); return 0; } (*env)->ReleaseStringUTFChars(env,ifile,fi); (*env)->ReleaseStringUTFChars(env,ofile,fo); lseek(fd,sizeof(wavhdr),SEEK_SET); return mp3_encode(fd,fd_out); }