codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#define AUDIO_INBUF_SIZE 20480 static char audio_buf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE]; //avresample_convert method int outputframe_audio(VideoState *is,AVFrame *frame) { AVCodecContext *dec = is->audio_st->codec; if( is->avr== NULL) { is->avr = avresample_alloc_context(); av_opt_set_int(is->avr, "in_channel_layout", AV_CH_LAYOUT_STEREO, 0); av_opt_set_int(is->avr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); av_opt_set_int(is->avr, "in_sample_rate", 44100, 0); av_opt_set_int(is->avr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0); av_opt_set_int(is->avr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); av_opt_set_int(is->avr, "out_sample_rate", 44100, 0); avresample_open(is->avr); } if(is->avr) { int maxLen; uint8_t *output=NULL; int out_linesize; int out_size = av_samples_get_buffer_size(&out_linesize, 2, frame->nb_samples, AV_SAMPLE_FMT_S16, 0); int out_samples = frame->nb_samples; output = av_realloc(output, out_size); maxLen = avresample_convert(is->avr, &output, out_linesize, out_samples, frame->data,//extended_data, frame->linesize[0], frame->nb_samples) *4; // for 2channels memcpy(audio_buf, output, maxLen); av_freep(&output); audio_output(audio_buf,maxLen); } } //swr_convert method int outputframe_audio(VideoState *is,AVFrame *frame) { AVCodecContext *dec = is->audio_st->codec; if( is->swr_ctx== NULL) { is->swr_ctx = swr_alloc(); is->swr_ctx=swr_alloc_set_opts(NULL, AV_CH_LAYOUT_STEREO, AV_SAMPLE_FMT_S16, 44100, dec->channel_layout, dec->sample_fmt , 44100,//dec->sample_rate, 0, NULL); swr_init(is->swr_ctx); } if (is->swr_ctx) { int out_linesize; int needed_buf_size = av_samples_get_buffer_size(&out_linesize, dec->channels, frame->nb_samples, AV_SAMPLE_FMT_S16, 1); uint8_t *out[] = { audio_buf }; int outsamples = swr_convert(is->swr_ctx, out, out_linesize,//needed_buf_size, dst,//(const uint8_t**)frame->extended_data, //&is->frame->data[0], frame->nb_samples); is->audio_buf = audio_buf; int resampled_data_size = outsamples * dec->channels * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16); audio_output(audio_buf,resampled_data_size); } }
Private
[
?
]
Run code
Submit