|
|
|
@ -963,10 +963,10 @@ static int residue_encode(vorbis_enc_context *venc, vorbis_enc_residue *rc, |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *audio, |
|
|
|
|
int samples) |
|
|
|
|
static int apply_window_and_mdct(vorbis_enc_context *venc, |
|
|
|
|
float **audio, int samples) |
|
|
|
|
{ |
|
|
|
|
int i, j, channel; |
|
|
|
|
int i, channel; |
|
|
|
|
const float * win = venc->win[0]; |
|
|
|
|
int window_len = 1 << (venc->log2_blocksize[0] - 1); |
|
|
|
|
float n = (float)(1 << venc->log2_blocksize[0]) / 4.; |
|
|
|
@ -988,9 +988,8 @@ static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *a |
|
|
|
|
if (samples) { |
|
|
|
|
for (channel = 0; channel < venc->channels; channel++) { |
|
|
|
|
float * offset = venc->samples + channel*window_len*2 + window_len; |
|
|
|
|
j = channel; |
|
|
|
|
for (i = 0; i < samples; i++, j += venc->channels) |
|
|
|
|
offset[i] = audio[j] / 32768. / n * win[window_len - i - 1]; |
|
|
|
|
for (i = 0; i < samples; i++) |
|
|
|
|
offset[i] = audio[channel][i] / n * win[window_len - i - 1]; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
for (channel = 0; channel < venc->channels; channel++) |
|
|
|
@ -1005,9 +1004,8 @@ static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *a |
|
|
|
|
if (samples) { |
|
|
|
|
for (channel = 0; channel < venc->channels; channel++) { |
|
|
|
|
float *offset = venc->saved + channel * window_len; |
|
|
|
|
j = channel; |
|
|
|
|
for (i = 0; i < samples; i++, j += venc->channels) |
|
|
|
|
offset[i] = audio[j] / 32768. / n * win[i]; |
|
|
|
|
for (i = 0; i < samples; i++) |
|
|
|
|
offset[i] = audio[channel][i] / n * win[i]; |
|
|
|
|
} |
|
|
|
|
venc->have_saved = 1; |
|
|
|
|
} else { |
|
|
|
@ -1021,7 +1019,7 @@ static int vorbis_encode_frame(AVCodecContext *avccontext, AVPacket *avpkt, |
|
|
|
|
const AVFrame *frame, int *got_packet_ptr) |
|
|
|
|
{ |
|
|
|
|
vorbis_enc_context *venc = avccontext->priv_data; |
|
|
|
|
const int16_t *audio = frame ? (const int16_t *)frame->data[0] : NULL; |
|
|
|
|
float **audio = frame ? (float **)frame->extended_data : NULL; |
|
|
|
|
int samples = frame ? frame->nb_samples : 0; |
|
|
|
|
vorbis_enc_mode *mode; |
|
|
|
|
vorbis_enc_mapping *mapping; |
|
|
|
@ -1216,7 +1214,7 @@ AVCodec ff_vorbis_encoder = { |
|
|
|
|
.encode2 = vorbis_encode_frame, |
|
|
|
|
.close = vorbis_encode_close, |
|
|
|
|
.capabilities = CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL, |
|
|
|
|
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, |
|
|
|
|
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP, |
|
|
|
|
AV_SAMPLE_FMT_NONE }, |
|
|
|
|
.long_name = NULL_IF_CONFIG_SMALL("Vorbis"), |
|
|
|
|
}; |
|
|
|
|