Browse Source

Float output for libavcodec Vorbis decoder

git-svn-id: https://ffdshow-tryout.svn.sourceforge.net/svnroot/ffdshow-tryout@3771 3b938f2f-1a1a-0410-8054-a526ea5ff92c
tags/n0.8
clsid2 Michael Niedermayer 14 years ago
parent
commit
ba7a28045f
1 changed files with 11 additions and 0 deletions
  1. +11
    -0
      libavcodec/vorbis_dec.c

+ 11
- 0
libavcodec/vorbis_dec.c View File

@@ -1007,7 +1007,12 @@ static av_cold int vorbis_decode_init(AVCodecContext *avccontext)
avccontext->channels = vc->audio_channels; avccontext->channels = vc->audio_channels;
avccontext->sample_rate = vc->audio_samplerate; avccontext->sample_rate = vc->audio_samplerate;
avccontext->frame_size = FFMIN(vc->blocksize[0], vc->blocksize[1]) >> 2; avccontext->frame_size = FFMIN(vc->blocksize[0], vc->blocksize[1]) >> 2;
/* ffdshow custom code */
#if CONFIG_AUDIO_FLOAT
avccontext->sample_fmt = AV_SAMPLE_FMT_FLT;
#else
avccontext->sample_fmt = AV_SAMPLE_FMT_S16; avccontext->sample_fmt = AV_SAMPLE_FMT_S16;
#endif


return 0 ; return 0 ;
} }
@@ -1635,9 +1640,15 @@ static int vorbis_decode_frame(AVCodecContext *avccontext,
len * ff_vorbis_channel_layout_offsets[vc->audio_channels - 1][i]; len * ff_vorbis_channel_layout_offsets[vc->audio_channels - 1][i];
} }


/* ffdshow custom code */
#if CONFIG_AUDIO_FLOAT
float_interleave(data, channel_ptrs, len, vc->audio_channels);
*data_size = len * sizeof(float) * vc->audio_channels;
#else
vc->fmt_conv.float_to_int16_interleave(data, channel_ptrs, len, vc->fmt_conv.float_to_int16_interleave(data, channel_ptrs, len,
vc->audio_channels); vc->audio_channels);
*data_size = len * 2 * vc->audio_channels; *data_size = len * 2 * vc->audio_channels;
#endif


return buf_size ; return buf_size ;
} }


Loading…
Cancel
Save