From 4b3aad507aaf75263f5b8c719768b24ba688c31e Mon Sep 17 00:00:00 2001 From: Comment Date: Mon, 22 Apr 2013 19:21:42 +0100 Subject: audio output corruption --- rotord/libavaudioloader.cpp | 61 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 10 deletions(-) (limited to 'rotord/libavaudioloader.cpp') diff --git a/rotord/libavaudioloader.cpp b/rotord/libavaudioloader.cpp index 8a2d81a..133fcd4 100644 --- a/rotord/libavaudioloader.cpp +++ b/rotord/libavaudioloader.cpp @@ -1,6 +1,6 @@ #include "libavaudioloader.h" -bool libav::audioloader::setup(const std::string &filename){ +bool libav::Audioloader::setup(const std::string &filename){ av_register_all(); @@ -65,16 +65,16 @@ bool libav::audioloader::setup(const std::string &filename){ av_dump_format(formatContext, 0, 0, false); //avformat.h line 1256 int samples = ((formatContext->duration + 5000)*codecContext->sample_rate)/AV_TIME_BASE; - + std::cout << "This stream has " << codecContext->channels << " channels, a sample rate of " << codecContext->sample_rate << "Hz and "<sample_fmt<< " (aka "<< av_get_sample_fmt_name(codecContext->sample_fmt) << ") "<0){ + for (int i=0;ichannels;j++) { + buffer[(i*frame->channels)+j]=buffer[((sample_start+i)*frame->channels)+j]; + } + } + sample_start=sample_end-sample_start; + } + sample_end=sample_start; + while (sample_endnb_samples)*frame->channels)>buffer.size()){ + buffer.reserve((sample_end+frame->nb_samples)*frame->channels); + } + if (!frame) { + for (int i=0;ichannels;i++){ + buffer[sample_end+i]=0; + } - return true; - } \ No newline at end of file + } + for (int i=0;inb_samples;i++) { + for (int j=0;jchannels;j++) { + buffer[((sample_end+i)*frame->channels)+j]= ((uint16_t*) frame->buf[0])[(i*frame->channels)+j]; + } + } + sample_end+=frame->nb_samples; + //avcodec_free_frame(&frame); + } + if (sample_end>num) { + sample_start=num; + } + else { + sample_start=0; + } + return (uint16_t*)(&buffer[0]); +} + +bool libav::Audioloader::close() { + av_free(frame); + avcodec_close(codecContext); + avformat_close_input(&formatContext); + + return true; +} -- cgit v1.2.3