mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-29 19:02:21 +00:00
vorbisenc: use float planar sample format
This commit is contained in:
parent
11dcddb97b
commit
233783e2c1
@ -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"),
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user