fixed some issues on audio resampling

preferencesAboutTextFull
Clément Fauconnier 7 years ago
parent b8a3712177
commit bde9c947bd
  1. 21
      src/podcast/ffmpeg/UBFFmpegVideoEncoder.cpp
  2. 14
      src/podcast/ffmpeg/UBMicrophoneInput.cpp
  3. 4
      src/podcast/podcast.pri

@ -392,13 +392,17 @@ bool UBFFmpegVideoEncoder::init()
c = mAudioStream->codec; c = mAudioStream->codec;
c->bit_rate = 96000; c->bit_rate = 96000;
c->sample_fmt = audioCodec->sample_fmts[0]; // FLTP by default for AAC c->sample_fmt = audioCodec->sample_fmts ? audioCodec->sample_fmts[0] : AV_SAMPLE_FMT_FLTP;// FLTP by default for AAC
c->sample_rate = mAudioSampleRate; c->sample_rate = mAudioSampleRate;
c->channels = 2; c->channel_layout = AV_CH_LAYOUT_STEREO;
c->channel_layout = av_get_default_channel_layout(c->channels); c->channels = av_get_channel_layout_nb_channels(c->channel_layout);
c->profile = FF_PROFILE_AAC_MAIN;
c->time_base = {1, mAudioSampleRate}; //https://trac.ffmpeg.org/wiki/Encode/H.264#Profile
c->strict_std_compliance = -2; // Enable use of experimental codec //Omit this unless your target device only supports a certain profile
//(see https://trac.ffmpeg.org/wiki/Encode/H.264#Compatibility).
//c->profile = FF_PROFILE_AAC_MAIN;
c->time_base = { 1, c->sample_rate };
if (mOutputFormatContext->oformat->flags & AVFMT_GLOBALHEADER) if (mOutputFormatContext->oformat->flags & AVFMT_GLOBALHEADER)
c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
@ -562,11 +566,6 @@ void UBFFmpegVideoEncoder::processAudio(QByteArray &data)
} }
// Convert to destination format // Convert to destination format
qDebug() << mSwrContext;
qDebug() << outSamples;
qDebug() << outSamplesCount;
qDebug() << inSamples;
qDebug() << inSamplesCount;
ret = swr_convert(mSwrContext, ret = swr_convert(mSwrContext,
outSamples, outSamplesCount, outSamples, outSamplesCount,

@ -42,6 +42,18 @@ bool UBMicrophoneInput::init()
} }
mAudioFormat = mAudioDeviceInfo.preferredFormat(); mAudioFormat = mAudioDeviceInfo.preferredFormat();
/*
* https://ffmpeg.org/doxygen/3.1/group__lavu__sampfmts.html#gaf9a51ca15301871723577c730b5865c5
The data described by the sample format is always in native-endian order.
Sample values can be expressed by native C types, hence the lack of a signed 24-bit sample format
even though it is a common raw audio data format.
If a signed 24-bit sample format is natively preferred, we a set signed 16-bit sample format instead.
*/
if (mAudioFormat.sampleSize() == 24)
mAudioFormat.setSampleSize(16);
mAudioInput = new QAudioInput(mAudioDeviceInfo, mAudioFormat, NULL); mAudioInput = new QAudioInput(mAudioDeviceInfo, mAudioFormat, NULL);
connect(mAudioInput, SIGNAL(stateChanged(QAudio::State)), connect(mAudioInput, SIGNAL(stateChanged(QAudio::State)),
@ -294,6 +306,8 @@ QString UBMicrophoneInput::getErrorString(QAudio::Error errorCode)
case QAudio::FatalError : case QAudio::FatalError :
return "Fatal error; audio device unusable"; return "Fatal error; audio device unusable";
default:
return "unhandled error...";
} }
return ""; return "";
} }

@ -31,8 +31,8 @@ macx {
HEADERS += src/podcast/ffmpeg/UBFFmpegVideoEncoder.h \ HEADERS += src/podcast/ffmpeg/UBFFmpegVideoEncoder.h \
src/podcast/ffmpeg/UBMicrophoneInput.h src/podcast/ffmpeg/UBMicrophoneInput.h
LIBS += -lavformat -lavcodec -lswscale -lavutil \ LIBS += -lavformat -lavcodec -lswscale -lswresample -lavutil \
-lpthread -lvpx -lvorbisenc -lfreetype -llzma -lbz2 -lz -ldl -lswresample -lswscale -lavutil -lm -lpthread -lvpx -lvorbisenc -lfreetype -llzma -lbz2 -lz -ldl -lavutil -lm
# (ffmpeg-4.0 with all options (to clean)) # (ffmpeg-4.0 with all options (to clean))
# brew install ffmpeg --with-chromaprint --with-fdk-aac --with-libass --with-librsvg --with-libsoxr --with-libssh --with-tesseract # brew install ffmpeg --with-chromaprint --with-fdk-aac --with-libass --with-librsvg --with-libsoxr --with-libssh --with-tesseract

Loading…
Cancel
Save