|
|
@ -42,6 +42,7 @@ typedef struct OggVorbisContext { |
|
|
|
vorbis_block vb ; |
|
|
|
vorbis_block vb ; |
|
|
|
uint8_t buffer[BUFFER_SIZE]; |
|
|
|
uint8_t buffer[BUFFER_SIZE]; |
|
|
|
int buffer_index; |
|
|
|
int buffer_index; |
|
|
|
|
|
|
|
int eof; |
|
|
|
|
|
|
|
|
|
|
|
/* decoder */ |
|
|
|
/* decoder */ |
|
|
|
vorbis_comment vc ; |
|
|
|
vorbis_comment vc ; |
|
|
@ -136,10 +137,13 @@ static int oggvorbis_encode_frame(AVCodecContext *avccontext, |
|
|
|
int buf_size, void *data) |
|
|
|
int buf_size, void *data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
OggVorbisContext *context = avccontext->priv_data ; |
|
|
|
OggVorbisContext *context = avccontext->priv_data ; |
|
|
|
float **buffer ; |
|
|
|
|
|
|
|
ogg_packet op ; |
|
|
|
ogg_packet op ; |
|
|
|
signed short *audio = data ; |
|
|
|
signed short *audio = data ; |
|
|
|
int l, samples = data ? OGGVORBIS_FRAME_SIZE : 0; |
|
|
|
int l; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(data) { |
|
|
|
|
|
|
|
int samples = OGGVORBIS_FRAME_SIZE; |
|
|
|
|
|
|
|
float **buffer ; |
|
|
|
|
|
|
|
|
|
|
|
buffer = vorbis_analysis_buffer(&context->vd, samples) ; |
|
|
|
buffer = vorbis_analysis_buffer(&context->vd, samples) ; |
|
|
|
|
|
|
|
|
|
|
@ -154,6 +158,11 @@ static int oggvorbis_encode_frame(AVCodecContext *avccontext, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
vorbis_analysis_wrote(&context->vd, samples) ; |
|
|
|
vorbis_analysis_wrote(&context->vd, samples) ; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
if(!context->eof) |
|
|
|
|
|
|
|
vorbis_analysis_wrote(&context->vd, 0) ; |
|
|
|
|
|
|
|
context->eof = 1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
while(vorbis_analysis_blockout(&context->vd, &context->vb) == 1) { |
|
|
|
while(vorbis_analysis_blockout(&context->vd, &context->vb) == 1) { |
|
|
|
vorbis_analysis(&context->vb, NULL); |
|
|
|
vorbis_analysis(&context->vb, NULL); |
|
|
|